Загрузчик STM32
В микроконтроллерах STM32 существуют три интерфейса для заливки прошивки:
- JTAG
- SWD
- UART (через загрузчик)
Как вы уже догадались, в этой статье пойдет речь о последнем способе. Я считаю его не самым лучшим вариантом для постоянного использования, однако в некоторых случаях он очень даже хорош. Вот допустим устройство уже готово и работает у пользователя, и вдруг ВНЕЗАПНО возникает потребность в перепрошивке. Конечно, можно разобрать девайс и подпаяться к отладочному интерфейсу, но это относительно сложно + нужен отладчик. А что если устройство уже соединено с компом через UART ? В этом случае гораздо проще использовать этот интерфейс для загрузки прошивки. Вот тут-то загрузчик будет очень кстати. Пользователю достаточно нажать одну кнопку и девайс входит в режим прошивки. Пару нажатий мышки и прошивка обновлена. Теперь попробуем разобраться более детально как все это работает. Для начала нам нужно подключить наш контроллер к компьютеру через интерфейс USART1.
Подключаем сервопривод к STM32
Работа с MicroXplorer
У всех контроллеров STM32 очень много ног. Это конечно же хорошо, отпадает необходимость наращивать количество ножек при помощи сдвиговых регистров и расширителей портов. Но иногда из-за их большого количества возникает путаница. Большинству периферийных устройств типа АЦП, UARTов итд необходимы ноги контроллера для работы, и бывает такая ситуация когда два блока периферии претендуют на одну и ту же ногу. Естественно одновременно использовать её они не могут и тут у нас есть два выхода из ситуации:
- Использовать другой аналогичный блок периферии (второй UART например)
- Использовать ремап
С первым пунктом всё понятно, а вот что же такое remap в STM32 ? В двух словах: Ремап позволяет какому-либо блоку периферии использовать для своих целей другие (но тоже жестко заданные) ноги контроллера. Чтоб смотреть что куда ремапится надо лазить в даташит и искать это там. Для того чтоб узнать какая периферия использует одинаковые ноги надо опять смотреть даташит. А можно не открывать его по таким пустякам, а просто заюзать неплохую программку от ST под названием MicroXplorer
Вычисление контрольных сумм
Что такое контрольная сумма (CRC) и для чего она нужна, я думаю знают многие. Ну а если кто не знает, то напомню, что контрольная сумма это некоторое число которое получается в результате обработки по определённому алгоритму некоторого объёма данных. Главное свойство контрольной суммы заключается в том, что она будет разной для двух массивов данных если они различаются хотя бы на один бит. Применяются контрольные суммы зачастую при передаче данных, для проверки целостности информации. Для расчета контрольных сумм применяются самые разнообразные алгоритмы, количество матана в которых превышает все разумные пределы. Именно поэтому применять мы их не будем, а пойдем другим путём. В контроллерах STM32 есть много полезной периферии, но ничего особо нового и необычного (например по сравнению с AVR) я не увидел. Лишь только одна штука меня немного приятно удивила и порадовала - аппаратная считалка контрольной суммы, и ей то мы сейчас и займемся.