STM32CubeMX 下載和安裝 詳細教程
【HAL庫】STM32CubeMX開發(fā)----STM32F103/F207/F407----目錄
前言
HAL庫 有自帶的 ms級 延時函數(shù): HAL_Delay();
缺點: 這是阻塞延時方式,就是延時期間,什么都不能干,這樣很浪費資源。
這篇文章主要介紹,利用SysTick(滴答定時器)中斷實現(xiàn)非阻塞延時的實驗。
STM32F407----非阻塞延時實驗
主要是利用SysTick(滴答定時器)中斷中有一個計數(shù)變量,每1ms加1,通過獲取這個時間數(shù)值變量,實現(xiàn)非阻塞延時。
相關 HAL庫 函數(shù)
/**
*@功能:獲取以毫秒為單位的tick值
*@參數(shù):無
*@返回值:以毫秒為單位的tick值
*/
__weak uint32_t HAL_GetTick(void)
{
return uwTick;
}
獲取2個時間點之間的時間間隔的函數(shù)
這個函數(shù)需要自己手動編寫。
具體代碼如下:
/**
*@功能: 獲取2個時間點之間是否達到期望的延時
*@參數(shù)1:現(xiàn)在的實時時間
*@參數(shù)2:開始計時的時間
*@參數(shù)3:要延時的時間間隔
*@返回值:0-延時時間未到,1-延時時間已到
*/
uint8_t Get_Time_Interval(uint32_t Current_Time, uint32_t Past_Time, uint32_t Delay_Time)
{
if(Current_Time < Past_Time)//實時時間小于開始時間,時間計數(shù)發(fā)生回滾
{
if(0xFFFFFFFF - Past_Time + Current_Time >= Delay_Time)
{
return 1;
}
else
{
return 0;
}
}
else //實時時間大于開始時間
{
if(Current_Time - Past_Time >= Delay_Time)
{
return 1;
}
else
{
return 0;
}
}
}
使用方法舉例
實驗內容:實現(xiàn)每隔1s,通過串口發(fā)送數(shù)據。
具體代碼如下:
//非阻塞延時實驗舉例
void Non_blocking_delay_example(void)
{
static uint32_t Static_Time = 0;//創(chuàng)建一個時間數(shù)靜態(tài)變量
if(Get_Time_Interval(HAL_GetTick(),Static_Time,1000)==1)
{
Static_Time = HAL_GetTick();
printf("工欲善其事,必先利其器。");
}
}
將此函數(shù)在主函數(shù)中調用即可,具體如下:
運行結果如下:文章來源:http://www.zghlxwxcb.cn/news/detail-594850.html
關于串口通信實驗的詳細信息,請看這篇文章:【HAL庫】STM32CubeMX開發(fā)----STM32F407----Uart串口通信實驗文章來源地址http://www.zghlxwxcb.cn/news/detail-594850.html
到了這里,關于【HAL庫】STM32CubeMX開發(fā)----非阻塞延時實驗----SysTick(滴答定時器)中斷的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!