主要是接收字符串这方面的问题。这是我写的一个中断函数,然后在串口助手发送1234。根据我的理解,因为串口都是8位8位发的,虽然我1234是同时从电脑串口发出,但实际操作是1发出进入一次中断,然后2发出进入一次中断。那么输出结果不应该是a1a2a3a4吗,但实际结果为a1a2a4。a3并没有出现。
我的理解是中断还没处理完,下个一中断就进入然后覆盖了之前的数据。但如果我把Usart_SendByte(USART1, 'a');这一句注释掉,不管我发多长的数据(比如1234567890),数据都不会丢失。
大佬们能不能帮小弟解释下,谢谢。
[mw_shl_code=c,true]void USART1_IRQHandler(void)
{
uint8_t recv;
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
Usart_SendByte(USART1, 'a');
recv = USART_ReceiveData(USART1);
Usart_SendByte(USART1, recv);
}
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
谢谢指点,意思是我一次性发送1234,系统处理起来是一个连续的过程,然后我在中断中发送其他数据,就打乱其发送节奏,也就是数据被我的a覆盖了。是不是能这么理解。
还有,中断标志位我记得好像是访问过自动清零的吧。(初学,可能记错了)
一周热门 更多>