找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1350|回复: 3
打印 上一主题 下一主题
收起左侧

STM32 CAN转USART问题

[复制链接]
跳转到指定楼层
楼主
ID:540281 发表于 2019-5-16 22:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在做一个CAN转USART的工具,主要是把特定格式发回来的CAN数据,解析之后通过串口转发回来,一包数据是有多帧CAN数据转换回来的,长度不固定,如果前一包数据长度较长,后一包数据就会把上一包多出来的数据也打印出来,试过每次printf完一包数据之后,把数组通过memset函数清零,但是依然不行,求大神支招

我是每次中断里把CAN每一帧数据解析,每一次进中断都会把解析到需要的数据存到一个全局变量X的数组里面,在多次进中断,解析完之后,就在主函数里打印全局变量X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2019-5-17 09:01 | 只看该作者
你要好好规划好存储数据的地方,并能区分:
1、上个包数据放在何处?
2、这次包又放在了哪进?
3、下个包来了,这次包又如何变成了上个包?
4、包是什么概念,他是如何被界定的,大小多少……
这此都是逻辑问题,规划好后,画成框图,再依框图写程序,不难。
回复

使用道具 举报

板凳
ID:540281 发表于 2019-5-17 10:04 | 只看该作者
yzwzfyz 发表于 2019-5-17 09:01
你要好好规划好存储数据的地方,并能区分:
1、上个包数据放在何处?
2、这次包又放在了哪进?

是这样的,
1、每次解析出来的数据,也就是一包数据,我会按每帧的方式放在一个全局变量的数组里面,也就是一个数组,前8个字节存第一帧,8-16存第二帧,16-24第三帧,结束之后,这个全局变量就是一包;
2、然后这次包来了的话,依旧是把它按上一包的方式,覆盖在这个全局变量里面;
3、下包来了,依然是解析出来,放在上一包上面
4、包的概念主要是,多帧解析之后组合成一包,比如说一帧8个字节,这次这一包是3帧,这三帧就会组成一包,大小的话,由第一帧里面的某个数据表示;比如说第一包是00 00 07 00 00 00 00 00,这里的07就是长度,表示7个字节,这一包完整的一包就是,00 00 07 00 00 00 00 00    01 xx xx xx 00 00 00 00,这里就是一包;

我现在遇到的问题是,如果上一包数据长度比这一包数据长度长的话,这一包的数据除了原本需要有的数据以外,还会多出来上一包数据未被覆盖的数据,导致一包数据不对,这里我尝试过打印完数据之后,用memset函数给这个全局变量清零,但是直接全部数据都乱了,还未找到原因;
回复

使用道具 举报

地板
ID:123289 发表于 2019-5-17 11:14 | 只看该作者
本帖最后由 yzwzfyz 于 2019-5-18 07:59 编辑

这是你的方案,而你已经认识到这个方案不能解决你遇到的问题了,那就设法改进方案。
“覆盖”出问题,就让它“不复盖”好了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表