小编之前一直使用正点原子家的产品, 最近准备学习学习TOUCHGFX,要用到HAL+RTOS,原子家的使用起来不方便。于是琢磨着使用STM32CUBEMX直接生成FREERTOS+HAL工程。非常方便,在这里分享给大家
安装CUBEMX前, 需要安装JAVA,注意一定要下载64位JAVA才可,大家可参考这个教程https://jingyan.baidu.com/article/3aed632ede2a2f7010809114.html进行下载安装 2022.6.18更新:Win11,cubemx6.5版本,已经不需要自己安装java环境了。 CUBEMX软件可以直接从官网下载最新版,链接在此https://www.st.com/en/development-tools/stm32cubemx.html。软件直接选择最新版安装。
装好后(首次打开可能需要更新, 耐心等待),点击下图位置安装相应的支持包。我这里使用的是正点原子F407最小系统板
1,选择MCU型号 2,配置SYS 点击左边的SYS选项卡,选择Debug模式为SW。注意这里将时钟源换成了Timer1。这个时钟源是给HAL库提供时钟的。HAL在运行一些超时监测的代码时, 需要一个时钟源提供时钟,一般用systick。但是本例中systick被RTOS占用。所以修改HAL时钟源为Timer1. 3,配置RCC 这里使用的是外部晶振 4,配置一个LED引脚 5,配置RTOS V1, V2 的区别我也不大清楚。网上也没搜索到,这里暂且V1。 大家有知道的请在下方留言。FREERTOS内部的配置不在这里介绍了,这里不改动任何配置 6,配置时钟树 我用的是外部8M晶振, 参数如下。这里仅做参考,大家根据自己的情况配置,只要不报错应该都没啥问题。 7,配置工程选项 注意:Application structure 建议选择Advanced, 小编之前用Basic, 在代码重新生成时会把usercode覆盖掉(代码书写位置正确的情况下也会这样)。 8,生成代码 小编比较习惯用单独的.c.h 文件,大家按习惯来 9,测试 至此, 我们的RTOS已经完成了, 为了验证一下,我们可以写一个小程序验证一下
生成的freertos里, cubemx已经为我们创建好了一个任务defaultTask, 我们直接将我们的代码塞到这个线程里即可。
在freertos.c里添加如下代码:
void StartDefaultTask(void const * argument) { /* USER CODE BEGIN StartDefaultTask */ /* Infinite loop */ for(;;) { HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_9);//翻转电平 osDelay(500); //延时+调度 } /* USER CODE END StartDefaultTask */ }
。 。 。
完活 。 。 。 PS,关于CUBEMX生成的FREERTOS ST在FREERTOS的基础上做了封装,大家可以打开cmsis_os.c就可以看到。所有关于freertos的操作全部被再封装了一遍, 好处就是即使不同的RTOS, 用户代码也不会改变。而且ST的封装感觉挺好用的。大家根据自己的情况来。