| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Прерывание по TIM1 update https://radiokot.ru/forum/viewtopic.php?f=59&t=98577 |
Страница 1 из 1 |
| Автор: | Карась [ Ср дек 25, 2013 17:42:23 ] |
| Заголовок сообщения: | Прерывание по TIM1 update |
Привет! Здесь снова Карась. Есть плата STM32F4Discovery. Есть вот такой код: Код: #include "stm32f4xx.h" #include "system_stm32f4xx.h" void TIM1_UP_TIM10_IRQHandler(void) { TIM1->SR &= ~TIM_SR_UIF; GPIOD->ODR ^= 0x4000; } int main(void) { RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; GPIOD->MODER |= GPIO_MODER_MODER15_0 | GPIO_MODER_MODER14_0; GPIOD->OTYPER &= ~(GPIO_OTYPER_OT_15 | GPIO_OTYPER_OT_14); GPIOD->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR15 | GPIO_OSPEEDER_OSPEEDR14); NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn); __enable_irq(); RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; TIM1->DIER &= ~TIM_DIER_UIE; TIM1->ARR = 42000; TIM1->PSC = 3000; TIM1->CNT = 0; TIM1->CR1 &= ~ TIM_CR1_UDIS; TIM1->CR1 |= TIM_CR1_URS | TIM_CR1_CEN; GPIOD->ODR |= 0x8000; for(;;){ } } По замыслу синий светодиод на PD15 должен гореть постоянно, а красный на PD14 переключаться в обработчике прерывания по событию TIM1 update, т.е. мигать. На деле получается вот что: по прерыванию светодиод на PD15 не горит вообще, однако, если не использовать прерывание, а вместо этого отлавливать установку флага TIM_SR_UIF в основном цикле и там же переключать пин PD15 и сбрасывать флагTIM_SR_UIF, то всё нормально - светодиод мигает. Отсюда вывод: похоже, что я вообще не попадаю в обработчик прерывания. Вопрос - почему? Подозреваю, что причина в какой-нибудь глупой нубовской ошибке - ведь я только начинаю осваивать платформу STM32. Так, что прошу помочь и сильно не ругать. |
|
| Автор: | Карась [ Ср дек 25, 2013 18:01:46 ] |
| Заголовок сообщения: | Re: Прерывание по TIM1 update |
Нашёл ошибку. Она была допущена по элементарной невнимательности. Всё дело было вот в этой строчке: Код: TIM1->DIER &= ~TIM_DIER_UIE Здесь запрещается прерывание, а должно разрешаться. Правильно будет так: Код: TIM1->DIER |= TIM_DIER_UIE Просто забыл исправить строчку после того, как экспериментировал без использования прерывания. |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


