Morgen, ich benötige einen µs-Delay und wollte dafür einen Timer dafür nutzen. Leider läuft dieser nicht so genau und hoffe ihr könnt mir weiterhelfen. Ich vermute zurzeit einen Fehler bei der Timer Clock bin mir aber keiner Prüfmöglichkeit bewusst wie ich testen kann ob diese richtig taktet. Es handelt sich um einen STM32f103RBT6. Vielleicht fällt euch aber auch ein Fehler in meinem Code auf:
1 | /* Time base configuration */
|
2 | TIM_DeInit(TIM3); |
3 | TIM_TimeBaseStructure.TIM_Prescaler = (SystemCoreClock / 1000000) - 1; |
4 | TIM_TimeBaseStructure.TIM_Period = usValue-1; |
5 | TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; |
6 | TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; |
7 | TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; |
8 | TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); |
9 | |
10 | /* Clear the update interrput flag and finally start the timer */
|
11 | TIM_ClearFlag(TIM3, TIM_FLAG_Update); |
12 | TIM_Cmd(TIM3, ENABLE); |
13 | |
14 | /* Wait for Tim3 expiring, stop timer and clear update flag. Generate the desired delay. */
|
15 | while(TIM_GetFlagStatus(TIM3, TIM_FLAG_Update) == RESET); |
16 | |
17 | TIM_Cmd(TIM3, DISABLE); |
18 | TIM_ClearFlag(TIM3, TIM_FLAG_Update); |