Всем привет!
Изучаю таймеры.
Перешел к изучению режима захвата.
В программе дрыгаю светодиодами с задержкой 5 сек.
попутно таймером TIM3 первый канал которого находится на PA6 пытаюсь захватить сигнал со светодиода, что живет на PD12. Просто замыкаю эти две ноги.
Код:
|
#include "stm32f4xx.h" // Device header
void init_gpio(void);
void init_timer(void);
void led_blinking(void);
static volatile uint32_t TimeTick;
volatile int capture1;
volatile int capture2;
void SysTick_Handler() {
if(TimeTick)
{
TimeTick--;
}
}
void TIM3_IRQHandler(){
if(TIM3-›SR&2){
}
}
int main(){
SysTick_Config(SystemCoreClock/1000);
init_gpio();
init_timer();
while(1){
led_blinking();
}
}
void init_gpio(){
/*Configure pins 12, 13, 14, 15 on port D*/
RCC-›AHB1ENR |= RCC_AHB1ENR_GPIODEN;
GPIOD-›MODER = 0x55000000;
/*Cofigure TIM3, Channel 1 (PA6)*/
RCC-›AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
GPIOA-›MODER = GPIO_MODER_MODER6_0;
GPIOA-›AFR[0] = 0x02000000;
}
void init_timer(){
RCC-›APB1ENR |= RCC_APB1ENR_TIM3EN;
TIM3-›CCMR1 |= TIM_CCMR1_CC1S_0; // CH1 to PA6
TIM3-›CCMR1 |= (TIM_CCMR1_IC1F_0 | TIM_CCMR1_IC1F_1); //
TIM3-›CCER &= ~TIM_CCER_CC1P;
TIM3-›CCER &= ~TIM_CCER_CC1NP;
TIM3-›CCMR1 &= ~TIM_CCMR1_IC1PSC; //
TIM3-›CCER |= TIM_CCER_CC1E; //
TIM3-›DIER |= TIM_DIER_CC1IE; //
TIM3-›CR1 |= TIM_CR1_CEN; //
NVIC_EnableIRQ(TIM3_IRQn);
}
void DelaymS(uint32_t time){
TimeTick = time;
while(TimeTick);
}
void led_blinking(){
GPIOD-›BSRRH = GPIO_BSRR_BS_12 | GPIO_BSRR_BS_13 | GPIO_BSRR_BS_14 | GPIO_BSRR_BS_15; //LEDs On
DelaymS(5000);//Delay using SysTick
GPIOD-›BSRRL = GPIO_BSRR_BS_12 | GPIO_BSRR_BS_13 | GPIO_BSRR_BS_14 | GPIO_BSRR_BS_15; //LEDs Off
DelaymS(5000);
} |
Настроил порт Д и диоды.
Настроил порт А и для шестой ноги определил альтернативную функцию.
Настроил таймер в режиме захвата, захват по фронту.
Но почему-то не заходит в прерывание. Период изменения сигнала для светодиодов 5 сек.
Где я мог ошибиться?