Witam. Mam problem z timer 1 na płytce STM32F411VET6 . Chciałem aby timer zliczał mi zbocza z pinu. Problem polega na tym, że tego nie robi, bo dioda się nie zapala.
Czy ktoś mógłby mi pomóc?
Poniżej kod programu:
#include "stm32f4xx.h"
int main (void){
//--------------- BUS --------------------------------------------------
RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN | RCC_AHB1ENR_GPIOAEN;
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
//--------------- TIM1 -------------------------------------------------
TIM1->SMCR |= TIM_SMCR_SMS_0 |
TIM_SMCR_SMS_1 |
TIM_SMCR_SMS_2 ;
TIM1->SMCR |= TIM_SMCR_TS_0 |
TIM_SMCR_TS_2 ;
TIM1->CCER |= TIM_CCER_CC1P;
TIM1->CR1 |= TIM_CR1_CEN;
TIM1->ARR = 10;
TIM1->DIER = TIM_DIER_UIE;
//--------------- LED --------------------------------------------------
GPIOD->MODER |= GPIO_MODER_MODE15_0 | GPIO_MODER_MODE14_0;
GPIOD->OTYPER &= ~GPIO_OTYPER_OT15 | GPIO_OTYPER_OT14;
GPIOD->OSPEEDR |= GPIO_OSPEEDR_OSPEED15_0 | GPIO_OSPEEDR_OSPEED14_0;
GPIOD->PUPDR |= GPIO_PUPDR_PUPDR15_0 | GPIO_PUPDR_PUPDR14_0;
//----------------- TIM1_CH1 source ------------------------------------
GPIOA->MODER |= GPIO_MODER_MODE8_1;
GPIOA->OTYPER &= ~GPIO_OTYPER_OT8;
GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR8_0;
GPIOA->PUPDR |= GPIO_PUPDR_PUPDR8_1;
GPIOA->AFR[1] |= GPIO_AFRH_AFRH0_1;
//---------------- NVIC -----------------------------------------------
NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);
SysTick_Config(8000000);
while(1);
}
__attribute__((interrupt)) void SysTick_Handler(void){
GPIOA->ODR ^= GPIO_ODR_OD8;
GPIOD->ODR ^= GPIO_ODR_OD15;
}
__attribute__((interrupt)) void TIM1_UP_TIM10_IRQHandler(void){
if(TIM1->SR & TIM_SR_UIF){
TIM1->SR = ~TIM_SR_UIF;
GPIOD->ODR ^= GPIO_ODR_OD14;
}
}