stm32-系统定时器

SysTick—系统定时有 4 个寄存器,简要介绍如下。在使用 SysTick 产生定时的时候,只需要配置 前三个寄存器,最后一个校准寄存器不需要使用。

1.系统定时器功能框图:

24位的递减计数器,在系统定时器的时钟驱动下,每来一个时钟,递减计数器就减1,当减到0时就会产生一个中断,重装载寄存器就会写入一个值,重新开始递减计数。

2.系统定时器唯一的固件库函数:System Tick Configuration:

uint32_t ticks传入的是重装载寄存器的值

SysTick_LOAD_RELOAD_Msk  是 2^24 的宏定义,计数器的最大值

3.代码

让SysTick产生1秒的定ED亮灭

编程要点:

1-初始化LED相关的GPIO

2-配置SysTick(STK_CTRL寄存器)

3-编写中断服务函数

4-main函数

systick.c: 

#include "systick.h"

//@brief  启动系统滴答定时器 SysTick
//重装载寄存器的值为:180 000 000 / 1000 = 180 000;
//递减寄存器每减1,的时间为: 1 / 180 000 000;
//减1800 000次,需要的时间: 1800 1000 / 180 000 000 = 1ms;
//则:中断一次需要时间为: 1ms;
uint32_t m = 1000;

void SysTick_Init(void)
{
	/* SystemFrequency / 1000    1ms中断一次
	 * SystemFrequency / 100000	 10us中断一次
	 * SystemFrequency / 1000000 1us中断一次
	 */
	if (SysTick_Config(SystemCoreClock/1000)) //传入的数值最多为2^24
	{ 
		/* Capture error */ 
		while (1);
	}
}

systick.h: 

#ifndef _SYSTICK_H
#define _SYSTICK_H
#include "stm32f4xx.h"
#include "core_cm4.h"

void SysTick_Init(void);
void Delay_1ms(uint32_t m);
extern uint32_t m ;



#endif

stm32xxit.c:

extern uint32_t m ;
void SysTick_Handler(void)
{
	m--;
}

main.c:

#include "stm32f4xx.h"                  // Device header
#include "stm32f4xx_gpio.h" 
#include "led_bsp.h"
#include "systick.h"
extern uint32_t m ;
int main(void)
{  
	SysTick_Init( );
	GPIO_Led_Config();
	while(1)
	{
		if(m == 0)
		{
			GPIO_ToggleBits(GPIOH,GPIO_Pin_11);
			m = 1000;
		}
	}
}

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值