Matlab迭代STM32的程序竟然如此奇妙 - 使用Matlab模型实现STM32串口收发程序
上个周末闲着没事,探索了一下Matlab结合STM32CubeMX以及Keil通过模型生成STM32程序的方法,竟然成功了,后来就把这个方法写成文章分享给了大家,没想到大家对这个还是很感兴趣的,也有不少的网友发来了私信了解这个东西的玩法,没有看过那篇文章的朋友可以通过以下的链接看一下哦
手把手教你从零开始使用Matlab联合STM32CubeMX以及Keil开发一个STM32的简单程序-LED循环点亮
因为很多的基础环境搭建都是在上一篇文章中进行介绍的,想要实现这一篇文章中提到的功能需要有上一篇文章提到的基础环境,不然的话没有办法实践。
串口通信的配置
要实现串口通讯,首先要配置相应的PIN脚,以我使用的开发板为例,串口使用的是USART1
对应的单片机的PIN脚为PA9和PA10,那么首先我们在STM32CubeMX的软件中进行PIN脚的配置,这里我们是直接接着上一次的工程进行操作的,所以很多前序的操作就没有再重复介绍了,也是为了节省文章的篇幅,不太了解的朋友可以回到上一篇文章去看一下从零开始如何建立起来这个工程的
配置PA9为USART1_TX
配置PA10为USART_RX
当然,配置这些之前,需要把串口USART1使能,不然的话即使你配置了这两个PIN脚,会显示为黄色,使能USART1的方法
左侧的菜单中选择Connectivity下面的USART1,然后一开始的模式是Disable的,只要选择一个模式即可使能,这里我们选择异步模式,使能串口USART1
使能了串口之后,就可以对它的参数进行一些修改,如下是默认的参数
可以根据自己的需要进行参数的调整,双击对应的参数位置就可以进行数值变更和显示格式的调整
第二个部分可以设置一些用户变量
这里只是简单的演示,这一块内容我们就不做调整了
第三个部分设置中断优先级
这个中断使能,后边设置对应的抢占优先级和子优先级,可以根据自己的设计去设置
第四部分DMA设置可以不用设置
第五部分GPIO设置
我这里基本都是刚才配置的,没有做更改。
配置完成之后,STM32CubeMX内的工作就完成了,还是一样,保存工程,不要生成代码
重要的事情说三遍:这里不需要生成代码, 这里不需要生成代码, 这里不需要生成代码
MATLAB模型的创建
打开在上一次创建的工程,里面的各种参数配置和组件配置已经设置好,可以直接使用的
所以,我们可以直接在模型中添加串口相关的组件
打开MATLAB的库,找到如下的两个组件
将两个组件直接拖拽到建立的模型中
这里我们实现一个简单的功能:将接收的数据直接发送回去
那么我们只需要按照如下的方式连接两个模块就可以了
NbRec代表的是接收到的字节数,直接传递给Nb2Send代表发送的字节数
PtRcv我没有搞清楚代表的是什么含义,有可能是接收数据的指针,然后传递给发送的数据Data2Send就可以的
DataRcv代表的是实际接收到的数据,这里可以不用传递
我们可以给接收的数据长度做一个限制,比如接收到十个字节之后才会把接收的内容发送出去,那么我们只需要在串口接收模块之前加一个条件就可以了,如下所示
这里仿真的话没有直观的数据可以看到,我们还是做一下仿真,看一下有没有错误产生,如果没有错误的话,再进行编译
编译完成之后,再次回到STM32CubeMX软件
MDK工程迭代
前面的两个步骤完成以后,第三步就非常的简单了
回到STM32CubeMX软件,保持原有的工程设置不变,直接点击右上角的代码生成,进行代码生成即可
当然,这里说的是把原有的工程进行迭代,你也可以再次生成新的工程都是没有问题的,只要把工程相应的设置做一下更改就可以了
工程生成以后,再Keil中打开工程,不需要做任何的变更,直接编译,然后进行下载验证
功能验证
下载程序带开发板之后,使用串口连接开发板
串口设置和程序设计时保持一致
可以发送一串字符做一下测试
这一串字符长度超过了10,所以立即就收到了返回
我们再测试一个长度不到10的
虽然已经发送但是并没有受到返回
我们再接着发一次
当发送的字符达到10的时候,串口立即返回了数据,而且接收的数据和发送的数据长度是一致的
这和我们设计的逻辑是相符的,这么一个简单的串口程序就这么容易的实现了!