现在采用STM32中断接收上位发送数据,采用了环形缓冲区的方式进行数据解析,但是存入环形缓冲区的数据时不时会丢字节,而且都是丢后面的字节,请问各位大佬这是什么原因。附上源码[mw_shl_code=c,true]void USART1_IRQHandler(void)
{
uint16_t data;
while(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE);//Çå3yÖD¶Ï±ê־λ
data = USART_ReceiveData(USART1);
if (!__BUF_IS_FULL(rb_232.rx_head,rb_232.rx_tail))
{
rb_232.rx[rb_232.rx_head] = data;
__BUF_INCR(rb_232.rx_head);
}
}
}
//stm库文件中usart接收代码
uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
/* Receive Data */
return (uint16_t)(USARTx->DR & (uint16_t)0x01FF);
}[/mw_shl_code]
中断里面用的官方库函数接收数据,然后存入到数组中。一组七个字节的数据,有时rb_232.rx数组中甚至只存入两个,有时又是正确的,求问各位大佬什么原因。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>