Núcleo F303K8

Buenas noches! Estoy empezando a programar ARM y me he decidido por la placa STMicroelectronics, con el micro STM32F303K8. La cosa está en que estoy intentando usar un timer (el 3) para temporizar 1 segundo. Pero al configurarlo no me temporiza lo que quiero. Os pongo la parte del código donde configuro el timer:

Código:
void timer3_init(void) {
	//Ahora comenzamos a configurar el temporizador en sí.
	
	TIM3->CNT=0;
	
	//Ahora configuramos el registro de cuenta del timer, el prescaler y el registro de //autorecarga.
	TIM3->ARR=1000; //Entero bajo, que es el valor de recarga del prescaler.
	TIM3->PSC =2500;
	TIM3->CNT=3200; //Lo he hecho para que temporice 1 segundo.
	
	
	TIM3->CR1 |= TIM_CR1_URS;
	TIM3->CR1 |=TIM_CR1_ARPE; //Registro para habilitar la carga automatica. Puesto a //1, almacena el registro ARR en un bufer.

	
	TIM3->CR2 = 0;
	
	TIM3->EGR = TIM_EGR_TG; 
	
	TIM3->DIER |= TIM_DIER_UIE; 

	NVIC_EnableIRQ(TIM3_IRQn); //Habilitamos las interrupciones para el timer 3. 

	TIM3->CR1 |= TIM_CR1_CEN;
}
A ver si alguien me pudiese echar una manilla con esto :unsure: .Gracias de antemano!
Se me ha olvidado comentarlo. El entorno en el que trabajo es el uvision de Keil.
 
Última edición por un moderador:
Hecho! De hecho el código anterior está correcto. Lo único que hay que añadir en la función de servicio a la interrupción es una sentencia if para ver si la interrupción ha saltado por lo que nosotros queremos, que en este caso es temporizar 1 segundo. La función de servicio a la interrupción quedaría así:
void TIM3_IRQHandler (void) {
if ((TIM3->SR & TIM_SR_UIF)>0) {
GPIOB->ODR ^=GPIO_ODR_4;
TIM3->SR &= ~TIM_SR_UIF;
}
}
Espero que os sirva! ;)
 
Arriba