ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
9 июля
296128 Топик полностью
sinsay (01.01.2012 22:12, просмотров: 233) ответил sinsay на Подскажите плз где взять описание структуры векторов прерываний NVIC для stm32, поля структуры я так понял надо искать в файлах реализации конкретной перефирии.
В чем дело не понимаю, формирую прерывания по приходу байта USART1, как байт ловит зависает и все только ресет спасает. USART без прерываний работает и на передачу и на прием. Сам обработчик прерывания по приходу байта на USART1 void USART1_IRQHandler(void) {//0 unsigned char tmp; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) // проверяю флаг RXNE {//1 USART_ClearITPendingBit(USART1, USART_IT_RXNE); // сбрасываю флаг RXNE temp=1; // глобальная переменная попал в прерывание }//1 }//0 Инициализация USART1 void init_USART1(void) {//0 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef gpio; GPIO_StructInit(&gpio); // TX: выход push-pull // gpio.GPIO_Mode = GPIO_Mode_AF_PP; gpio.GPIO_Pin = GPIO_Pin_9; GPIO_Init(GPIOA, &gpio); // RX: высокоимпендансный вход gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING; gpio.GPIO_Pin = GPIO_Pin_10; GPIO_Init(GPIOA, &gpio); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); USART_InitTypeDef USART_InitStructure; // Параметры по умолчанию: 9600 бод, 8 бит данных, 1 стоп-бит //--------------------------------------- USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No ; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); //-------------- Ниже инициализация прерывания --------------- NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // Enable Receive interrupts }//0 В главной программе опрашиваю глобальную переменную temp Пока писал подумал может глюк контроллера и надо erratу читать?