Estoy utilizando la biblioteca HAL STM32F4 en una placa de descubrimiento STM32F4 emulada [en QEMU], y estoy tratando de configurar TIM2 (temporizador de propósito general) y leer su registro de conteo (sin interrupción). Actualmente siempre obtengo 0 cuando intento leer el contador del temporizador con
uint32_t count = __HAL_TIM_GetCounter(&hTim2);
No quiero seguir usando una interrupción todavía, hasta que este paso funcione. Tomándolo paso a paso.
Así es como configuré el temporizador hasta ahora:
__initialize_hardware.c
__TIM2_CLK_ENABLE(); // Enable the TIM2 clock
// ...
Timer_Init();
timer.h
TIM_HandleTypeDef hTim2;
timer.c
#include "timer.h"
void Timer_Init(void) {
hTim2.Instance = TIM2;
hTim2.Init.Prescaler = 40000;
hTim2.Init.CounterMode = TIM_COUNTERMODE_UP;
hTim2.Init.Period = 500;
hTim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_Base_Init(&hTim2);
HAL_TIM_Base_Start(&hTim2); // Trying to start the base counter
}
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) {
if (htim_base->Instance == TIM2) {
__TIM2_CLK_ENABLE();
}
}
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) {
if (htim_base->Instance == TIM2) {
__TIM2_CLK_DISABLE();
}
}
luego en main.c
int main(int argc, char* argv[]) {
while (1) {
uint32_t count = __HAL_TIM_GetCounter(&hTim2);
trace_printf("%lu\n", count);
}
}
Siempre obtengo 0 en conteo arriba, ¿no estoy seguro de por qué? ¿Alguien puede ofrecer algún consejo?