Ну не работает и все! Подскажите в чем дело!
Уже использую библиотеку CMSIS.
Вот код:
#include <stm32f10x.h>
int main()
{
RCC->APB2ENR|=(RCC_APB2ENR_IOPCEN|RCC_APB2ENR_IOPAEN); //подали тактирование на порт А и С
GPIOC->CRH|=(GPIO_CRH_MODE8_1|GPIO_CRH_MODE9_1); //настроил РС9, РС8 как выводы с ограниченой скоростью 2МГц
GPIOC->CRH&=~(GPIO_CRH_MODE8_0|GPIO_CRH_MODE9_0|GPIO_CRH_CNF9|GPIO_CRH_CNF8);
GPIOA->CRL&=~(GPIO_CRL_MODE0|GPIO_CRL_CNF0_1); //настроил А0 как плавающий вход
GPIOA->CRL|=GPIO_CRL_CNF0_0;
RCC->APB2ENR|=RCC_APB2ENR_AFIOEN; //включили тактирование альтернативных функций
AFIO->EXTICR[0]&=~AFIO_EXTICR1_EXTI0_PA; //EXTI0 на порт А
EXTI->IMR|=EXTI_IMR_MR0; //На нулевой ножке
EXTI->RTSR|=EXTI_RTSR_TR0; //по фронту
NVIC_EnableIRQ (EXTI0_IRQn); //включить прерывание
__enable_irq(); //глобально разрешить прерывания
while(1)
{
//полезные действия
}
}
void EXTI0_IRQHandler(void)
{
flag^=1;
EXTI->PR|=EXTI_PR_PR0 ; //очистить флаг прерывания
}
Обработчик прерывания находится в main.c.
При нажатии на кнопку программа зависает. Если посмотреть в дизасемблер то прога постоянно крутится в таких метках