关于usart初始化如下,能够进入中断,但中断处理函数好像没能处理,求大神指正 void Usart2Init(void) { GPIO_InitTypeDef iousart; USART_InitTypeDef uusart; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //config GPIO iousart.GPIO_Mode=GPIO_Mode_AF; iousart.GPIO_OType=GPIO_OType_PP; iousart.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3; iousart.GPIO_PuPd=GPIO_PuPd_UP; iousart.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&iousart); GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_7); GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_7); uusart.USART_BaudRate=9600; uusart.USART_HardwareFlowControl=USART_HardwareFlowControl_None; uusart.USART_Mode=USART_Mode_Rx|USART_Mode_Tx; uusart.USART_Parity=USART_Parity_No; uusart.USART_StopBits=USART_StopBits_1; uusart.USART_WordLength=USART_WordLength_8b; USART_Init(USART2,&uusart); USART_ClearFlag(USART2,USART_FLAG_TXE); USART_ClearFlag(USART2,USART_FLAG_RXNE); NVIC_EnableIRQ(USART2_IRQn); USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); USART_Cmd(USART2,ENABLE); } 中断处理函数如下: void USART2_IRQHandler(void) { if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET) { USART_SendData(USART2,USART_ReceiveData(USART2)); while(USART_GetFlagStatus(USART2, USART_FLAG_TXE)==RESET); } } 能够成功的给上位机发送数据 |
会自动清除中断标志位,现在是有时候能进入中断,更多的时候是进步去中断的
好好看下中断配置,,,(我印象中好像这个不会自动清除吧)
中断服务程序意思是把接收到的再发送出去,有问题吗?
不行。。中断服务程序有问题吗?