В микроконтроллерах серии STM32F10x (например, STM32F103C8T6 из популярной BluePill) есть часы реального времени, они "тикают" от батарейки после того, как пропадает основное питание. Но в этих RTC нет аппаратного календаря. Это значит, что дата "не идёт". Даже если вы в своем HAL проекте установили галочку "activate calendar", это значит, что дата будет "идти" при наличии основного питания, но после прекращения питания ДАТА СОБЬЕТСЯ до 01.01.00. Это плохая новость... Хорошая новость в том, что на HAL'е мир не сошелся клином. И мы сделаем полноценные часы реально времени с датой на CMSIS.

(обновление статьи 03.05.2024)

Tags: ,

В такой нагруженной системе важна аккуратность. У меня на столе STM32F407VET6 со 128 кБ SRAM и 512 кБ FLASH. И на ней реализован Modbus TCP/IP, Modbus RTU RS485, Modbus RTU RS232, +CAN шлюз. Под FreeRTOS работают LwIP, FATFS. Для начальной "завязки" необходимо выделить память

  • Под кучу FreeRTOS 32-48 kB
  • Под стек LwIP 2048 B

Со временем постепенно можно увеличивать или оптимизировать эти значения, менять количество PBUF'ов, NETCONN'ов, размер стека задач и т.д. Но я привел значения, при которых минимальный объем задач FreeRTOS с остальными стеками, работающими одновременно, будет выполняться без глюков.

Принципы чтения и записи FLASH памяти в STM32F0 мало чем отличаются от подобных принципов для других семейств. Описываемый далее метод так же неплохо работает и в STM32F1 (проверено на STM32F103C6T6A). Библиотека HAL позволит унифицировать знания, то есть пользоваться функцией стирания/записи можно аналогично, независимо от модели микроконтроллера.

Первое, что стоит хорошо понять:

  1. память FLASH всегда начинается с адреса 0x08000000
  2. память FLASH всегда разбита на страницы и стирать данные мы можем только страницами (это 1 килобайт или 2 килобайта, читайте datasheet), а не по одному байту или слову.
  3. нельзя записать новые данные поверх старых данных. Перед записью новых данных необходимо сделать стирание нужной страницы.
  4. адрес страницы это не 1,2,3,4,5.. это абсолютный адрес в адресном пространстве, пример 0x08000000, 0x08000400, 0x08000800 и т.д. (внимание, адреса в примере актуальны для страниц размером 1 кБ).
  5. Исполняемая программа записывается в первую страницу, начиная с адреса 0x08000000 и занимает ровно столько страниц, сколько ей требуется, остальные страницы не записываются при прошивке (и не стираются тоже). Конфигурацию записывайте в неиспользуемые страницы. Например, в STM32F030F4P6 всего 16 страниц памяти по 1 кБ и если размер прошивки меньше 15 кБ, то смело пишите настройки в последний (16-ый) сектор.
  6. Не записывайте данные на флешку слишком часто, у нее ограниченное количество циклов стирания/записи (как правило, 10000 циклов). Флешкой нельзя пользоваться так же как EEPROM.

Когда стоит задача дизайна PHY для Ethernet, мы обращаемся к Reference manual производителя. В нем достаточно подробно рассказывается о том, что можно делать, а чего делать нельзя. Но идеальные условия могут не устраивать нас по ряду причин, в таком случае мы не знаем, что делать можно, чем позволено пренебречь и в каких пределах. Эта статья позволит оценить поведение LAN8742A в рамках бюджетных проектов, где используется двухсторонняя печатная плата, что безусловно уже является серьезным допущением.

Как сохранить работоспособность устройства, при этом не заваливая EMI тест устройства. Как оценить по косвенным признакам, работает физика нормально или нет. Далее в этой статье.

Начну с того, что пин Reset вам не поможет нормально перезапустить модуль SIM800L. Или, так скажем, этот пин - не панацея. Используйте PWRKEY - кнопка включения/выключения.

В интернете вы сможете найти много схем подключения дешевого модуля SIM800L от SIMCOM к микроконтроллеру. В каких-то схемах используют пин PWRKEY, а в каких-то нет. Я рекомендую использовать. Работает он довольно просто: чтобы выключить SIM модуль, замкните PWRKEY на GND на 1,5 секунды. А потом через 5-10 секунд, снова PWRKEY на GND на 1,5 секунды чтобы обратно включить. Это самый адекватный сброс, который я только мог повстречать.