ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
27 апреля
1349228 Топик полностью
ЫЫyкпy (09.09.2023 21:10, просмотров: 90) ответил ЫЫyкпy на Однако, у STM32 таймер TIM17 не может быть слейвом, за неимением slave mode controller-а и соответствующего регистра. Если у этого LCM32F0 таймеры аналогично устроены, то вариант мастер-слейв отпадает.
Впрочем, на одном только TIM17 тоже неплохо получается. У TIM17 есть, у счастью, Repetition counter и регистр RCR, а в регистре CR1 есть бит OPM. 

Работает это всё так: таймер повторяет свой цикл работы столько раз, сколько записано в RCR, после чего если OPM==0, то начинает всё сначала, а при OPM==1 останавливается.

Но так можно сгенерировать не более 255 импульсов, а требуется 11кГц*31мс = 341. Многовато.

Поэтому придётся действовать чуть сложнее.

//настройка режима PWM, периода и длительности импульсов
TIM17->RCR =100; //сколько-нибудь импульсов, например 100:))
TIM17->DIER |= TIM_DIER_UIE; //Update interrupt enable
TIM17->CR1 |= TIM_CR1_CEN;   //пуск таймера. бит OPM сейчас == 0
TIM17->RCR =num_pulses-100;    //оставшиеся импульсы

В обработчике прерывания по update event

TIM17->SR = ~TIM_SR_UIF; //очищаем Update interrupt flag

TIM17->DIER |= ~TIM_DIER_UIE; //Update interrupt disable

TIM17->DIER |= TIM_CR1_OPM; //One pulse mode

После сотни импульсов у таймера произойдёт update event, из RCR будет загружено в repetition counter число оставшихся импульсов и выставлен запрос прерывания по флагу UIF.

В обработчике прерывания мы запрещаем прерывания и устанавливаем бит OPM.

Теперь, когда repetition counter дойдет до 0, таймер остановится.

Взирая на нынешнее состояние отечества моего с таковым оком, каковое может иметь человек, воспитанный по строгим древним правилам, ... не могу я не дивиться, в сколь краткое время повредились повсюдно нравы в России. (с) кн. М.М. Щербатов.