MATLAB&STM32CubeMX联合开发系列——不用手写一行代码就能实现CAN通讯

MATLAB&STM32CubeMX联合开发系列——不用手写一行代码就能实现CAN通讯

从第一次搭建好MATLAB和STM32CubeMX的联合开发环境有一段时间了,之前已经发布了两个实例分享,对这个话题比较感兴趣的朋友还比较多,所以就把最近在调试的CAN通讯的实例也和大家分享一下,后续会针对这个系列不断的更新,有喜欢的小伙伴可以关注哦!

我这里也把之前分享的两篇文章的链接放在这里,因为第一篇文章中花费大量的篇幅介绍环境的搭建,对刚刚了解这个的朋友比较有帮助

萧尘:手把手教你从零开始使用Matlab联合STM32CubeMX以及Keil开发一个STM32的简单程序-LED循环点亮

萧尘:Matlab迭代STM32的程序竟然如此奇妙 - 使用Matlab模型实现STM32串口收发程序

如何需要搭建环境的小伙伴可以去看第一篇文章哦,这里就不在赘述环境搭建的问题了,会直接使用之前已经搭建好的环境。

CAN通讯的配置

这里我们的配置,都是基于STM32CubeMX软件进行的图形化配置,非常的直观。

还是以我手中的开发板为例,通过原理图可以看到
在这里插入图片描述
需要配置的PIN脚为PA11和PA12,我这个开发板的MCU也只有这一组CAN可以使用

配置完成之后如下:
在这里插入图片描述
PIN脚配置完成之后,需要再配置一些参数

小编手中的开发板的MCU只有一组Master CAN,所以CAN的模式需要配置为Master
在这里插入图片描述
然后,再进行如下参数的配置,先附上参数设置
在这里插入图片描述
在参数设置部分,第一个主要的部分Bit Timings Parameters,是决定了CAN的通讯速率的,我们知道通常情况下CAN可以有多种不同的速率,125k,250k,500k,1M等等,具体使用哪一个就是由这一部分的参数决定的,可以根据自己的需要进行设置,计算的方法如下:
在这里插入图片描述
以我的这个参数设置为例:

CAN的总线时钟是36M的

这里选用的时钟分频系数是9,所以分频之后的周期就是Tq = 9/36000000

配置的TBS1 为 5个Tq, TBS2 为2个Tq

所以正常的位时间为 8个Tq,即 8 * 9/36000000

那么波特率 = 36000000/(8*9) = 500k

如果需要调整为其它的波特率,只需要根据这个计算方法调整对应的三个数值就可以了。

第二个主要的部分Basic parameters

主要是一些模式的使能,根据需要选择就可以了,主要和你的应用相关,这里就不做介绍了,因为小编也没细致的去分析每个参数对应的具体区别

第三个主要部分Advanced Paramaters

这个是用来设置CAN的模式,一般来说CAN可以分为四个模式,如这一项参数选项所示
在这里插入图片描述
正常模式 - 正常的收发CAN消息

环回模式 - 正常发送的消息会直接再回到接收端,同时也会将数据发出,但是不接收外部数据
在这里插入图片描述
静默模式 - 不发送往外发送消息,只接收消息
在这里插入图片描述
静默环回模式 - 不往外发送消息,也不接收外部的消息,只在内部由发送端到接收端
在这里插入图片描述
这里为了方便测试,我们将其设置为环回模式,根据原理我们可以看出,外部不需要连接CAN通讯的设备就可以测试CAN是否工作了

配置的最后一部分,中断配置
在这里插入图片描述
大家可以看到,我这里没有使用中断发送也没有使用中断接收,通常情况下我们会使用中断来完成,但是这里使用中断的配置一直工作不正常,暂时还没有找到原因,所以就没有使用中断了,使用的是查询模式,这个在后面建立MATLAB模型的时候会再次提到,这也是小编在这次调试的时候遇到的最大的一个坑,不知道是不是和工具有关

到此,图形化配置的工作就结束了

还是和之前一样,模型只需要建立好就可以了

暂时不要再STM32CubeMX里面生成代码
暂时不要再STM32CubeMX里面生成代码
暂时不要再STM32CubeMX里面生成代码

MATLAB模型建立

需要实现的功能:封装一个简单的CAN的message,当检测到按键按下的时候将消息发出,然后通过CAN模块读取发出的消息,再把读到的CAN的message的数据通过串口发送到上位机。

注意:这里是基于之前的工程直接开始的,如果之前没有工程的话,步骤会复杂一些,参看以前的文章,文章开头的部分添加了链接,可以回去查看

