串口中断只能收一次
void USART2_IRQHandler(void) //串口2中断服务程序{
u8 Res;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)//接收中断
{
Res=USART_ReceiveData(USART2); //读取接收到的数据
if((USART2_RX_STA&0x8000)==0) //接收未完成
{
USART2_RX_BUF=Res;//读取接收到的数据
USART2_RX_STA++;
if(USART2_RX_STA>14) //接收到了15个数据
USART2_RX_STA|=0x8000;//接收数据完成
}
}
}接受完第一次数据后,第二次就出问题了,接收不到了,总感觉是串口接收中断程序的问题,能帮忙看下吗
你这是通过一个字节、一个字节的方式进行接收的吗?如是,一般接收到一个字节后中断函数里面的处理是:通过检查RXNE确认有接收到数据,然后清零相关标志位,然后读取接收寄存器的值,退出中断函数。 没有清中断标志位 串口居然卡住了,唉 中断函数里面不用清中断标志位嘛? 退出中断前没有清中断标志位? 你好像没清除标记吧 这个你要是清除标记位之后,才能再次进入 你看看代码例程吧,对比一下 你可能缺了2条语句,也就是清除标记的语句 你找个串口例程,你这个是原子的例程吧 串口你还是没用对,不过别着急,看看程序代码,看看之前参考的代码 你就是因为没有清除标记,导致现在串口收不到新数据了 看看串口操作流程吧,不然你不理解的 串口还是比较简单的,你可以参考一下原子或者野火的代码,学习学习 正常不会接收一次就不收了,除非你串口代码写错了
页:
[1]