LINUX.ORG.RU

При попытке прочитать аналоговый сигнал подвисает поток в chibios на stm32

 , , , ,


0

1

Тыкаю stm32f103 оно же blue pill или скорее какой-то китайский клон.

Пытаюсь заюзать adc из chibios и наткнулся на странную штуку, при запуске adcConvert я проваливаюсь в osalThreadSuspendS который и подвешивает текущий поток.

Вот тут мой пример. Рядом лежит архив с чибиос - можно распаковать куда угодно и прописать путь в qbs файлик.

Имейте в виду что я не настоящий сварщик и ни черта не понимаю магию которая там происходит да и мне бы не хотелось её понимать (пока что получалось). Скорее всего я забыл что-то где-то наконфигурять или неправильно понял способ использования.

Вот тут чувак описал ровно ту ситуацию http://www.chibios.com/forum/viewtopic.php?t=3037 к сожалению я не понимаю что именно он спросил и что ему ответили.

Вообще мне просто хочется замерить аналоговый сигнал на какой-нибудь ноге, если есть способ проще я с радостью им воспользуюсь.

Апдейт: При попытке прочитать аналоговый сигнал подвисает поток в chibios на stm32 (комментарий)

ЗЫ за то теперь я умею дебажить стм32 из КьютКрейтора

★★★★★

Последнее исправление: ya-betmen (всего исправлений: 1)

проваливаюсь в osalThreadSuspendS который и подвешивает текущий поток.

Т.е. вообще не возвращвется из adcConvert?

adcConvert = запустить замер и дождаться результата. Поэтому он уходит в osalThreadSuspendS - ждет пока ADC закончит замерять.

Сам код правильно выглядит.

Вот тут чувак описал ровно ту ситуацию http://www.chibios.com/forum/viewtopic.php?t=3037 к сожалению я не понимаю что именно он спросил и что ему ответили.

Тут ситуация другая - чувак попытался пнуть adcConvert внутри прерывания. А внутри прерывания спать нельзя.

Kosyak ★★★★
()
Ответ на: комментарий от Kosyak

Т.е. вообще не возвращвется из adcConvert?

Да. Не возвращается. Хз кто и в какой момент его должен разбудить но этого не происходит. Пробовал асинхронно вызывать - так калбак не вызывается совсем. Хз куда смотреть.

ya-betmen ★★★★★
() автор топика
Ответ на: комментарий от ya-betmen

Попробуй убрать ADC_CR2_SWSTART из настроек регистра CR2. С этим битом ADC похоже ждет, что его 10 раз вручную пнут. Да и в примере ADC для stm32f1xx (ChibiOS/testhal/STM32/STM32F1xx/ADC/main.c) этого бита нет.

Kosyak ★★★★
()

Вот тут чувак описал ровно ту ситуацию http://www.chibios.com/forum/viewtopic.php?t=3037 к сожалению я не понимаю что именно он спросил и что ему ответили.

Ему предложили юзать adcStartConversionI(). Кстати, довольно распространенная ситуация, когда у всех функций есть парные для вызова из прерываний.

Вообще мне просто хочется замерить аналоговый сигнал на какой-нибудь ноге, если есть способ проще я с радостью им воспользуюсь.

Я в кубе настраиваю, а потом через очередь сообщений пуляю. Ковырянием в регистрах до сих пор не занимался.

Vit ★★★★★
()
Ответ на: комментарий от Kosyak

Спасибо, похоже дело было действительно в этом, поменял по примеру и вс заработало. Скорее всего осталось из какого-то другого примера. Если честно, то я долго всматривался в hal_adc_configuration_group и назначение полей из adc_lld_configuration_group_fields для меня по большей части осталось загадкой.

ya-betmen ★★★★★
() автор топика
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от Vit

Ему предложили юзать adcStartConversionI

Мне эта штука не помогла т.к. у меня сам ADC прерываний не генерил и соответственно ни калбаки ни синхронный вызов не работали.

Я в кубе настраиваю, а потом через очередь сообщений пуляю. Ковырянием в регистрах до сих пор не занимался.

У меня похоже голова не так работает, я попытался но использование куба для меня это какое-то колдунство.

ya-betmen ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.