调用CAN pack的模块,路径如下:
在这里插入图片描述
双击打开CAN Pack的属性设置,设置属性如下
在这里插入图片描述
输入数据的类型选择raw value,这样比较方便的输入一个数据就可以了,如果是信号或者dbc文件的话,相对比较麻烦,在做真正的工程的时候肯定是需要的,这里我们只做简单的示例,就不使用这么复杂的了哈

设置好之后,在CAN Pack的输入端添加一个自由计数的模块
在这里插入图片描述
然后CAN Pack的右侧出来的就是一个CAN的message了,直接传递给一个STM32的CAN Send模块就可以了,如下所示
在这里插入图片描述
将这一部分放置到一个条件模块内,因为我们需要通过按键出发CAN消息的发送,这里需要使用条件模块,设置如下:
在这里插入图片描述
左上角是一个条件判断,而它的输入就是来自于按键模块的信号

整体的逻辑框图如下:
在这里插入图片描述
CAN消息的发送就设置完成了,下一步,设置接收的过滤以及接收模式

CAN filter这个话题比较大,不是三言两语可以解释清楚的,也不属于本文的讨论话题,就不多说了,有兴趣的以后可以再聊,这里你也可以不设置,所有的都接受也可以,毕竟简单的测试,没有比较多的消息,不过滤也可以的

接收模式,我们设置为查询模式,需要调用这个模块
在这里插入图片描述
大家可以看到,这里显示有个Polling,代表的就是查询模式,它也可以设置为中断模式
在这里插入图片描述
但是,小编尝试了很久,也没有设置成功,help文档说需要再STM32CubeMX里面配置好,可是找了许久,依然是没有找到解决方法,这就是为什么前面我们提到没有设置中断的原因,如果哪位朋友知道原因还望分享一下!

下一步,建立CAN数据接收的模型

总体模型如下
在这里插入图片描述
当CAN的状态ready以及CAN接收数据的状态Ready之后,进入右下脚的逻辑框图执行,右下脚的逻辑就是将CAN接收模块接收到的数据通过串口发送出去,模型如下:
在这里插入图片描述
注意,一定记得转换一下CAN接收到的数据格式再到串口发送模块,因为串口发送模块需要的是数据地址,不是直接的数据,否则的话模拟和编译会报错的

MATLAB模型建立完成

工程生成

MATLAB模型建立完成之后,就可以返回STM32CubeMX的工程了,将工程设置完成以后
在这里插入图片描述
就可以点击右上角的代码生成,生成keil的工程了

编译-下载-调试-验证

上一步生成工程之后,直接在keil中打开即可,你不需要更改任何的代码,直接对工程进行编译就行,理论上不应该报错

哦,忘记了一点,如果是第一次建立CAN的工程可能会出现错误,显示缺少三个文件
在这里插入图片描述
以及
在这里插入图片描述
还有
在这里插入图片描述
别怕。。。

这个STM32的Toolbox已经考虑到了,到你的STM32的MATLAB的toolbox的安装路径下去找如下的文件夹
在这里插入图片描述
这个文件夹下包含三个子文件夹,里面有你需要的三个文件
在这里插入图片描述
把缺少的文件添加到工程就行了

再次编译,应该就没有问题了,如果再有问题就得具体问题具体分析了

编译之后,下载到开发板进行测试

打开串口调试助手,观察收到的数据,在开发板上按一下按键
在这里插入图片描述
串口收到了两个字节的数据,因为我们的CAN的字节长度是两个字节

有的朋友可能会纳闷了,为啥是00 00 呢,有没有有效数据啊

这是因为我们封装CAN消息的时候输入的是自由计数,计数的起始值是0,所以第一次输出的数据是00 00

如果我们按住按键让它持续输出,输出的数据就是如下了:
在这里插入图片描述
每次输出两个字节,每次加一,时间间隔是0.5,这个也是自由计数的周期决定的

重新按键的时候,会再次从零开始计数

至此一个简单的工程就实现了,还是那句话,原理是一样的,可以通过简单的原理扩展复杂的功能,包括复杂的CAN消息,都是可以实现的

写在最后

这一期更新的太慢了,主要是最近工作有点忙,家里又有一点私事,包括上一次文章提到的会把这一系列内容也录制成视频,以便更全面一点的说明,打字确实太累了,也是因为时间的原因一直没有践行,不过这个工作还是会做的,最近抽空就开始录制,希望有兴趣的小伙伴多多交流哦!

共同学习,共同进步!

  • 2
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lidaren9201

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值