SRAM 意外复位,数据改变
最近一个项目中,遇到一个奇怪的问题。串口通信引起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数据就混乱了。
当关闭此发送后,就不再出现这种现象,可以断定应该是串口发送引起的。但是其中原因是什么呢?有没有大神能够给分析下。
你是怎么判断整个ram的数据混乱了?一般先从硬件开始排除,先去除485,悬空TX,几十分钟后看看是否还有问题.还有就是你的测试环境是怎样?软件的话,看看你目前用的是什么模式,轮训?中断?DMA? 如果怀疑是串口接收问题,就去查这部分,查下硬件和串口有没有问题 看上去程序没有问题,你用Data指针操作实际定义的数组的时候,有没有可能出现指针越界的情况呢?
也就是说,你应该用成循环数组,类似FIFO的方式,这样可以保证指针不跑出去。 toofree 发表于 2018-8-4 23:00
看上去程序没有问题,你用Data指针操作实际定义的数组的时候,有没有可能出现指针越界的情况呢?
也就是说 ...
确实指针溢出了,当接收的数据超过定义的接收buffer时,数据就会出现混乱,在接收数据时,应该加个数限制。
页:
[1]