STM32CubeIDE+FreeRTOS软件定时器实验

Posted tianxxl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32CubeIDE+FreeRTOS软件定时器实验相关的知识,希望对你有一定的参考价值。

软件定时器实验是在 FreeRTOS 中创建了两个软件定时器,其中一个软件定时器是单次模式, 5000 tick 调用一次回调函数,另一个软件定时器是周期模式, 1000 tick 调用一次回调函数,在回调函数中输出相关信息,。

创建工程RTOS_Timer,

配置HCLK,使用内部晶振,频率为180MHZ(根据板子设置)

技术图片

 

 

将SYS中时基源(Timebase Source)改为除SysTick之外的任意定时器即可,如:

技术图片

配置FreeRTOS,使用CMSIS_V1,使能USE_TIMERS

技术图片

 

 添加2个定时器,周期定时器myTimer01,单次定时器myTimer02

技术图片 技术图片

 

Ctrl + S生成代码

修改代码,

1,在main.h中添加

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

2,在mian.c中添加

/* USER CODE BEGIN PFP */
int _write(int file , char *ptr,int len)
{
    int i = 0;
    for(i = 0;i<len;i++)
        ITM_SendChar((*ptr++));
    return len;
}
/* USER CODE END PFP */
...
...
...
/* USER CODE BEGIN RTOS_TIMERS */
  /* start timers, add new ones, ... */
  printf("starting...
");
  osTimerStart(myTimer01Handle, 1000);
  osTimerStart(myTimer02Handle, 5000);
  /* USER CODE END RTOS_TIMERS */

3,在main.c中修改2个定时器的回调函数

/* CallbackTimer01 function */
void CallbackTimer01(void const * argument)
{

  /* USER CODE BEGIN CallbackTimer02 */
    static uint32_t timer1Counts = 1;
    uint32_t TickCount ;
    TickCount = xTaskGetTickCount(); /* 获取滴答定时器的计数值 */
    printf("Timer01 run times %ld  TickCount is %ld 
",timer1Counts++,TickCount);
  /* USER CODE END CallbackTimer02 */
}
/* CallbackTimer02 function */
void CallbackTimer02(void const * argument)
{

  /* USER CODE BEGIN CallbackTimer02 */
    static uint32_t timer2Counts = 1;
    uint32_t TickCount ;
    TickCount = xTaskGetTickCount(); /* 获取滴答定时器的计数值 */
    printf("Timer02 run times %ld  TickCount is %ld 
",timer2Counts,TickCount);
  /* USER CODE END CallbackTimer02 */
}

修改完毕后点击 小锤子 构建工程,然后点击Debug,按如下步骤配置ITM调试

技术图片

 

技术图片

 

 技术图片

 全速运行之前一定要先点击SWV ITM data Console 页面中的红色圆圈

技术图片

 

现象:

 技术图片

 

 可以看到Timer01每1秒执行一次,5秒钟之后Timer02执行,且只执行这一次

以上是关于STM32CubeIDE+FreeRTOS软件定时器实验的主要内容,如果未能解决你的问题,请参考以下文章

STM32CubeIDE+FreeRTOS互斥量实验

STM32G0学习手册——FreeRTOS软件定时器

STM32G0学习手册——FreeRTOS软件定时器

STM32G0学习手册——FreeRTOS软件定时器

STM32CubeMX学习笔记(33)——FreeRTOS实时操作系统使用(软件定时器)

使用STM32CubeIDE编写EC11 定时器中断方式