小弟恳请各位大侠挤出宝贵时间帮我看一下这个问题,我是用串口接收中断接收数据 可是为什么每次进入中断都会死在里面出不来?单步运行后发现,每次进接收中断后只能接收到数据帧的第一个字节,然后就会陷在 USART1_ReceiveChar()这个函数里出不来了,请问各位大侠,USART_ReceiveData()这个库函数执行后会清零USART_FLAG_RXNE这个标识么 我看了库函数体 貌似不会清零啊 不知怎么的 就是不能完整接收一帧数据 求大侠指导 讲解stm32串口接收的原理啊 跪求串口收发相关例程
void USART1_IRQHandler(void)
{
if ( USART_GetITStatus(USART1, USART_IT_RXNE)!= RESET)//查询是否为秒中断标志
{
while(USART1_ReceiveChar()!=0xaa);//寻找帧头
while(USART1_ReceiveChar()!=0xbb)//若是没到帧尾就继续接收
rbuff[i++]=USART1_ReceiveChar();
for(char j=0;j<i;j++)USART1_Putc(rbuff[j]);//把接收到的数据发送出去
USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清中断标识
}
}
void USART1_Putc(char c)
{
USART_SendData(USART1, c);
/* Loop until the end of transmission */
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
unsigned char USART1_ReceiveChar(void)
{
while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
return(USART_ReceiveData(USART1));
}
此帖出自
小平头技术问答
while(USART1_ReceiveChar()!=0xbb)//若是没到帧尾就继续接收
既不是头也不是尾,那就循环啊~~~~ 没错啊,出不来啊
一周热门 更多>