公眾號上看到一個比較好的一個github項目:https://github.com/0x1abin/MultiTimer
今天看了看,簡單的,就移植了~
且看文檔的說明,
=================================
分享一個簡單易用的軟件定時器模塊——MultiTimer
。源碼地址:
https://github.com/0x1abin/MultiTimer
簡介
MultiTimer 是一個軟件定時器擴展模塊,可無限擴展你所需的定時器任務,取代傳統的標志位判斷方式, 更優雅更便捷地管理程序的時間觸發時序。
使用方法
1、先申請一個定時器管理handle
struct Timer timer1;
2、初始化定時器對象,注冊定時器回調處理函數,設置定時時間(ms),循環定時觸發時間
timer_init(struct Timer* handle, void(*timeout_cb)(), uint32_t timeout, uint32_t repeat);
3、啟動定時器
timer_start(&timer1);
4、設置1ms的硬件定時器循環調用 timer_ticks() 以提供時間基准
void HAL_SYSTICK_Callback(void)
{
timer_ticks();
}
5、在主循環調用定時器后台處理函數
int main()
{
timer_init(&timer1, timer1_callback, 1000, 1000); //1s loop
timer_start(&timer1);
timer_init(&timer2, timer2_callback, 50, 0); //50ms delay
timer_start(&timer2);
while(1)
{
...
timer_loop();
}
}
============================================
移植很簡單,
新建stm32的cubemx工程,生成keil5工程,然后添加源碼MultiTimer,在main函數中也實例,因此可以參考。
注意頭文件要添加。
我的工程截圖如下:
1、添加頭文件
2、定義handle
3、初始化,並注冊定時任務函數
4、啟動while循環
5、重新定義systick回調函數,去掉__weak
6、定時任務函數
7、編譯