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...\n");
  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 \n",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 \n",timer2Counts,TickCount);
  /* USER CODE END CallbackTimer02 */
}

修改完畢后點擊 小錘子 構建工程,然后點擊Debug,按如下步驟配置ITM調試

 

 

 

 全速運行之前一定要先點擊SWV ITM data Console 頁面中的紅色圓圈

 

現象:

 

 

 可以看到Timer01每1秒執行一次,5秒鍾之后Timer02執行,且只執行這一次


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM