STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Re: STM32 новичку в ARM что к чему

Сообщение Alexey_N »

Оставил только проблемный участок:
Спойлер

Код: Выделить всё

format BINARY
thumb
processor 0x00098280 ; cortex-m0


dw      _sti_handler + 1

db 248 dup (?)

        align   4
_sti_handler:

        beq     .continue
    .continue:
        nop
248 байт, которые добавлены - это максимум когда компилируется, если 249 и более - то та же ошибка.
Да, для меня тоже странно, может я неправильно указал наборы инструкций? V4T+V5T+6M+ALIGN+V6T, биты 7,9,15,16,19, вроде верно.

upd. просмотр листинга показывает, что вместо метки .continue beq пытается перейти на dw _sti_handler+1
Спойлер

Код: Выделить всё

                                        format BINARY
                                        thumb
                                        processor 0x00098280 ; cortex-m0
                                        
00000000: FD 00 00 00                   dw _sti_handler + 1
                                        
00000004: 00 00 00 00 00 00 00 00       db 248 dup (?)
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
          00 00 00 00 00 00 00 00       
                                        
                                                align   4
                                        _sti_handler:
                                        
000000FC: FF D0                                 beq     .continue
                                            .continue:
000000FE: 00 BF                                 nop
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Реклама
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Re: STM32 новичку в ARM что к чему

Сообщение Andrew Martin »

Alexey_N писал(а): upd. просмотр листинга показывает, что вместо метки .continue beq пытается перейти на dw _sti_handler+1
Только что собрал пример.
Спойлерflat assembler for ARM version 1.71.31 (245616 kilobytes memory)
2 passes, 256 bytes.

bug.bin: file format binary


Disassembly of section .data:

00000000 <.data>:
0: 00fd lsls r5, r7, #3
...
fa: 0000 movs r0, r0
fc: d0ff beq.n 0xfe
fe: bf00 nop
Вроде переход по адресу. А вот собрал с блоком данных в 253 байта:
Спойлерflat assembler for ARM version 1.71.31 (222886 kilobytes memory)
2 passes, 264 bytes.

bug.bin: file format binary


Disassembly of section .data:

00000000 <.data>:
0: 0105 lsls r5, r0, #4
...
fe: 0000 movs r0, r0
100: ff00 ffff ; <UNDEFINED> instruction: 0xff00ffff ;выравнивание
104: d0ff beq.n 0x106
106: bf00 nop
Всё адекватно.

UPD: Скачал fasmarm v1.4. Есть баг...
Реклама
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Re: STM32 новичку в ARM что к чему

Сообщение aam »

Пытаюсь запустить такой офигительный код: АЦП в режиме однократного преобразования запускается от TRGO тамера TIM1 с частотой 16 кГц, при этом по ПДП скидывает в ОЗУ 256 сэмплов, после чего должно произойти прерывание по завершению ПДП. Так вот, программа разумеется не работает, а отладчиком я пока ничего не нашел.
Пока установил следующее:
- таймер считает. Это видно по изменениям в его счетном регистре.
- АЦП калибруется (после калибровки в его регистре обнаруживается калибровочный коэффициент), но дальше в его регистре ничего не меняется
- прерывание по завершению ПДП, разумеется не происходит.
С чего начать поиск проблемы? Прикол в том, что отладчик есть, но как его использовать, если все действия фактически происходят в обход проца? Как, например, проверить в отладчике, тактируется ли запуск преобразования от TRGO?

PS: да, и как все-таки опору АЦП настраивать? :?
Alexey_N писал(а):Но почему-то фасм докопался до другой метки ... Какой предел расстояния в таком случае?
Может я чего не понял, но разве расстояние между меткой .continue: и командой перехода на неё не 2 команды?
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Re: STM32 новичку в ARM что к чему

Сообщение Andrew Martin »

aam писал(а): Может я чего не понял, но разве расстояние между меткой .continue: и командой перехода на неё не 2 команды?
Не обращайте внимания, у нас багфикс fasmarm-а :kill:
Реклама
Эиком - электронные компоненты и радиодетали
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

aam писал(а):прерывание по завершению ПДП, разумеется не происходит.
Ну и отключите его, это ПДП. Ждите в цикле, пока АЦП выставит флаг завершения преобразования. Если его нет, значит смотрите, почему таймер АЦП не запускает.
да, и как все-таки опору АЦП настраивать?
А чего его настраивать? Из всех настроек там только вкл. и выкл.
Реклама
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Re: STM32 новичку в ARM что к чему

