STM32----摸石头过河系列(七)
生活随笔
收集整理的這篇文章主要介紹了
STM32----摸石头过河系列(七)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天練習了32中的SysTick定時器,通常叫做滴答定時器。定時器的作用,用過51的想必都知道。定時器主要用來處理一些周期性的,時間間隔固定的事件。同時定時器也可以用來得到一個事件所耗費的時間。下面來看一下滴答定時器的配置過程:
下面來看看代碼(systick.c):
#include"systick.h"u32 TimeTemp;void SysTick_Init(void) {if(SysTick_Config(SystemCoreClock/1000)){while(1);}SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; }void Delay_ms(u32 nTime) {TimeTemp = nTime;SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;while(TimeTemp != 0); }void TimeTemp_Decrement() {if(TimeTemp != 0){TimeTemp--;} } SysTick_Config(SystemCoreClock/1000)初始化定時器進入中斷的時間間隔。SystemCoreClock/1000表示1ms進入中斷;SystemCoreClock/100000表示1us進入中斷。如果配置成功,跳過if判斷,執行SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;來關閉定時器。
void Delay_ms(u32 nTime) {TimeTemp = nTime;SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;while(TimeTemp != 0); }該函數提供被使用者所調用的延時函數,傳入的參數為延時的時長,單位是毫秒。然后執行SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;用來使能定時器,使定時器開始工作。最后等待設置的時間,已達到延時的目的。
void TimeTemp_Decrement() {if(TimeTemp != 0){TimeTemp--;} }該函數為在中斷中要執行的函數,主要來計數進入中斷幾次,直到設置的時間結束。
下面來看一下主函數(main.c):
#include"led.h" #include"usart.h" #include"systick.h"int main(void) {GPIO_LED_Config();USART1_Config();SysTick_Init();while(1){printf("Turn on the Light!\r\n");LED(ON);Delay_us(5000);printf("Turn off the Light!\r\n");LED(OFF);Delay_us(5000);} }void SysTick_Handler(void) {TimeTemp_Decrement(); }這個定時器的相對來說是比較簡單的,并且它不是外設,它在32的內核之中。比較容易實現簡單的定時任務。
總結
以上是生活随笔為你收集整理的STM32----摸石头过河系列(七)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: github本地文件和远端文件的协同
- 下一篇: 你一定要知道的关于Linux文件目录操作