[其他ST产品] CubeMX配置FreeRTOS跑多线程任务

[复制链接]
2643|50
 楼主| 雨果喝水 发表于 2023-4-18 23:33 | 显示全部楼层 |阅读模式
前言:想起以前用标准库做RTOS的时候一大堆操作就很烦,还好MX支持了直接配置生成RTOS工程很方便,最近发现一些很久以前买的模块没用上放着占地方然后顺便拿出来做了个小遥控器玩玩,下面给遥控器配个RTOS跑跑。

软件:

STM32CubeMX V5.3.0  

固件库版本:
STM32Cube FW_F1 V1.8.0

硬件:

STM32F103C8T6

0.96寸IIC接口OLED

双通道遥感电位器

正文:
1、接着用上次配的工程,打开RTOS,配置内核时钟
10714643eb83c8fc0e.png

————————————————

评论

版权声明:本文为CSDN博主「linzs.online」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_40599145/article/details/100164676  发表于 2023-4-18 23:33
 楼主| 雨果喝水 发表于 2023-4-18 23:34 | 显示全部楼层
配置时基产生定时器
58442643eb85bd305b.png
HAL库函数如CAN通讯用的是HAL_IncTick(),而HAL_IncTick()是CubeMX的TimeBase配置的,这个时候如果需要实时响应,则TimeBase最好为最高优先级0,即根据CubeMX推荐的设置TimeBase为TIM1提供。而原先裸机的HAL系统时钟用的Systick,现在Systick用到FreeRTOS上的调度,所以要求Systick为最低优先级15,这样可以保证systick不会对进程造成影响,仅存在延时。而消除延时的手段并不是提高systick的优先级,而是让中断服务程序更快。
 楼主| 雨果喝水 发表于 2023-4-18 23:34 | 显示全部楼层
 楼主| 雨果喝水 发表于 2023-4-18 23:34 | 显示全部楼层
2、配置Config parameters,这里大部分是默认参数,然后因为后面要开三个任务,默认堆栈大小不够,修改了一个总堆栈大小
99389643eb87e2ee05.png
 楼主| 雨果喝水 发表于 2023-4-18 23:34 | 显示全部楼层
关于里面参数的相关含义这里有一篇介绍得很好的文章

https://blog.csdn.net/zhzht19861011/article/details/50134883

现在把部分重要的参数整理成表格如下:

11999643eb89a35690.png
 楼主| 雨果喝水 发表于 2023-4-18 23:35 | 显示全部楼层
 楼主| 雨果喝水 发表于 2023-4-18 23:35 | 显示全部楼层
 楼主| 雨果喝水 发表于 2023-4-18 23:35 | 显示全部楼层
3、配置Include parameters,用于裁剪内核,定制一个合适大小的内核,设置关闭某些没必要的API可以减轻内核大小。

5309643eb8cccaf94.png
 楼主| 雨果喝水 发表于 2023-4-18 23:36 | 显示全部楼层
4、在TaskAndQueues任务列表中添加自己的任务任务及队列的配置。

TaskName是任务名称,一个字符串而已。下面是优先级配置,再往下是任务堆栈大小。EntryFunction是任务函数名。CodeGenerationOption是选择自动生成代码是否声明成weak。Allocation是配置内存是否动态分配,此处CUbeMX默认动态分配不给更改。

36339643eb8e9918b7.png
 楼主| 雨果喝水 发表于 2023-4-18 23:36 | 显示全部楼层
5、生成代码,在freertos.c文件里面可以看到刚刚我们定义函数名字的函数生成了,但是还是空函数,可以自己添加逻辑和算法处理函数。

23053643eb900a6621.png
 楼主| 雨果喝水 发表于 2023-4-18 23:36 | 显示全部楼层
我们做好逻辑和算法处理函数之后直接在这个文件里面调用即可,main.c文件不需要做其他操作

20663643eb91264b89.png
 楼主| 雨果喝水 发表于 2023-4-18 23:37 | 显示全部楼层
在main函数里面做完底层初始化之后就开始初始化RTOS,然后开启任务调度,这就实现了一个多线程的过程。
 楼主| 雨果喝水 发表于 2023-4-18 23:37 | 显示全部楼层
这里分别设置了三个线程,OLED显示刷新、LED闪烁、ADC数据处理。

83084643eb92c3326a.png
uytyu 发表于 2023-5-5 13:07 | 显示全部楼层
freertos要学多长时间              
cemaj 发表于 2023-5-5 18:31 | 显示全部楼层
freertos 怎样控制任务创建的先后
sesefadou 发表于 2023-5-5 20:15 | 显示全部楼层
freertos如何在一个任务中删除另一个任务
usysm 发表于 2023-5-5 21:07 | 显示全部楼层
FreeRTOS堆分配大小对任务数的影响大吗
cemaj 发表于 2023-5-5 21:46 | 显示全部楼层
第一次使用STM32CubeMx,创建了一个简单的FreeRTOS代码。
biechedan 发表于 2023-5-5 21:51 | 显示全部楼层
为什么称FreeRTOS为轻量级OS
maudlu 发表于 2023-5-5 22:26 | 显示全部楼层
freertos 会改变异常等级嘛
您需要登录后才可以回帖 登录 | 注册

本版积分规则

90

主题

1213

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部