第一章 介紹滴答定時器的章節
滴答定時器和普通的定時器功能其實差不多,都是定時器;滴答定時器是24位的,單次計時的時間更加長,平時滴答定時器主要作為系統心跳使用。 比如:RTOS、UCOS實時操作系統的心跳值、LWIP、UIP網絡協議棧的心跳值等等。 如果項目里沒有操作系統這些系統庫,可以將滴答定時器用來作為延時函數的時間基準,方便給項目提供精確的延時;下面介紹了滴答定時器的基本使用之后,也會介紹滴答定時器作為延時函數的封裝方法,提供高精度的延時函數。
STM32F407參考手冊中第10章介紹了滴答定時器的校準值。
M4 權威指南介紹滴答定時器的章節,M3 權威指南中與M4 權威指南中的介紹一樣。
第二章 滴答定時器的示例代碼
在sys.c文件中增加滴答定時器的代碼,測試定時效果
下面的例子代碼是演示滴答定時器的使用效果,直接設置了一個固定的超時時間,時間到達之后就會進入到中斷,改變LED狀態。
/*
函數功能:滴答時鐘初始化配置
注意:SysTick->LOAD是一個24位的寄存器,單次最大延時時間為894.7848ms
*/
void SysTickInit(void)
{
SysTick->CTRL&=~(1<<2); //選擇外部時鐘源
SysTick->CTRL|=1<<1; //開啟中斷
SysTick->LOAD=18750*800;//重裝載寄存器,最大24位,最大值:16777215
SysTick->VAL=0; //清除CNT計數值
SysTick->CTRL|=1<<0; //SysTick 定時器的使能位
}
/*
函數功能:滴答時鐘中斷服務函數
*/
void SysTick_Handler(void)
{
LED0=!LED0;
LED1=!LED1;
}
復制代碼
第三章 使用滴答定時器編寫延時函數
3.1 在delay.c文件增加以下代碼
/*
函數功能:延時函數初始化
*/
void DelayInit(void)
{
SysTick->CTRL&=~(1<<2); //選擇外部時鐘源
SysTick->CTRL&=~(1<<1); //關閉中斷
}
/*
函數功能:延時毫秒的函數
函數參數:毫秒的時間
*/
void DelayMs(u32 time)
{
u32 stat;
SysTick->LOAD=18750*time; //重裝載寄存器,最大24位,最大值:16777215
SysTick->VAL=0; //清除CNT計數值
SysTick->CTRL|=1<<0; //SysTick 定時器的使能位
do
{
stat=SysTick->CTRL; //獲取狀態位
}while((!(stat&1<<16))&&(stat&1<<0));
SysTick->CTRL=0x0;
}
/*
函數功能:延時微秒的函數
函數參數:毫秒的時間
*/
void DelayUs(u32 time)
{
u32 stat;
SysTick->LOAD=18.750*time; //重裝載寄存器,最大24位,最大值:16777215
SysTick->VAL=0; //清除CNT計數值
SysTick->CTRL|=1<<0; //SysTick 定時器的使能位
do
{
stat=SysTick->CTRL; //獲取狀態位
}while((!(stat&1<<16))&&(stat&1<<0));
SysTick->CTRL=0x0;
}
復制代碼
3.2 閃光燈示例
在主函數里加上邏輯代碼,使用剛才編寫的延時函數完成延時,實現閃光燈效果。
#include "stm32f4xx.h" // Device header
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include "sys.h"
#include "exti.h"
int main(void)
{
LED_Init();
KEY_Init();
USART1_Init(84,115200);
KEY_EXTI_Init();
while(1)
{
DelayUs(100);
LED0=!LED0;
LED1=!LED1;
}
}
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
定時器
+關注
關注
23文章
3255瀏覽量
115368 -
延時函數
+關注
關注
0文章
25瀏覽量
10048 -
STM32F407
+關注
關注
15文章
188瀏覽量
29651
發布評論請先 登錄
相關推薦
stm32f407定時器
stm32f407 定時器 用的APB1 APB2 及 定時器頻率 上午想要用Timer10做相對精確的延時功能,但是用示波器發現實際延時數值總是只有一半,百思不得其解。仔細查閱各處資料結合實際研究后對
發表于 08-06 07:29
【STM32F407開發板用戶手冊】第21章 STM32F407的NVIC中斷分組和配置(重要)
【STM32F407開發板用戶手冊】第21章 STM32F407的NVIC中斷分組和配置(重要)
發表于 12-04 13:51
?21次下載
STM32F407入門開發: 串口配置
STM32F407 的串口資源非常豐富,功能也很強勁。 STM32F407 最多可提供 6 路串口,有分數波特率發生器、支持同步單線通信和半雙工單線通訊、支持 LIN、 支持調制解調器
評論