
Комментарии 36
STDPeripheralLibrary — тоже фу. Есть ему замена — HAL (вместе с stm32cubemx будет огонь) или libopencm3.
Прошу не путать IDE IAR и компилятор IAR
Да. Именно так. Можно взять от IAR только компилятор, а GUI оболочку выбросить в мусорное ведро.
Вот методичика как это сделать
Сборка прошивки STM32 компилятором IAR при помощи GNU Make скрипта (IAR+Make=CI/CD)https://habr.com/ru/articles/1010484/
Сборка прошивки STM32 компилятором IAR при помощи GNU Make скрипта (IAR+Make=CI/CD)
https://habr.com/ru/articles/1010484/
IAR — это, в общем-то, фу. Есть шикарный GNU MCU Eclipse.
Да. Именно так.
При этом есть даже методичка на нормальный ToolChain на основе GCC.
Настройка ToolChain(а) для Win10+GCC+С+Makefile+ARM Cortex-Mx+GDB
Я думаю про STDPL сейчас писать уже не актуально, ST ее хоронят и полностью переходят на Cube + HAL. В последнем кубе уже RTOS 9 поддерживается.
Какой контроллер, какой IDE и какие методы выбирать? Здесь не может быть какого-то истинно правильного метода. Каждый выбирает в меру своих познаний и опыта в данном вопросе, а также на основе параметров проекта, который он выполняет.
unsigned long global_count=0;Брезгуете для глобальных счетчиков и флагов volatile?
Очень зря! Вы же знаете что с точки зрения компилятора и ядра арм проца оперативная память — медленное внешнее устройство!
И если где-то будет цикл с ожиданием флага типа
while(global_count<18);тоесть просто должно было бы подождать пока счетчик не дотикает до 18-ти. то с вероятностью в 99.9% попав в этот цикл программа вообще никогда не выйдет из него вне зависимости от того что 100500 других потоков преспокойно инкрементировали этот ваш счетчик и читали его правильно!
А знаете почему так случится? А все просто — компилятор увидит что внутри цикла ваша переменная не изменяется и не сравнивается с другими изменяемыми в цикле переменными и просто не будет перечитывать значение этой переменной из внешней оперативки! Она как была в регистре каком-то свободном на момент входа в цикл так и останется закешированной своим прошлым значением на момент входа в цикл!
И ваша программа порушится!
А потом начинаются вопли — оптимизатор иара злооо, он делает код нерабочииим, убрал оптимизации — все зарабоооталоооо и так далее! Это очень важный момент особенно для начинающего! Особенно для тех кто с аврок пришел где оперативка доступна в один такт одной командой и никто кроме GCC и насколько я слышал ещё какого-то компилятора не пытаются кэшировать переменные в регистрах — в аврках это лишено смысла так как не экономит ничего. а вот в армах экономия просто адовая и потому volatile — обязательный префикс для глобальных счетчиков и флагов!
Поэтому перед каждой операцией сравнения умножения деления вычитания сдвига или любой проверки на четность больше меньше нуля и т.д. — ячейку памяти надо прочитать из оперативки в регистр.
Проблема в том что оперативка внешнее устройство и оно может быть занято например DMA и потому проц будет жутко в этом случае тупить если в какой-то циклическом коде эта переменная натыкана в каждый второй оператор и в фоне чтото делает DMA например или ещё чтото. или например внешняя SRAM подключена в контроллер FSMC в данный момент чтото качает в экран и память просто простаивает. чтоб этих простоев небыло — компилятор смотрит на тот факт что если в цикле только сравнения и проверки переменной а изменения её — нет — то её нет смысла перечитывать из памяти каждый раз при обращении к ней внутри этого цикла. этим экономится море времени и сильно ускоряется работа в нагруженной системе. но есть и минус. если вы задумали что эта переменная должна меняться извне прерыфванием или другим потоком или другим ядром — компилятор этот факт во внимание не примет и будет упорно сравнивать и проверять все инструкции с регистром, куда изначально была скопирована эта ячейка памяти. Потому и можно остаться в цикле while(wait==1); навсегда если переменная wait не была инициализирована словом volatile. volatile означает — каждый раз при обращении — перечитывать из памяти.
А конкретно — пусть автор попробует без CubeMX запустить в корпусе TQFP 176
FMC(32bit)-DMA2-LTDC(RGB888)-I2C-UART-SDIO-FATFS-FREERTOS-STemWin
резистивный, емкостной?
у меня подключен емкостной на I2C FT5226
работает отлично
напишите на почту, могу выслать исходники
Использование SPL в эпоху HAL и CubeMX это как сидеть под MSDOS когда уже есть Windows 7.
Я работал в яндекс.драйв в 2021 и они даже в 2021 использовали SPL для STM32F413ZGJ6 в своей телематике MT-32K_LTE_V2 для каршеринга . Поди и сейчас ездят на SPL.
На сайте https://rutracker.org
https://habr.com/ru/news/712888/
по запросу: "Исходники Яндекс-приложений (x86, x64)" и нашел MT-32K_LTE_V2

Это оно?
Краткое введение в разработку приложений для микроконтроллеров stm32