Сообщение aam »

Заработал АЦП) Причина была в том, что я ступил и не ставил бит ADSTART в регистре CR. Думал что триггер его сам запускать должен. :oops:
Но вот с опорой опять не все ясно. Я внутренний ИОН включил, но при этом код "все 1" читается только когда на ногу подаю + питания. Т. е. диапазон от 0 до +U, а не от 0 до U_ref.

Еще скажите, а как правильно приостанавливать процесс оцифровки? Алгоритм планируется такой:
- заполняю по ПДП буфер на 256 отсчетов, частота дискретизации 16 кГц от таймера, АЦП работает в режиме однократного преобразования по TRG0. Произошло прерывание по завершению ПДП.
- останавливаю АЦП, потом обрабатываю полученные данные, делаю все что нужно.
- когда буфер уже можно "портить" запускаю новую итерацию и так до бесконечности. Т. е. на время пока я обрабатываю результат, АЦП не должен ничего измерять, буфер не должен портиться.
Сейчас я сбрасываю флаг прерывания ПДП, обновляю регистр количества передач данных ПДП, выключаю таймер сбросом CEN.
Запускаю процесс установкой CEN в таймере и ADSTART в АЦП. Но вроде как-то коряво все это...
Реклама
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Re: STM32 новичку в ARM что к чему

Сообщение Andrew Martin »

To Alexey_N

Залатали баг, качайте исправленный fasmarm. Оперативненько! :)))
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Re: STM32 новичку в ARM что к чему

Сообщение Alexey_N »

О! Да, очень быстро поправили :)
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Re: STM32 новичку в ARM что к чему

Сообщение Ярослав555 »

Помогите разобраться.
Предистория.
В CubeX был сгенерирован проект по шаблону из инета. В программе задействован АЦП Изображение, настроен DMA Изображение, который копирует значения АЦП в массив. В начале использовался DMA-массив на 2 значения, в прерывании void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) я копировал эту пару в отдельные массивы, таким образом я получал два массива нормальных данных (две синусоиды).
Но, тут захотелось мне делать все короче и проще. Решил я сделать DMA-массив большим, а в прерывании по завершению запускать обработчик сразу, без промежуточного копирования. И при входе в прерывание вот что я получил (вместо двух синусоид) Изображение.
Видно что есть ряд "нулей" по серединке и куча обрезков синусоид. Любые обработчики этого массива отключены.
Почему у меня нет двух синусоид наложенных друг на дружку?

Проблема решена. Вернее ее и не было. Просто отладчик не успевает за работой DMA и не корректно копирует данные из МК в IAR.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение isx »

А по моему вопросу есть какие-нибудь варианты? :solder:
З.Ы. http://radiokot.ru/forum/viewtopic.php? ... 5#p2911425
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Re: STM32 новичку в ARM что к чему

Сообщение aam »

А по моему? :evil:

2 Ярослав555:А может у вас АЦП сначала один канал несколько раз оцифровывает, а потом 2-й и в буфере получается сначала пол буфера только 1-й, а потом пол буфера только 2-й? Тогда неудивительно, что в каждый канал попадет по куску синусоиды. Надо чтобы каналы переключались все время, при каждой выборке и в буфер писались через один - четный/нечетный. Также надо учесть, что в этом случае частота дискретизации для каждого канала вдвое ниже.
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Re: STM32 новичку в ARM что к чему

Сообщение Ярослав555 »

aam писал(а):А по моему? :evil:

2 Ярослав555:А может у вас АЦП сначала один канал несколько раз оцифровывает
ненене. уже разобрался. это 100% swd не успевает загонять данные в иар. я в прерывании остановли ДМА и увидел свои прекрасные графики как должно и быть.
ну у меня есть HALовская функция остановки-запуска DMA. Если Вы хотите всё делать руками, могу посоветовать взять куб, сгенерировать проект, запустить то что надо, а потом в режиме отладки посмотреть что HAL делает с регистрами.

