最近一个项目中,遇到一个奇怪的问题。串口通信引起RAM数据混乱。 使用单片机为STM32F103,使用RS485主动发出数据,,用于监听其他通信口数据的交互。 发送函数 void USART1_ListingSendFunc(uint8_t *Data, uint16_t Buffer_Size) //串口发送多字节数据 { uint16_t i; while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET) { USART_ClearFlag(USART1,USART_FLAG_TXE); } USART1_SENDMODE(); //使能RS485发送 for(i=0;i<Buffer_Size;i++) { USART_SendData(USART1, *(Data+i)); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); } while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {} USART_ClearFlag(USART1,USART_FLAG_TC); //清标志位 USART1_RECVMODE(); //使能RS485接受 } 发送数据是等待发送的形式。接受采用了中断发送,使能了接受中断。 在这种情况下,在发送数据几十分钟后,就会出现发送出一串乱码,之后整个RAM数据就混乱了。 当关闭此发送后,就不再出现这种现象,可以断定应该是串口发送引起的。但是其中原因是什么呢?有没有大神能够给分析下。 |
评分
查看全部评分
评分
查看全部评分
也就是说,你应该用成循环数组,类似FIFO的方式,这样可以保证指针不跑出去。
评分
查看全部评分
确实指针溢出了,当接收的数据超过定义的接收buffer时,数据就会出现混乱,在接收数据时,应该加个数限制。