STM32系统定时器SysTick(只能向下递减)延时闪烁灯
生活随笔
收集整理的這篇文章主要介紹了
STM32系统定时器SysTick(只能向下递减)延时闪烁灯
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考:stm32 系統定時器 SysTick
作者:點燈小哥
發布時間: 2021-03-10 13:46:00
網址:https://blog.csdn.net/weixin_46016743/article/details/114633245
參考:stm32之系統定時器
作者:打醬油的;
發布時間: 2021-04-13 20:11:32
網址:https://blog.csdn.net/weixin_46098612/article/details/115669473
目錄
- 系統定時器原理(只能向下遞減)
- 定時時間的計算方法(1ms、1us)
- SysTick相關寄存器
- SysTick結構體(里面寄存器)
- SysTick固件庫函數
- SysTick中斷優先級(通過寄存器設置)
- SysTick編寫us、ms延時函數閃爍燈
系統定時器原理(只能向下遞減)
定時時間的計算方法(1ms、1us)
SysTick相關寄存器
這是寄存器里面特殊的位:
SysTick結構體(里面寄存器)
在內核寄存器core_cm3.h里面
注:上面第三個是當前寄存器的值,用到最多的是前三個結構體成員。
SysTick固件庫函數
在core_cm3.h最下面找
ticks值設置為72則延時1us,設置為720000延時1ms。
SysTick中斷優先級(通過寄存器設置)
SysTick編寫us、ms延時函數閃爍燈
SysTick.h
#include "stm32f10x.h" void ms_delay(uint32_t ms); void us_delay(uint32_t us);SysTick.c
#include "stm32f10x.h" // Device header #include "SysTick.h"void ms_delay(uint32_t ms)//毫秒定時器 { uint32_t i;//次數SysTick_Config(72000);//SysTick固件庫函數 前面有講 本質就是給重裝載 Reload寄存器賦值//我理解的有點像多線程 上面線程獨立于CPU資源不斷重復進行重裝載定時 下面是CPU資源處理的進程進行判斷for(i=0;i<ms;i++) //定時器(計數器)一個循環就是1ms 循環多少次就是多少毫秒{//系統定時器只能遞減 判斷是否減到0就可以了 一旦減到0則CTRL寄存器第16位為1 如下圖所示:while( !( (SysTick->CTRL) &(1<<16) ) );//}SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;//失能 置位回去 }void us_delay(uint32_t us)//微秒定時器 { uint32_t i;SysTick_Config(72);for(i=0;i<us;i++){while( !( (SysTick->CTRL) &(1<<16) ) );}SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; }
下面是CTRL寄存器里面相應的位:
main.c
#include "stm32f10x.h" // Device header #include "usart.h" #include "led.h" #include "tim.h" #include "motor.h" #include "SysTick.h"//添加頭文件路徑void delay(uint16_t time) {uint16_t i = 0;while(time--){i=12000;while(i--);} }int main(void) { LED_Init();GPIO_SetBits( GPIOC, GPIO_Pin_13);while(1){GPIO_ResetBits( GPIOC, GPIO_Pin_13);ms_delay(500);GPIO_SetBits( GPIOC, GPIO_Pin_13);ms_delay(500); } }總結
以上是生活随笔為你收集整理的STM32系统定时器SysTick(只能向下递减)延时闪烁灯的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Shallow Copy Deep C
- 下一篇: 前端基础练习项目——网页版扫雷