Hallo,
ich versuche auf dem STM32F4 gerade einen Timer zum laufen zu bekommen.
Das einzigste was er können muss ist die Zeit zwischen einem größeren
Codeabschnitt zu messen die er braucht diesen auszuführen.
Habe bisher das ganze Projekt auf HAL gemacht, I2C, SPI läuft auch
schon, nur das mit dem Timer will nicht so recht.
Das hier hat mir CubeMX Prodziert.
Ursprünglich wollte ich den TIM1 benutzen, da dieser aber nicht ging,
bin ich dann auf TIM3 gewechselt. Geht aber immer noch nicht.
1 | void MX_TIM1_Init(void)
|
2 | {
|
3 |
|
4 | TIM_ClockConfigTypeDef sClockSourceConfig;
|
5 | TIM_MasterConfigTypeDef sMasterConfig;
|
6 |
|
7 | htim1.Instance = TIM3;
|
8 | htim1.Init.Prescaler = 2000;
|
9 | htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
|
10 | htim1.Init.Period = 9000;
|
11 | htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4;
|
12 | htim1.Init.RepetitionCounter = 0;
|
13 | HAL_TIM_Base_Init(&htim1);
|
14 |
|
15 | sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
16 | HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig);
|
17 |
|
18 | sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
19 | sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
20 | HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig);
|
21 |
|
22 |
|
23 |
|
24 | }
|
Danach versuch ich den Timer hiermit zu starten
1 | HAL_TIM_Base_Start(timerHandle0);
|
Und kurz bevor der Codeabschnitt kommt setze ich den Timer auf 0 zurück
mit
1 | timerHandle0->Instance->CNT = 0;
|
Und gebe anschließend den Counterwert zurück mit
1 | UART_SendTimerValueDMA(timerHandle0->Instance->CNT);
|
Nun auf dem Uart gibt es mir zumindest immer eine 0 aus.
Was mache ich falsch?
Ja ich weiß es gibt viele Beispiele im Netz, aber die sind für PWM
Sachen und meistens im std-peripheral lib.
Ich will bei dem Projekt aber der Übersichtlichkeit halber bitte bei HAL
bleiben ohne Workarounds soweit wie möglich (zumal es auch ne Vorgabe
ist).
Danke.