0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32F407入门开发: 滴答定时器配置

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2022-05-30 09:17 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

第一章 介绍滴答定时器的章节

滴答定时器和普通的定时器功能其实差不多,都是定时器;滴答定时器是24位的,单次计时的时间更加长,平时滴答定时器主要作为系统心跳使用。 比如:RTOSUCOS实时操作系统的心跳值、LWIP、UIP网络协议栈的心跳值等等。 如果项目里没有操作系统这些系统库,可以将滴答定时器用来作为延时函数的时间基准,方便给项目提供精确的延时;下面介绍了滴答定时器的基本使用之后,也会介绍滴答定时器作为延时函数的封装方法,提供高精度的延时函数。

STM32F407参考手册中第10章介绍了滴答定时器的校准值。

M4 权威指南介绍滴答定时器的章节,M3 权威指南中与M4 权威指南中的介绍一样。


第二章 滴答定时器的示例代码

在sys.c文件中增加滴答定时器的代码,测试定时效果

下面的例子代码是演示滴答定时器的使用效果,直接设置了一个固定的超时时间,时间到达之后就会进入到中断,改变LED状态。

/*
函数功能:滴答时钟初始化配置
注意:SysTick->LOAD是一个24位的寄存器,单次最大延时时间为894.7848ms
*/
void SysTickInit(void)
{	
	SysTick->CTRL&=~(1<<2);  //选择外部时钟源	
	SysTick->CTRL|=1<<1;     //开启中断
	SysTick->LOAD=18750*800;//重装载寄存器,最大24位,最大值:16777215
	SysTick->VAL=0; 	     //清除CNT计数值
	SysTick->CTRL|=1<<0;     //SysTick 定时器的使能位
}

/*
函数功能:滴答时钟中断服务函数
*/
void SysTick_Handler(void)
{
  LED0=!LED0;
  LED1=!LED1;
}
复制代码

第三章 使用滴答定时器编写延时函数

3.1 在delay.c文件增加以下代码

/*
函数功能:延时函数初始化
*/
void DelayInit(void)
{
	SysTick->CTRL&=~(1<<2);  //选择外部时钟源	
	SysTick->CTRL&=~(1<<1);  //关闭中断
}


/*
函数功能:延时毫秒的函数
函数参数:毫秒的时间
*/
void DelayMs(u32 time)
{
	u32 stat;
	SysTick->LOAD=18750*time; //重装载寄存器,最大24位,最大值:16777215
	SysTick->VAL=0; 			   //清除CNT计数值
	SysTick->CTRL|=1<<0;     //SysTick 定时器的使能位
	do
	{
           stat=SysTick->CTRL;  //获取状态位
	}while((!(stat&1<<16))&&(stat&1<<0));
	SysTick->CTRL=0x0; 
}


/*
函数功能:延时微秒的函数
函数参数:毫秒的时间
*/
void DelayUs(u32 time)
{
	u32 stat;
	SysTick->LOAD=18.750*time; //重装载寄存器,最大24位,最大值:16777215
	SysTick->VAL=0; 			   //清除CNT计数值
	SysTick->CTRL|=1<<0;     //SysTick 定时器的使能位
	do
	{
			stat=SysTick->CTRL;  //获取状态位
	}while((!(stat&1<<16))&&(stat&1<<0));
	SysTick->CTRL=0x0; 
}
复制代码

3.2 闪光灯示例

在主函数里加上逻辑代码,使用刚才编写的延时函数完成延时,实现闪光灯效果。

