首页 > 编程知识 正文

stm32cubemx例程,stm32cubemx

时间:2023-05-05 06:25:35 阅读:195650 作者:1750

通过STM32CUBEMX生成RTOS系统运用(一)

前言:
在一次项目开发中,使用的是循环式运行,但在某些需要快速响应处理数据时,没有办法及时的去到处理函数,于是开始了这次基于STM32CUBE自动生成的RTOS应用

硬件平台:STM32F405RG软件平台:Keil5 / VS CODESTM32CUBEMX 5.0

一、利用STM32CUBEMX生成RTOS工程文件

新建一个ioc文件工程选取到对应的芯片

先从配置开始
RCC快速选取外部时钟
若要使用RTOS的话,sys这里就不可以选取SysTick,要更换成其他定时器,这里我选用了dcdpd1
若选取了SysTick,在生成带RTOS的工程时,会弹出一个警告

出现这个警告的可能是因为:
RTOS是会选取SysTick为基础时钟来应用的,为了使RTOS收受到的干扰降低到最小,所以RTOS会将SysTick的中断等级降至最低,这样也导致了整个代码的时钟也会处于最低等级的中断,HAL库本身的系统计时也会不准确(大概)
(此图的sys选取的是SysTick)
当我sys选取改成dcdpd1时,因为基于的时基不同,中断等级也相应的不同,这样的话本身HAL库的系统计时就会相对于准确(可能这就是会出现警告的原因吧)
选取RTOS
这里我没有对参数改变,使用的是默认参数
在这里创建自己的任务
点击Add后,会弹出窗口

Task Name 是指任务名字
Priority :指向的是任务的中断等级,CUBE中将RTOS的任务中断等级简化成七个,等级优先程度从低到高分别是 :osPriorityIdle(空闲任务/任务优先级为0)、osPriorityLow、osPriorityBelowNormal、osPriorityNormal、osPriorityAboveNormal、osPriorityHigh、osPriorityRealtime
Stack Size :任务所需要的栈空间大小 (PS:栈的空间必须足够大才行,不然代码会卡死在这里面)
Entry Function:任务函数入口
Code Generation Option:代码生成选项
Parameter:参数
Allocation:分配

OK之后会自动添加一个任务
然后选择自己需要的外设口 如串口 SPI等,我这边就没有添加了,生成keil工程文件 ,最好是选择上".c"、".h"文件

打开keil工程文件 ,在freertos.c中的StartTask02函数中添加自己的任务代码
and osDelay是指任务阻塞时间,若没有到阻塞时间的话,就算其他任务结束了,也不会运行这个任务,在这里添加完任务代码就可以开始运行了

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