zoukankan      html  css  js  c++  java
  • 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执行,且只执行这一次

  • 相关阅读:
    用户代理列表--爬虫伪装浏览器访问用
    python爬虫解析页面数据的三种方式
    requests模块的使用
    Python pip源更改
    个人博客项目开发
    Django之中间件
    Django之发送邮件
    Django组件之用户认证组件
    Django之Cookie与session
    Django组件之分页器
  • 原文地址:https://www.cnblogs.com/tianxxl/p/12028397.html
Copyright © 2011-2022 走看看