利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程

前言

(1)FreeRTOS是我一天过完的,由此回忆并且记录一下。个人认为,如果只是入门,利用STM32CubeMX是一个非常好的选择。学习完本系列课程之后,再去学习网上的一些其他课程也许会简单很多。
(2)本系列课程是使用的keil软件仿真平台,所以对于没有开发板的同学也可也进行学习。
(3)叠甲,再次强调,本系列课程仅仅用于入门。学习完之后建议还要再去寻找其他课程加深理解。

STM32CubeMX操作

创建工程

(1)创建一个一个STM32F103标准工程。

利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程_第1张图片
利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程_第2张图片

配置RCC

(1)一般的STM32F103开发板都是有一个8MHZ的高速外部晶振,所以我们需要使能Crystal/Ceramic Resonator,让STM32F103性能达到最佳状态。

利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程_第3张图片
利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程_第4张图片

配置SYS

(1)Debug这个一定要记得配置,不然你的芯片只能烧录一次程序,之后就变砖头了(哭笑)。
<1>Debug一般我们都是选则的Serial Wire,因为这样只需要占用SWDIOSWCLK引脚。其他几种Debug模式占用引脚太多,就不选择了。
<2>如果实在是忘记配置Debug了,就让开发板上的boot0和boot1都接高电平,进入内置SRAM启动模式,重新烧录程序。然后再让开发板上的boot0和boot1都接低电平,进入主闪存存储器模式。
(2)Timebase SourceHAL时基配置,如果是裸机就默认SysTick ,但是FreeRTOS会占用 SysTick,所以这里随便选一个定时器TIM4。如下为详细解释:
<1>裸机运行时只需要维护一个时基就可以了,也就是HAL时基。在加上操作系统时我们需要提供第二个时基来保证操作系统同时运行,也就是OS时基
<2>在裸机中SYS一般默认使用 SysTick滴答定时器作为HAL时基。但是开启 FreeRTOS 后,FreeRTOS会占用 SysTick (用来生成1ms
定时,用于任务调度),所以需要其他总线提供另外的时钟源。
<3>听完上面的,你是不是懵逼了。哈哈哈哈,这堆术语一下来,大部分都得懵逼,最多是一知半解不懂装懂。首先,我们我们来讲讲HAL时基是什么。
<4>在裸机开发中,我们延时函数有两种写法,第一种是软件延时,让CPU执行无效语句进行空转。第二种就是利用硬件定时器延时。软件延时效果并不精准,所以大多数时候,我们都是使用硬件定时器延时。因为M3内核的芯片自带了一个SysTick滴答定时器,所以很多时候我们都用SysTick作为硬件定时器延时,也就是HAL时基。讲完这些,一定还有同学依旧懵逼,能不能来点实例呢?
<5>实例来了,当我们使用HAL_Delay()函数的时候,他底层就是调用的HAL时基单元。如果是裸机程序,那么就是默认的 SysTick
<6>现在我们知道了HAL时基本质就是给一些时间有关的函数提供时间的功能,那么OS时基又是什么呢?这个时候我就推荐你看一下嵌入式裸机设计思想——时间片轮裸机开发架构+状态机+定时器调度机制这篇博客的时间片轮裸机开发架构部分。这个就是一个操作系统的雏形,这篇博客的OS时基就是 SysTick 。如果看不懂就记住吧,代码都摆出来的,还不理解,就是基础问题了。我不想过多赘述。

利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程_第5张图片

(3)STM32F103的最佳工作频率是72MHZ,所以我们选择72MHZ。

利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程_第6张图片

利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程_第7张图片

配置FreeRTOS

(1)FreeRTOS 版本问题:STM32CubeMX 已经将 FreeRTOS 集成到工具中,并且将 RTOS 的接口进行了封装 CMSISRTOS V1/V2V2 的内核版本更高,功能更多,在大多数情况下 V1 版本的内核完全够用。但是 V2 版本的 API 的兼容性更高,为了将来的开发和移植,建议开发者使用 V2 版本的 API

利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程_第8张图片

配置GPIO

(1)为了方便验证我们的程序是否好了,所以我们让一个PC13做输出口用于检测程序。

利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程_第9张图片

生成工程

(1)按照下图步骤,生成工程,并且打开工程即可。

利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程_第10张图片
利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程_第11张图片
利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程_第12张图片
利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程_第13张图片

keil中进行的配置

编写程序

(1)在freertos.c中的StartDefaultTask函数加入如下代码。

void StartDefaultTask(void *argument)
{
  /* USER CODE BEGIN StartDefaultTask */
  /* Infinite loop */
  for(;;)
  {
    // osDelay(1);
		HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
		HAL_Delay(100);
  }
  /* USER CODE END StartDefaultTask */
}

利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程_第14张图片

配置keil仿真器

(1)配置部分建议直接复制粘贴我的,一旦写错了,会有问题。
DARMSTM.DLL
pSTM32F103C8

利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程_第15张图片

测试结果

(1)打开调试界面

利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程_第16张图片

(2)选择逻辑分析仪,检测PC13引脚。为什么下面输入的是PORTC.13,原因很简单,格式为PORTx.y,x表示端口,y表示具有引脚数值,注意’.'必须是英文的!

利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程_第17张图片
利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程_第18张图片

(3)开始仿真,发现逻辑分析仪上有方波。

利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(0) —— 创建工程_第19张图片

参考

(1)STM32CubeMX环境安装(保姆级);
(2)STM32CubeMX新建工程并点亮一个LED;
(3)STM32滴答定时器SysTick精准延时,兼容HAL库和标准库;
(4)嵌入式裸机设计思想——时间片轮裸机开发架构+状态机+定时器调度机制;

你可能感兴趣的:(FreeRTOS,stm32,单片机,嵌入式硬件)