реклама на сайте
подробности

 
 
> STM32F4+таймеры+захват
TmYAG
сообщение Mar 17 2016, 09:14
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 23-12-14
Пользователь №: 84 246



Всем привет!
Изучаю таймеры.
Перешел к изучению режима захвата.
В программе дрыгаю светодиодами с задержкой 5 сек.
попутно таймером TIM3 первый канал которого находится на PA6 пытаюсь захватить сигнал со светодиода, что живет на PD12. Просто замыкаю эти две ноги.
CODE
#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 сек.
Где я мог ошибиться?

Сообщение отредактировал IgorKossak - Mar 17 2016, 09:41
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alechek
сообщение Mar 20 2016, 16:20
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Вредная привычка экономить память и процессорные такты...
Да, видимо, буду запоминать.
Есть, правда, мысля еще попробовать запретить работу таймера, считать-сбросить, разрешить работу. При разрешении, таймер, возможно, отработает смену входного уровня, если она произойдет.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 12:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.0136 секунд с 7
ELECTRONIX ©2004-2016