【FreeRTOS 快速入门】-- 1、STM32工程移植FreeRTOS

目录

一、新建STM32工程

为了示范完整的移植过程,我们从0开始,新建一个标准的STM32点灯工程。

本篇以 CubeMX+Keil 作示范,CubeIDE操作近同,可对比参考。

1、新建工程 

  • 打开CubeMX,选择 芯片型号 新建工程

2、搜索芯片型号

  • 输入芯片型号进行搜索
  • 双击搜索结果中的目标芯片型号,即可进入配置。

技巧提示 (输入框变了粉红色):

可能是因为前面有空格,或其它非法字符,删除掉就好了。

3、配置Debug调试方式

  • 新建工程时,养成习惯:先配置Debug选项(调试模式):Serial Wire;
  • 如果没有使能Debug:烧录一次程序后,将关闭调试引功能,无法再烧录、调试;

技巧提示 (忘了使能Debug, 如何解锁):

没有使能Debug:烧录一次程序后,将关闭调试引功能,无法再烧录;

这种情况,俗称 “锁芯片”;

首先,打开工程的CubeMX配置,修改好Debug选项,再次生成,及编译。

方法1:

    如果是魔女开发板,按着板上的左1按键,不放手,再次烧录,即可解锁。

方法2:

    Boot0引脚,用杜邦线接3.3V, 重新上电,再次烧录,即可解锁。

4、选择 晶振源

  • HSE,外部高速时钟源,选择: Crystal/Ceramic Resonator

5、配置 时钟树

  • 下图参数,通用STM32F407xx系列 , 如果你所用芯片不同,注意更换参数
  • 1、3两项,要填写实物晶振值,可以查看晶振上丝印, 也可以查看原理图。

技巧提示 (关于晶振值):

  • 目前市面常用的F1系列开发板,基本用8MHz晶振;
  • 另一种常用的F407系列开发板,常用晶振有8MHz、25MHz两种,区分,修改下图1、2两处即可。        
  • 不同频率的晶振,在F系列上没区别,经倍频等配置后,均可设置为需要系统时钟。

6、配置 LED灯 引脚

我们增加LED的引脚配置,后面通过代码控制闪烁,验证工程配置的正确性。

每个开发板上,都会有LED灯,在调试程序时可以配合作为各种状态指示输出。

小编所用的STM32板子,查得LED原理图如下:

  • 红灯使用PC5、蓝灯使用PB2低电平时通路

依据此图,我们对这两个引脚进行配置:

引脚 PC5

  • 工作模式:GPIO_Output(推出模式)
  • 修改别名:LED_RED

引脚 PB2

  • 工作模式:GPIO_Output(推出模式),
  • 修改别名:LED_BLUE

如果希望程序运行后默认为:熄灯,还需配置为:上拉,这样程序运行后电路就是断路状态。

7、工程选项

进入工程管理页面,设置4项:工程名称、存放目录、开发环境、堆栈大小。

  • 重点:存放路径、工程名称,不能使用中文!否则无法正常生成。
  • 开发环境:选MDK-ARM,  即Keil工程。
  • 堆栈大小:都修改成0x1000(或者更大),以适配FreeRTOS、LVGL等移植。

技巧提示 (关于中文路径 、中文名称):

  • CubeMX在新建工程时,路径和名称,都是不能使用中文的,否则无法正常生成。
  • 新建工程在生成后,工程文件夹,可以复制到其它中文路径下存放,也可以修改成中文的文件夹名称,以便管理。
  • 但是,工程的名称,不能作任何修改,否则后面再配置时,将无法成功生成、更新!
  • 而CubeIDE:新建工程在生成后,工程文件夹,可以复制到其它英文路径下存放。路径、名称都不支持中文。

8、文件选项

这一页,打勾两个选择:

标记2处:只生成需要的库文件(可以有效减少代码体积)。标记3处:为各种外设生成独立c、h文件(不打勾时,外设的初始化代码会堆在main.c中)。

至此,已完成新建工程所需全部配置。