#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;
	}
}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6078

    文章

    45602

    浏览量

    674225
  • STM32
    +关注

    关注

    2313

    文章

    11197

    浏览量

    374817
  • 定时器
    +关注

    关注

    23

    文章

    3376

    浏览量

    124765
  • STM32F407
    +关注

    关注

    15

    文章

    189

    浏览量

    31779
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    国产MCU开发工具不输STM32Cube:教你玩转PY32F072高级定时器

    高级定时器一般是芯片中最复杂的定时器,在使用高级定时器输出PWM波时,波形的配置是比较麻烦的,得到想要的波形,需要计算时钟,分频,加载值,对于互补的功能,还要计算死区时间,输出极性等。
    发表于 01-26 10:15

    CW32系统滴答SysTick定时器详解

    存放10mS校准值,该值和MCU相关。 3.操控SysTick定时器 在MDK开发环境中,我们不必要非得去操作每一个寄存,可以通过调用CW函数库中的函数来进行相关的操作。 void
    发表于 01-21 07:20

    LAT1173高精度定时器的同步功能应用笔记

    STM32G474 所含的高精度定时器(HRTIMER)其实包含了多个定时器,多个定时器之间可以单独工作,也可以进行同步,且高精度定时器还能
    发表于 01-11 17:32 0次下载

    LAT1183+高精度定时器中 single-shot 计数模式不工作应用笔记

    客户使用 STM32G474 的高精度定时器,基于 CubeMX 进行外设配置与代码生成,将某个子定时器的计数方式设置为 retriggerable single shot 方式,发现
    发表于 01-11 17:28 0次下载

    滴答定时器放在基本定时器前面就不工作是什么原因?

    有个奇怪现象,滴答定时器放在基本定时器前面为啥就不工作,是因为初始化不对吗?
    发表于 12-08 06:44

    PWM、定时器、SysTick 区别及应用场景

    在单片机和嵌入式开发中,经常会遇到PWM(脉宽调制)、定时器、SysTick(系统滴答定时器)这几个词。很多初学者容易把它们混为一谈,以为都是“定时
    的头像 发表于 11-17 10:53 742次阅读
    PWM、<b class='flag-5'>定时器</b>、SysTick 区别及应用场景

    STM32F407的晶振选型分析

    STM32F407的最佳晶振选项
    的头像 发表于 11-07 12:03 1983次阅读

    与AI探讨简易示波器和频谱仪

    对于追求性价比和足够性能的入门到中级项目,STM32F407 是完全足够且更具成本效益的选择。
    的头像 发表于 10-18 15:35 1040次阅读

    硬件定时器如何配置固定频率?

    需求是:以25.6kHz操作引脚电平,系统主频为160MHZ,STM32F429 按照文档里“HWTIMER 设备”开启了硬件定时器,但只能配置时间,按时间换算我要的这个频率为 39.0625us
    发表于 09-26 07:12

    SysTick系统滴答定时器简介

    SysTick—系统定时器是属于CM33内核中的一个外设,内嵌在NVIC中。系统定时器是一个24bit的向下递减的计数,计数每计数一次的时间为 1/SYSCLK,一般我们设置系统时
    的头像 发表于 09-23 09:50 1858次阅读
    SysTick系统<b class='flag-5'>滴答</b><b class='flag-5'>定时器</b>简介

    定时器同步之并行模式

    板 1.2 软件资源 该 Demo 以 AT32F403A 为例,BSP 版本 AT32F403A_407_Firmware_Library_V2.x.x。 TMR2 作为主定时器,以溢出
    发表于 09-22 09:56

    在rt-thread4.0.2版本stm32f407硬件平台上,使用reboot命令无法重启,会让系统死机的原因?

    我在rt-thread4.0.2版本stm32f407硬件平台上,使用reboot命令无法重启,会让系统死机。 reboot命令默认是调用rt_hw_cpu_reset()
    发表于 09-12 06:08

    STM32H750定时器抓最高30M信息源,定时器能不能配置成100M?

    你好,我们要用 STM32H750 定时器抓最高30M 信息源,定时器能不能配置成100M?超过1M用适波无法看到波形,不知道是哪的问题
    发表于 08-08 06:23

    STM32入门篇之通用定时器彻底研究

    新手教程,含11个例程,全面剖析TIMER STM32定时器功能很强大,学习起来也很费劲儿,本人在这卡了5天才算看明白。写下下面的文字送给后来者,希望能带给你点启发。在此声明,本人也是刚入门
    发表于 08-01 16:51

    stm32f407无法配置定时器2为全部dma怎么解决?

    本人使用定时器2配置为4个通道的dma捕获时,出现stream6和stream7这两个对应的通道无法同时存在,在都配置的情况下,只要这两个对应的通道一接入外部信号,就会出现所有dma无法产生中
    发表于 06-11 06:49