对于stm32一些ram和flash相对大一些的mcu,增加一个实时操作系统,会使程序控制更加灵活。本文阐述一下通过CubeMx自动添加FreeRtos的方法,和使用visualgdb加载CubeMx生成项目的方法。
一、软件环境
1、CubeMx 5.2.0
2、VisualStudio2017
3、VisuualGDB 5.4R3
二、步骤
1、用CubeMx创建一个项目,因为手头的板子是野火挑战者Stm32F429开发板,所以cpu型号选择Stm32f429igtx。
![](https://img-blog.csdnimg.cn/20190513141927749.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
2、配置RCC,选择外部晶振
![](https://img-blog.csdnimg.cn/20190513142114883.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
3、配置Clock
![](https://img-blog.csdnimg.cn/20190513142424713.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
4、 设置系统时钟源,不要用Systick,最好使用一个定时器。这里我们选择Timer2作为系统时钟源。
![](https://img-blog.csdnimg.cn/20190513142801741.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
5、在中间件中添加FreeRtos
![](https://img-blog.csdnimg.cn/20190513143145355.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
在FreeRtosTasks and Queues界面已经自动建立了一个默认Task了。我们点击Add按钮,添加三个自定义Task。
![](https://img-blog.csdnimg.cn/20190513143555927.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190513143704905.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190513143730665.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
到此FreeRtos已经添加完了,为了观察效果,我们设置一下Led灯的GPIO
![](https://img-blog.csdnimg.cn/20190513144115346.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
6、在Project Manager内配置输出工程代码格式
![](https://img-blog.csdnimg.cn/20190513144252226.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
其实,选择STM32CubeMxIDE、SW4STM32、TrueStudio、makefile都可以,因为这四种IDE都使用的是arm-gcc编译器。
点击 ![](https://img-blog.csdnimg.cn/20190513144940791.png)
生成项目代码。
/
7、用VisualStudio新建一个空白解决方案
![](https://img-blog.csdnimg.cn/20190513145433499.png)
8、在空白解决方案里添加一个嵌入式工程,点击确定
![](https://img-blog.csdnimg.cn/20190513145622240.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
9、在工程向导中如下选择,然后点击下一步
10、输入mcu型号 stm32f429ig,浮点数支持选择硬件支持,点击下一步
![](https://img-blog.csdnimg.cn/20190513145941185.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
11、选择CubeMx生成项目代码的目录,切记VisualStudio项目目录,不能和CubeMx生成的工程目录重名。点击下一步。
12、配置Debug选项,根据实际情况选择,因为我用的是CMSIS-DAP仿真器,所以做如下选择;点击完成。
![](https://img-blog.csdnimg.cn/2019051315055988.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
VisualGDB就会把CubeMx生成的项目代码自动复制到,工程目录下,并且在工程中自动添加所有源文件(.c;.cpp;.asm)文件。但是,头文件的包含路径,则需要我们自己添加。
![](https://img-blog.csdnimg.cn/20190513151226754.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
13、右键点击项目图标,弹出菜单,选择 VisualGDB Project Properties,弹出界面
![](https://img-blog.csdnimg.cn/20190513151348334.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190513151513517.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
14、在 弹出界面中,我们选择 Embedded framework标签,将两个VirsualGDB自动添加的模块去掉,然后点击 apply按钮
![](https://img-blog.csdnimg.cn/20190513152917349.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
15、在 弹出界面中,选择 makefile setings标签,并修改Preprocessor macros 和 Include directories 两项。点击 OK按钮。
![](https://img-blog.csdnimg.cn/20190513151736670.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
因为我的 MCU 是 STM32F429IGTx,所以在Preprocessor macros 添加 STM32F4xx 宏,注意大小写。把工程目录内所有头文件的文件夹路径,都添加到 Include directories 下。
![](https://img-blog.csdnimg.cn/20190513152440150.png)
到此,CubeMx 生成的带有FreeRtos系统的程序框架,就已经完全导入到 VirsualGDB中了,我们按下F7编译一下,
观察编译输出,完全正确。
16、测试FreeRtos
在 main.c 定义几个宏
![](https://img-blog.csdnimg.cn/20190513154133522.png)
分别修改 StartTask02,StartTask03,StartTask04 代码如下
![](https://img-blog.csdnimg.cn/20190513154115399.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190513154243895.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190513154259516.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExMzU3NjU2MDE4MQ==,size_16,color_FFFFFF,t_70)
重新编译一下程序,点击F5运行,VisualGDB 就会自动把程序下载到开发板,并且运行
![](https://img-blog.csdnimg.cn/20190513162141283.gif)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)