Estoy usando la biblioteca STM32F4 HAL en una placa de descubrimiento STM32F4 emulada [en QEMU] e intento 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 pasar a usar 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();
temporizador.h
TIM_HandleTypeDef hTim2;
temporizador.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 el conteo anterior, ¿no estoy seguro de por qué? ¿Alguien puede ofrecer algún consejo?
Finalmente he descubierto mi problema. No tenía nada que ver con mi código, sino con el simulador QEMU en el que estaba ejecutando mi código.
Una vez que conecté la placa y ejecuté el código, comencé a obtener los tiempos esperados.
¡No volveré a usar QEMU!
scott seidman
Efervescencia
josef.van.niekerk
Voltear