第一章 介紹滴答定時(shí)器的章節(jié)
滴答定時(shí)器和普通的定時(shí)器功能其實(shí)差不多,都是定時(shí)器;滴答定時(shí)器是24位的,單次計(jì)時(shí)的時(shí)間更加長(zhǎng),平時(shí)滴答定時(shí)器主要作為系統(tǒng)心跳使用。 比如:RTOS、UCOS實(shí)時(shí)操作系統(tǒng)的心跳值、LWIP、UIP網(wǎng)絡(luò)協(xié)議棧的心跳值等等。 如果項(xiàng)目里沒(méi)有操作系統(tǒng)這些系統(tǒng)庫(kù),可以將滴答定時(shí)器用來(lái)作為延時(shí)函數(shù)的時(shí)間基準(zhǔn),方便給項(xiàng)目提供精確的延時(shí);下面介紹了滴答定時(shí)器的基本使用之后,也會(huì)介紹滴答定時(shí)器作為延時(shí)函數(shù)的封裝方法,提供高精度的延時(shí)函數(shù)。
STM32F407參考手冊(cè)中第10章介紹了滴答定時(shí)器的校準(zhǔn)值。
M4 權(quán)威指南介紹滴答定時(shí)器的章節(jié),M3 權(quán)威指南中與M4 權(quán)威指南中的介紹一樣。

第二章 滴答定時(shí)器的示例代碼
在sys.c文件中增加滴答定時(shí)器的代碼,測(cè)試定時(shí)效果
下面的例子代碼是演示滴答定時(shí)器的使用效果,直接設(shè)置了一個(gè)固定的超時(shí)時(shí)間,時(shí)間到達(dá)之后就會(huì)進(jìn)入到中斷,改變LED狀態(tài)。
/*
函數(shù)功能:滴答時(shí)鐘初始化配置
注意:SysTick->LOAD是一個(gè)24位的寄存器,單次最大延時(shí)時(shí)間為894.7848ms
*/
void SysTickInit(void)
{
SysTick->CTRL&=~(1<<2); //選擇外部時(shí)鐘源
SysTick->CTRL|=1<<1; //開(kāi)啟中斷
SysTick->LOAD=18750*800;//重裝載寄存器,最大24位,最大值:16777215
SysTick->VAL=0; //清除CNT計(jì)數(shù)值
SysTick->CTRL|=1<<0; //SysTick 定時(shí)器的使能位
}
/*
函數(shù)功能:滴答時(shí)鐘中斷服務(wù)函數(shù)
*/
void SysTick_Handler(void)
{
LED0=!LED0;
LED1=!LED1;
}
復(fù)制代碼
第三章 使用滴答定時(shí)器編寫(xiě)延時(shí)函數(shù)
3.1 在delay.c文件增加以下代碼
/*
函數(shù)功能:延時(shí)函數(shù)初始化
*/
void DelayInit(void)
{
SysTick->CTRL&=~(1<<2); //選擇外部時(shí)鐘源
SysTick->CTRL&=~(1<<1); //關(guān)閉中斷
}
/*
函數(shù)功能:延時(shí)毫秒的函數(shù)
函數(shù)參數(shù):毫秒的時(shí)間
*/
void DelayMs(u32 time)
{
u32 stat;
SysTick->LOAD=18750*time; //重裝載寄存器,最大24位,最大值:16777215
SysTick->VAL=0; //清除CNT計(jì)數(shù)值
SysTick->CTRL|=1<<0; //SysTick 定時(shí)器的使能位
do
{
stat=SysTick->CTRL; //獲取狀態(tài)位
}while((!(stat&1<<16))&&(stat&1<<0));
SysTick->CTRL=0x0;
}
/*
函數(shù)功能:延時(shí)微秒的函數(shù)
函數(shù)參數(shù):毫秒的時(shí)間
*/
void DelayUs(u32 time)
{
u32 stat;
SysTick->LOAD=18.750*time; //重裝載寄存器,最大24位,最大值:16777215
SysTick->VAL=0; //清除CNT計(jì)數(shù)值
SysTick->CTRL|=1<<0; //SysTick 定時(shí)器的使能位
do
{
stat=SysTick->CTRL; //獲取狀態(tài)位
}while((!(stat&1<<16))&&(stat&1<<0));
SysTick->CTRL=0x0;
}
復(fù)制代碼
3.2 閃光燈示例
在主函數(shù)里加上邏輯代碼,使用剛才編寫(xiě)的延時(shí)函數(shù)完成延時(shí),實(shí)現(xiàn)閃光燈效果。
#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;
}
}
-
單片機(jī)
+關(guān)注
關(guān)注
6071文章
45255瀏覽量
660015 -
STM32
+關(guān)注
關(guān)注
2301文章
11071瀏覽量
369339 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3347瀏覽量
120941 -
STM32F407
+關(guān)注
關(guān)注
15文章
188瀏覽量
31167
發(fā)布評(píng)論請(qǐng)先 登錄
硬件定時(shí)器如何配置固定頻率?
SysTick系統(tǒng)滴答定時(shí)器簡(jiǎn)介

stm32f407無(wú)法配置定時(shí)器2為全部dma怎么解決?
stm32f407這個(gè)STM32_RCC_PERIPHCLK_SDMMC是哪里定義的?
STM32F407的高速USB,采用的是虛擬串口方式,VCP驅(qū)動(dòng)有l(wèi)inux系統(tǒng)的嗎?
求一份在STM32F407的CS1239的驅(qū)動(dòng)程序
STM32F407輸出的2片ADC的轉(zhuǎn)換值與輸入ADC的電壓值相同了,不知道是何原因?
STM32F405xx和STM32F407xx微控制器數(shù)據(jù)手冊(cè)
STM32F407和ADS8684進(jìn)行SPI通信,寄存器怎么配置?
STM32 F407無(wú)傳感器控制PLL
STM32F407可以同時(shí)輸出四路信號(hào)嗎?
STM32F407 MCU使用SD NAND?不斷電初始化失效解決方案

詳解CKS32F107xx系列的定時(shí)器同步功能

評(píng)論