建立stm32空项目
这里使用STM32CubeMX快速创建项目,要注意的是我们完成最基本的配置以后,需要将我 们的Timebase Source修改一下,修改成除了滴答滴答定时器的其他定时器,就像这样:
在FreeRTOS中我们的SysTick定时器被用于了我们的时钟基准,它用来实现我们的任务切换,我们的SysTick定时器每次触发我们的中断(默认是一毫秒,可以自行修改为其他值)。
正常裸机开发中我们的SysTick定时器是用来主要是用来进行我们的HAL_Delay() 延时的,使用其作为基准,前面我们说了SysTick定时器被用于系统任务切换了,所以它就是一直在工作,或者说一直在触发中断,这样的话我们的HAL_Delay()就需用使用我们的其他定时器进行替代其作用了。
FreeRTOS内核下载
浏览器进入FreeRTOS官网,点击右上角下载FreeRTOS。
上面的是FreeRTOS的最新版本,下面的就是长期维护的版本。点击上方github的链接,在github下载压缩包。下载下来并不完整,他的子模块还没有。继续向下滑动网页:
点击连接同样下载压缩包,解压后:
开始移植
Keil打开stm32项目,左侧添加两个新分组:
在工程中,新建文件夹:
打开FreeRTOS-Kernel-main文件夹,复制所有.c文件到刚刚建立的FreeRTOS文件中。
复制include文件夹以及portable文件夹到FreeRTOS文件夹下
保留FreeRTOS/portable文件夹中的Keil、MemMang、RVDS文件夹,其余全部删除。
保留FreeRTOS/portable/RVDS文件夹中的ARM_CM4F文件夹。
\FreeRTOS\FreeRTOS-main\FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK\FreeRTOSCionfig.h文件复制到FreeRTOS\include中。
将.c文件添加到之前建立的分组中:
添加头文件路径:
编译提示错误:SystemCoreClock未定义。对应修改FreeRTOSCionfig.h
编译报错:重复定义
在stm32f4xx_it.c中删除这几个函数。再次编译无错。
点灯任务测试
引入相关头文件:”FreeRTOS.h” ”task.h”.
任务函数创建:
主函数创建任务,以及开启任务调度器:
编译下载即可。