Вопросов нет. Хочу указать на замаскированные грабли в STM32.
Таймеры в них имеют предварительный делитель частоты Prescaler (PSC). Как честно и описано в доках, этот регистр имеет скрытый буфер, доступный для программы, а собственно действующий регистр загружается новым значением из того буфера только в момент выработки события переполнения (ну, когда счетчик CNT достигнет ARR). Из этого логически следует, что при начальной инициализации в программе, если в PSC требуется что-то отличное от 0, то оно будет действовать только после первого прохода счетика! И это оказалось для меня граблями, т.к. при первом проходе первое событие выработалось у меня значительно раньше, что оказалось критично в некотором приложении.
Короче, work around вполне прост и организуется штатными средствами: после записи требуемого значения в PSC надо программно сгенерировать событие переполнения/обновления установкой бита UG в регистре EGR таймера. Это пропишет рабочий регистр PSC значением из буферного.
|