sinsay (01.01.2012 22:12, просмотров: 267) ответил 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у читать?