你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

SRAM 意外复位,数据改变

[复制链接]
Qiuliu 提问时间:2018-8-1 10:11 /
最近一个项目中,遇到一个奇怪的问题。串口通信引起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数据就混乱了。
当关闭此发送后,就不再出现这种现象,可以断定应该是串口发送引起的。但是其中原因是什么呢?有没有大神能够给分析下。
收藏 评论4 发布时间:2018-8-1 10:11

举报

4个回答
butterflyspring 回答时间:2018-8-1 11:17:26
你是怎么判断整个ram的数据混乱了?一般先从硬件开始排除,先去除485,悬空TX,几十分钟后看看是否还有问题.还有就是你的测试环境是怎样?软件的话,看看你目前用的是什么模式,轮训?中断?DMA?

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

feixiang20 回答时间:2018-8-2 02:04:48
如果怀疑是串口接收问题,就去查这部分,查下硬件和串口有没有问题

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

七哥 回答时间:2018-8-4 23:00:27
看上去程序没有问题,你用Data指针操作实际定义的数组的时候,有没有可能出现指针越界的情况呢?
也就是说,你应该用成循环数组,类似FIFO的方式,这样可以保证指针不跑出去。

评分

参与人数 2ST金币 +1 蝴蝶豆 +3 收起 理由
xingfudaxia + 1 很给力!
zero99 + 3

查看全部评分

Qiuliu 回答时间:2018-11-9 13:51:49
toofree 发表于 2018-8-4 23:00
看上去程序没有问题,你用Data指针操作实际定义的数组的时候,有没有可能出现指针越界的情况呢?
也就是说 ...

确实指针溢出了,当接收的数据超过定义的接收buffer时,数据就会出现混乱,在接收数据时,应该加个数限制。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版