2 isx:
Изображение
судя по тому что предлагает куб ля моего f100, можно ватчдог сконфигурировать для одного канала, всех регулярных каналов, всех регулярных и инжектированых каналов. т-е для того чтобы один канал убрать из ватчдога, можно сам ватчдог сконфигурировать на регулярные каналы, а потенциометр реализовать через инжектированый и в програме периодически делать "опрос" потенциометра. Или разкинуть на разные АЦП, если их в МК больше одного.
Последний раз редактировалось Ярослав555 Чт ноя 10, 2016 22:24:03, всего редактировалось 1 раз.
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Re: STM32 новичку в ARM что к чему

Сообщение aam »

На разные АЦП лучше синусоиды раскидывать. Удвоите максимальную частоту этих синусоид.
А потенциометр вообще можно "раз в час" опрашивать. Его же вращает человек с вполне себе человеческой скоростью. А вообще, ИМХО, потенциометры применительно к МК - это не модно! Чем не нравится энкодер? Они сейчас не намного дороже (и дороже ли?)
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Re: STM32 новичку в ARM что к чему

Сообщение Ярослав555 »

aam писал(а): А вообще, ИМХО, потенциометры применительно к МК - это не модно!
ну не скажите. Если девайс не имеет дисплея/индикатора, то потенциометр очень даже подходит - к нему можно прицепить шкалу, а к энкодеру шкалу не прицепишь.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: STM32 новичку в ARM что к чему

Сообщение isx »

Ярослав555 писал(а):можно ватчдог сконфигурировать для одного канала
АЦП один в моей модели, а вот про каналы и не подумал. Спасибо, пойду рыть RM дальше :)
Ярослав555 писал(а):Если девайс не имеет дисплея/индикатора, то потенциометр очень даже подходит
Полностью согласен, + можно не глядя определить момент полного отключения питания (особенно если использовать потенциометр с выключателем).
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: STM32 новичку в ARM что к чему

Сообщение oleg110592 »

SEGGER раздает бесплатно, для учебы Segger Embedded Studio на основе CrossWorks.

Шустрая среда, поддерживает вроде все STM32, вплоть до F7, ну и микроконтроллеры других производителей. Легким движением создается проект (Ассемблер/Си) без всяких халов и кубов, правда навязывается собственная ртос, также легко отключаемая птичками на этапе создания проекта. Используется компилятор GCC, есть импорт проектов Keil и IAR. Есть симулятор, периферию вроде не показывает, но можно поглядеть что творится в памяти и регистрах, дизассемблер...

https://www.segger.com/ses-introduction.html
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

Как-то так ...

Изображение

Добавлено after 3 hours 48 minutes 8 seconds:
Олег, то не ось отключается, RTT это терминал ...
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: STM32 новичку в ARM что к чему

Сообщение oleg110592 »

да, не доглядел - RTT интересная штука https://www.segger.com/jlink-rtt.html
With RTT it is possible to output information from the target microcontroller as well as sending input to the application at a very high speed without affecting the target's real time behavior.
корявый переводчик:
С RTT можно выводить информацию из целевого микроконтроллера, а также посылая вход в приложение на очень высокой скорости, не влияя на реальное поведение во времени цели.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

На моём скрине в правом нижнем углу выхлоп -RTT.
Естественно нужен JLink.




Так'с . Проекты с Keil перетаскиваются простым копипастом и правкой опций проекта.
Можно делать свои шаблоны, или править существующие -все в xml .
Заливка работает . Дебаг без танцев .
Есть некоторые за***бы с доком окон, но это скорей привычка.

Надо будет на слабой машине потестить, и на линухе...

Потестил на xubuntu в Virtualbox. Даже не интересно... Все встало и работает.
Проект тупо скопипастил с винды...



Изображение
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Re: STM32 новичку в ARM что к чему

Сообщение Apparatchik »

Начал использовать FreeRTOS. Если в задачах есть задержки vTaskDelay или там ожидание семафора то все работает.

Но вот например есть задача мигалка светодиодом с vTaskDelay - мигает. Создаю задачу с пустым вечным циклом - есче мигает. Создаю есче одну задачу с пустым вечным циклом, мигалка мигать перестает. Но если в пустые циклы вставить vTaskDelay, то мигалка начинает мигать. Почему так происходит, разве не должно переключатся между задачами с одинаковым приоритетом по очереди? configUSE_PREEMPTION = 1
«И всё-таки она вертится!»
Ответить

Вернуться в «ARM»