系统滴答定时器:属于内核的定时器,用于控制整个系统的运行节拍,STM32F429是180MHZ的,STM32F103最高是72MHZ。此处主要是编写控制时钟进行延时的程序。
工作流程:利用systick定时器为递减计数器,设定初值并使能它后,它会每1个系统时钟周期计数器减,计数到 0时,SysTick计数器自动重装初值并继续计数,同时触发中断。只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息。
SystemInit() 这个函数可以让主频运行到180M,可以把它作为systick的时钟源。
计数方式:24bit向下递减的计数器
系统频率:180MHZ
实现功能:延时
主要寄存器:
SysTick->CTRL, --控制和状态寄存器
SysTick->LOAD, --重装载寄存器
SysTick->VAL, --当前值寄存器
SysTick->CALIB, --校准值寄存器
bsp_systick.c
#include "stm32f4xx.h"
void SysTick_Init(void);
void Delay_us(__IO u32 nTime);
static __IO u32 TimingDelay;
/*系统滴答定时器初始化 */
void SysTick_Init(void)
{
/* SystemFrequency / 1000 1ms中断一次
* SystemFrequency / 100000 10us中断一次
* SystemFrequency / 1000000 1us中断一次
*/
if (SysTick_Config(SystemCoreClock / 100000))
{
/* Capture error */
while (1);
}
}
//层级调用
// 180 000000 / 10 0000 =1800
//1800* 1/180 = 10us
//10us*10 0000 = 1000ms = 1s,即传入10 0000就是延时1S时间。
/**
* @brief us延时程序,10us为一个单位
* @param
* @arg nTime: Delay_us( 10 ) 则实现的延时为 10 * 10us = 100us
* @retval 无
*/
void Delay_us(__IO u32 nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
/**
* @brief 获取节拍程序 *
*函数名称:TimingDelay_Decrement
*功能描述:中断里调用此函数,即没发生一次中断,此函数被调用,此函数里的变量
TimingDelay 相当于减法计数器
* @attention 在 SysTick 中断函数 SysTick_Handler()调用
*/
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
在stm32f4xx_it.c系统中断函数调用TimingDelay_Decrement();
/* @brief This function handles SysTick Handler.*/
void SysTick_Handler(void)
{
TimingDelay_Decrement();
}
main.c,其他灯的初始化函数课参考之前的文章:
在实验设计部分的bsp_led.h
#include "stm32f4xx.h"
#include "bsp_led.h"
#include "bsp_systick.h"
/* @brief 主函数*/
int main(void)
{
/* LED 端口初始化 */
LED_GPIO_Config();
/*系统滴答定时器初始化*/
SysTick_Init();
/* 控制LED灯 */
while (1)
{
LED_RED;
Delay_us(100000);//1s延时
LED_GREEN;
Delay_us(100000);
LED_BLUE;
Delay_us(100000);
}
}
上一篇:STM32看门狗--窗口看门狗
下一篇:STM32F429--中断应用概览
推荐阅读最新更新时间:2024-11-12 11:51
设计资源 培训 开发板 精华推荐
- C8051F800DK、8051 MCU 开发套件旨在用作 C8051F333 微控制器的开发平台
- 【天津工业大学】差分放大电路测试仪 荀萌
- MTRCKTSBNZVM128: 采用S12 MagniV S12ZVM的3相无传感器BLDC开发套件
- #第六届立创电赛#离线语音 美队空伴
- 基于ALTAIR04-900的、用于电表和电力线调制解调器的电源
- 使用 MaxLinear, Inc 的 SP828EK 的参考设计
- 使用 NXP Semiconductors 的 MMPF0100 的参考设计
- 用于光网络的光收发器
- AM437x 使用 LPDDR2 的低功耗挂起模式
- MC-146,LPCxxxx微控制器32.768kHz晶振单元的振荡电路及选型指南