STM32F4 - Lectura del contador del temporizador de propósito general

1

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?

    

1 respuesta

3

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 recibir los horarios como se esperaba.

¡No estoy usando QEMU otra vez!

    
respondido por el josef.van.niekerk

Lea otras preguntas en las etiquetas