# Freertos_软件定时器 **Repository Path**: wang-jialll/freertos_task7 ## Basic Information - **Project Name**: Freertos_软件定时器 - **Description**: 软件定时器学习 学习野火的代码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-09-04 - **Last Updated**: 2022-09-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: FreeRTOS ## README # 软件定时器 # 实验 创建两个定时器,一个使用单次模式,5000个tick调用一次回调函数,另一个使用周期模式1000个tick调用一次回调函数 > 打开软件定时器宏定义 > #define configUSE_TIMERS 1 1. 定义软件定时器句柄 ```C //软件定时器句柄 TimerHandle_t Swtmr1_Handle = NULL; TimerHandle_t Swtmr2_Handle = NULL; ``` 2. 实现回调函数 void(*TimerCallbackFunction)(TimerHandle xTimer); ```C void Swtmr1_Callback( TimerHandle_t xTimer ) { TickType_t tick_num1; TmrCb_Count1++; tick_num1 = xTaskGetTickCount();//获取滴答定时器计数值 LED1_TOGGLE; printf("Swtmr1_Callback函数执行 %d 次\r\n",TmrCb_Count1); printf("滴答定时器数值%d\r\n",tick_num1); } void Swtmr2_Callback( TimerHandle_t xTimer ) { TickType_t tick_num2; TmrCb_Count2++; tick_num2 = xTaskGetTickCount();//获取滴答定时器计数值 LED1_TOGGLE; printf("Swtmr2_Callback函数执行 %d 次\r\n",TmrCb_Count2); printf("滴答定时器数值%d\r\n",tick_num2); } ``` 3. 创建定时器_xTimerCreat() ```C Swtmr1_Handle=xTimerCreate( "AutoReloadTimer", 1000, pdTRUE, //周期 (void *)1, Swtmr1_Callback ); /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ xTimerStart(Swtmr1_Handle,0);//句柄加阻塞时间,打开周期定时器 Swtmr2_Handle=xTimerCreate( "OneShotTimer", 5000, pdFALSE, //单次 (void *)2, Swtmr2_Callback ); /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ xTimerStart(Swtmr2_Handle,0);//句柄加阻塞时间,打开单次定时器 ``` 4. 启动定时器——xTimerStart() ```C xTimerStart(Swtmr1_Handle,0);//句柄加阻塞时间,打开周期定时器 xTimerStart(Swtmr2_Handle,0);//句柄加阻塞时间,打开单次定时器 ```