9、生成工程

生成后,弹窗:

小编的习惯:打开文件夹,再手动打开工程。


二、验证工程

这一部分,我们通过编写代码,使LED每500ms闪烁一次,以验证工程的配置是否完整。

1、设置 仿真器 参数

选择 CMSIS DAP打勾自动复位、运行

2、添加LED闪烁代码

很多新手不重视LED,觉得太简单太无聊了,没味道。

请认真看待LED的使用,它是大杀器般的存在。

如,规律地闪烁,可以帮助我们判断:系统时钟是否正常、程序有没有卡死等等。

双击打开main.c在while中的 /* USER CODE BEGIN 3 */ 下方,编写规律闪烁LED的代码,如下:

/** 1ms延时 **/
HAL_Delay(1 - 1);                                                  // 延时函数,参数:ms; 注意:CubeMX生成的HAL_Delay(), 函数内部为避免无效操作,会对传入参数+1,因此,如果只需要几ms延时建议传入参数时-1,如果需要大几百ms的非精准延时,那参数不-1也影响不大

/** 每500ms闪烁一次蓝色LED **/
static uint16_t msLED = 0;
if (++msLED == 500)                                                // 每500ms执行一次
{
    msLED = 0;                                                     // 计数清0
    HAL_GPIO_TogglePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin);          // 规律地闪烁蓝色LED,方便外部观察系统是否正常运行
}

完成后,是这个样子的:

3、编译

新工程的第一次编译,时间会有点长,大约几十秒。

编译完成后,信息栏的输出,是这个样子:

重点:必须 0 Erros,才能生成烧录文件。

4、 烧录 

点击“烧录”,下方的烧录进度条,大约要跑10秒左右。

烧录完成后,芯片将会自动复位,运行里面的程序。

如果程序一切正常,这时,我们观察开发板:蓝色LED,将会每0.5秒反转闪烁一次。

至此,我们的STM32点灯工程,已通过验证,可以使用它,进行FreeRTOS的移植了 !


三、移植 FreeRTOS

以前,移植FreeRTOS的底层代码,是需要自己复制、增删、修改代码,很是麻烦,相当耗时。

而现在通过CubeMX、CubeIDE,只需简单地点击,就能自动生成已移植好FreeRTOS的工程。

1、回到图形化配置界面

如果已关闭了CubeMX,双击工程目录下的 ioc 文件再次打开。

2、修改HAL库的时基源

我们先理解两个时基源:FreeRTOS时基源、HAL库时基源。

首先是FreeRTOS的时基源,它将占用Systick定时器,每1ms产生1次计数,用作任务时基。

而CubeMX生成的HAL库代码,也需要一个时基源,也默认使用:SysTick。

HAL库的时基源,很多人以为只是被简单用于延时,如 HAL_Delay();

其实,它还用于HAL库代码中的超时监测等场景中,如:I2C通信的ACK等待超时。

如果上述两者都同时使用SysTick作时基源,潜在一定风险,在生成代码时,会弹窗警告!

所以,为了避免发生冲突,我们需要修改HAL库所用的时基源,使用其它闲置的TIM。

如:TIM7等。

3、使能FreeRTOS  

上图中,在选择: CMSIS_V2后,就能使能FreeRTOS,其它参数,默认即可,不作修改。

(后续可以按项目需要进行修改,再生成更新后的配置。)

来到这一步,已完成了FreeRTOS的移植。

......是不是相当的意外,只是打了一个勾,就移植好了,就这么简单!!

4、默认生成的OS任务

(这个小节,原本想示范如何新建一个任务,但为了各篇章的独立,还是把这事独立一篇吧。)

在使能FreeRTOS后,会自动生成一个默认的任务:defaultTasK。

在选项页 "Tasks and Queues" ,可以查看这个任务的参数配置。

具体如下图所示:

这里,也不作任何修改,直接使用默认参数。

5、再次生成工程

(待更新。。。)

6、为任务编写执行代码

(待更新。。。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值