Перешел к прерываниям. Решил настроить EXTI для кнопки, подключенной к PB1. Как водится, читал статьи по этому вопросу и изучал код из примеров.
Но прерывания не заводились.
Читал вот это:http://www.hertaville.com/external-inte ... m32f0.html
Код инициализации у автора такой
Спойлер
Код: Выделить всё
SYSCFG->EXTICR1 &= (0x000F) ;
//1. clear bits 3:0 in the SYSCFG_EXTICR1 reg to amp EXTI Line to NVIC
EXTI->RTSR = EXTI_RTSR_TR0;
// 2.Set interrupt trigger to rising edge
EXTI->IMR = EXTI_IMR_MR0; // 3. unmask EXTI0 line
NVIC_SetPriority(EXTI0_1_IRQn, 1); //4. Set Priority to 1
NVIC_EnableIRQ(EXTI0_1_IRQn); // 5. Enable EXTI0_1 interrupt in NVIC (do 4 first)Спойлер
Код: Выделить всё
__INLINE void ConfigureExternalIT(void)
{
/* (1) Enable the peripheral clock of GPIOA */
/* (2) Select Port A for pin 0 external interrupt by writing 0000 in EXTI0 (reset value)*/
/* (3) Configure the corresponding mask bit in the EXTI_IMR register */
/* (4) Configure the Trigger Selection bits of the Interrupt line on rising edge*/
/* (5) Configure the Trigger Selection bits of the Interrupt line on falling edge*/
RCC->AHBENR |= RCC_AHBENR_GPIOAEN; /* (1) */
//SYSCFG->EXTICR[1] &= (uint16_t)~SYSCFG_EXTICR1_EXTI0_PA; /* (2) */
EXTI->IMR = 0x0001; /* (3) */
EXTI->RTSR = 0x0001; /* (4) */
EXTI->FTSR = 0x0001; /* (5) */
/* Configure NVIC for External Interrupt */
/* (6) Enable Interrupt on EXTI0_1 */
/* (7) Set priority for EXTI0_1 */
NVIC_EnableIRQ(EXTI0_1_IRQn); /* (6) */
NVIC_SetPriority(EXTI0_1_IRQn,0); /* (7) */
}Код: Выделить всё
SYSCFG->EXTICR[0] = SYSCFG_EXTICR1_EXTI1_PB;
EXTI->IMR = EXTI_IMR_MR1;//демаскируем прервание по 1 линии
EXTI->FTSR = EXTI_FTSR_TR1; //прерывание по спаду
EXTI->RTSR = EXTI_RTSR_TR1; //прерывание по фронту
NVIC_EnableIRQ(EXTI0_1_IRQn);
NVIC_SetPriority(EXTI0_1_IRQn,0);http://easyelectronics.ru/arm-uchebnyj- ... aniya.html
Там:
В моем камне не AFIO , обзывается регистр по другому. Сделал по аналогии.Но после выяснилось, что без включения AFIO мультиплексоры не работают. Т.е. сигнал будет передаваться ТОЛЬКО от порта А, т.к. это дефолтное значение мультиплексоров.
Добавил в начало инициализации
Код: Выделить всё
RCC->APB2ENR |=RCC_APB2ENR_SYSCFGCOMPEN;// тактирование SYSCFG В общем, может пригодится начинающим.

