Åñëè ÿ ïðàâèëüíî ïîíÿë âàøó èäåþ, òî âû õîòèòå ìåíÿòü ïåðèîä òàéìåðà â çàâèñèìîñòè îò çíà÷åíèé ïîëó÷åííûõ ÷åðåç ÀÖÏ, è ìåíÿòü ñîñòîÿíèå ñâåòèêà â çàâèñèìîñòè îò ïåðèîäà òàéìåðà. Åñòü îøèáêè:
1.  ôóíêöèè îáðàòíîãî âûçîâà ñîáûòèÿ òàéìåðà âû ïåðåíàñòðàèâàåòå òàéìåð ïîëíîñòüþ. Ìåíÿòü ïåðèîä òàéìåðà "íà ëåòó" ìîæíî, íî íå ÷åðåç TIM_Base_SetConfig() â îáðàáîò÷èêå ïðåðûâàíèÿ! Ýòà ôóíêöèÿ ïåðåèíèöèàëèçèðóåò âåñü òàéìåð, âêëþ÷àÿ ñáðîñ ñ÷¸ò÷èêà, ÷òî ìîæåò íàðóøèòü ðàáîòó è äàæå çàáëîêèðîâàòü ïðåðûâàíèÿ.
2. Íå ñòîèò â êîëáýêå äåëàòü ãðîìîçäêèé êîä, ëó÷øå ìåíÿòü êàêîé íèáóäü ôëàã, à ëîãèêó ðàáîòû óæå â îñíîâíîì öèêëå ñäåëàòü.
Âîò ññûëêà íà ìîé ïðèìåð ïîä âàø F103, ïîä STM32CubeIDE v1.19.0. Äëÿ ÷èòàåìîñòè êîäà ëîãèêó ðàáîòû ñäåëàë â îòäåëüíûõ ôàéëàõ tim_led.h è tim_led.c, â main.c òîëüêî çàïóñêàåì òàéìåð, ïðè ñòàðòå âûçîâàÿ TIM_Init().
Âîò ôóíêöèÿ îáðàòíîãî âûçîâà (êîëáýêà)
 àðõèâå ïðîåêòà ïðèìåðà åñòü PDF ôàéë êîíôèãóðàöèè ïåðåôåðèè â CubeIDE, òàêîé PDF òàì æå è ãåíåðèðóåòñÿ. Ìîæíî ïîñìîòðåòü, ÷òî è êàê íàñòðîåíî, âêëþ÷åíî.Êîä:/* Ôóíêöèÿ îáðàòíîãî âûçîâà TIM1 */ /* * ×òîáû ýòî êîëáýê ðàáîòàë, * íàäî â íàñòðîéêàõ òàéìåðà âêëþ÷èòü Trigger Event Selection = Update Event * è âêëþ÷èòü ïðåðûâàíèÿ NVIC îò TIM1 update interrupt */ voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim->Instance == TIM1) //Åñëè îáðàòíûé âûçîâ îò TIM1 { //Ìåíÿåì ñîñòîÿíèå ñâåòèêà íà PC13 GPIOC->ODR ^= GPIO_ODR_ODR13; //Óâåëè÷èâàåì ïåðèîä blink_period += STEP_PERIOD; //Åñëè äîñòèãëè óñòàíîâëåííîãî ïðåäåëà, ñáðàñûâàåì if (blink_period > MAX_BLINK_PERIOD) blink_period = 500; //Îáíîâëÿåì ARR (ïåðèîä) òàéìåðà __HAL_TIM_SET_AUTORELOAD(&htim1, blink_period); } }
Âèäåî ðàáîòû ïðèìåðà.






