Soy nuevo en STM8S y todavía no soy tan bueno en la programación de microcontroladores en general. Estoy tratando de aprender sobre temporizadores / contadores en microcontroladores.
Escribí el siguiente código para alternar un LED en cada segundo que está conectado en el pin PB5.
#include "stm8s.h"
int main() {
// Default clock is HSI/8 = 2MHz
PB_DDR |= (1 << PB5); // PB5 is now output
PB_CR1 |= (1 << PB5); // PB5 is now pushpull
TIM2_PSCR = 0b00000111; // Prescaler = 128
TIM2_CR1 |= (1 << TIM2_CR1_CEN); // Enable TIM2
while (1) {
if ( ( ((uint16_t)TIM2_CNTRH << 8) + (uint16_t)TIM2_CNTRL ) >= 15625 ) {
// Reset counter back to 0
TIM2_CNTRH = 0;
TIM2_CNTRL = 0;
// Toggle LED.
PB_ODR ^= (1 << PB5);
}
}
}
Mi microcontrolador no está conectado a un reloj externo y está usando el reloj interno para funcionar.
Después de leer la hoja de datos, veo que el reloj de MCU será HSI / 8 = 2MHz por defecto. Establecí 128 como preescalador para TIM2. Por lo tanto, el contador TIM2 se incrementará en cada 64us. Entonces, cuando llegue a 15625 será de 1 segundo (64 * 15625 = 1000000us = 1s).
Entonces, asumí que el LED cambiaba en cada segundo.
El problema es que el LED permanece encendido todo el tiempo.
¿Podría alguien ayudarme a identificar el problema con mi código?
Gracias de antemano.