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执行,且只执行这一次

  • 相关阅读:
    2016.07.13-map的使用(以leetcode1-Two Sum为例)
    2016.6.26——Maximum Depth of Binary Tree
    centos7下docker发布第一个微服务应用(Eureka)
    centos7下快速安装Nginx服务器
    java队列Queue及阻塞队列
    JConsole连接远程linux服务器配置
    mysql时间与字符串之间相互转换
    Tomcat启动报错:org.apache.catalina.LifecycleException: Failed to start component...java.util.zip.ZipException: error in opening zip file
    java post请求的表单提交和json提交简单小结
    wagon-maven-plugin实现自动打包部署到服务器
  • 原文地址:https://www.cnblogs.com/tianxxl/p/12028397.html
Copyright © 2011-2022 走看看