首页 > 编程知识 正文

matlab考试题库及答案,大学生有必要学matlab吗

时间:2023-05-04 11:54:32 阅读:172069 作者:3519

MATLABSTM32CubeMX联合开发系列——无需手写一行代码就能实现CAN通信。 首次构建MATLAB和STM32CubeMX的共同开发环境已经有一段时间了。 之前发布和共享了两个实例,对这个话题感兴趣的朋友还很多,所以最近正在调试的CAN通信实例也和大家共享,今后将面向这个系列陆续公开

这里也把以前共享的两篇文章的链接放在这里。 因为第一篇文章花了很多篇幅介绍环境的构建,所以对刚知道这个的朋友很有帮助

PSD db :手把手教你使用MATLAB联合STM32CubeMX和Keil从零开始开发STM32的简单程序-LED循环点亮

psddb: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

因此,通常位时间为8TQ,即8 * 9/36000000

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

如果需要调整到其他波特率,根据这种计算方法调整对应的三个数值即可。

第二个主要部分基本参数

主要是几种模式的启用,根据需要选择就可以了。 主要涉及你的应用,这里就不介绍了。 因为小编也没有仔细分析各参数对应的具体差异

第三个主要部分高级参数

这是用于配置CAN的模式,CAN一般分为四种模式,如此参数选项所示

正常模式-正常收发CAN消息

环回模式-正常发送的消息将直接返回到接收方,同时还会发送数据,但不会接收外部数据

静默模式-不向外部发送消息,仅接收消息

静默环回模式-内部仅从发送方向接收方发送消息,而不向外部发送消息或接收外部消息

这里为了便于测试,设定为环回模式,但从原理上可以看出,可以在不需要从外部连接到CAN通信的设备上测试CAN是否工作

构成的最后一部分,中断构成

正如你所看到的,我这里既没有使用中断发送,也没有使用中断接收。 通常使用中断进行,但这里使用中断的结构无法正常工作,暂时找不到原因,所以没有使用中断。 使用的是查询模式。 稍后在制作MATLAB模型时会再次提到这一点。 这也是小编在这次调试时遇到的最大漏洞,不知道是否和工具有关。

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

和以前一样,建立模型就可以了

请勿在STM32CubeMX中生成代码

请勿在STM32CubeMX中生成代码

请勿在STM32CubeMX中生成代码

构建MATLAB模型所需的功能:封装简单的CAN消息,检测到按键时发送信息,读取CAN模块发送的信息,通过串口将读取的CAN消息数据发送到上位机。

注意:这里是根据前面的工程直接开始的。 如果之前没有工程的话,程序会变得复杂。 请参考前面的文章。 在文章的开头部分添加了链接。 你可以回去看

调用CAN pack的模块。 路径如下。

双击以打开CAN Pack属性设置,然后按如下方式设置属性

输入数据种类选择raw value,这样比较方便地输入一个数据就可以了。 对于信号和dbc文件,相对来说比较麻烦,做真正的工程的时候一定要。 这里只做简单的样品,不用这么复杂的

设定结束后,在CAN Pack的输入端子中追加自由计数的模块

然后,出现在CAN Pack右侧的是CAN的消息,直接传到1

个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消息,都是可以实现的

写在最后

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

共同学习,共同进步!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。