STM32 SysTick 精准延时 简单分析

发布者:TranquilOasis最新更新时间:2021-10-20 来源: eefocus关键字:STM32  SysTick  精准延时 手机看文章 扫描二维码
随时随地手机看文章

在设计软件的时候,有的对时序要求比较严格,但是简单的延时函数又不能准确延时---STM32中有一个系统滴答时钟是不错的配置---


----第一部分是---向滴答时钟寄存器写初值,也就是要根据系统频率来递减----然后为0 则产生中断


void SysTick_Init(uint32_t a)   //a-us

{

/* SystemFrequency / 1000          1ms中断一次

* SystemFrequency / 100000       10us中断一次

* SystemFrequency / 1000000     1us中断一次

*/



// if (SysTick_Config(SystemCoreClock / 1000000*a))//写初值---- ST3.0.0库版本

if (SysTick_Config(SystemCoreClock / 1000000*a))  //写初值----ST3.5.0库版本

        while (1);   //写初值失败---则进入while死循环

}

        SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;  //关闭系统滴答时钟

}

----第二部分是---延时函数----

void Delay_us(__IO u32 nTime)

        TimingDelay = nTime;//多少个基础节拍

        SysTick_Init(1);  //1us

        SysTick->CTRL |=  SysTick_CTRL_ENABLE_Msk;  //使能系统滴答时钟---开始计时


        while(TimingDelay != 0);  //定时节拍结束

}


void Delay_ms(__IO u32 nTime)

        TimingDelay = nTime;//多少个基础节拍

        SysTick_Init(1000);  //1ms

        SysTick->CTRL |=  SysTick_CTRL_ENABLE_Msk;  //使能系统滴答时钟---开始计时


        while(TimingDelay != 0);  //定时节拍结束

}


---第三部分是---滴答时钟的中断函数---


void TimingDelay_Decrement(void)   //节拍递减---在中断中使用

{

        if (TimingDelay != 0x00)

            TimingDelay--;

}


void SysTick_Handler(void)  //---中断---

{

        TimingDelay_Decrement(); //进一次中断递减一次

}


---第四部分---主函数---


int main(void)

        SysTick_Init();   //初始化

        Delay_us(10000);     // 10000 * 10us = 100ms


}

关键字:STM32  SysTick  精准延时 引用地址:STM32 SysTick 精准延时 简单分析

上一篇:STM32 MDK 工程创建 图解步骤
下一篇:STM32 SPI NRF24L01复习整理

推荐阅读最新更新时间:2024-11-23 12:13

STM32标准库编程之LED闪烁
【1】工程截图 【2】代码解读 有了前面文章的基础,工程建立我不再赘述,我们来看主函数所在的源文件(这里完全可以把开头的宏定义和函数声明放到同名的头文件中)。 这里我只引用了delay.h和sys.h 可以看到这三个文件放到一个文件夹里,说明他们三个比较特殊,这里就详细介绍一下(辅助编程文件夹里的开发指南里说的很详细)。SYSTEM 文件夹下包含了 delay、 sys、 usart 等三个文件夹。分别包含了 delay.c、 sys.c、 usart.c及其头文件。通过这 3 个 c 文件,可以快速的给任何一款 STM32F1 构建最基本的框架。使用起来是很方便的。 delay 延时的编程思想: CM3 内核的处理
[单片机]
<font color='red'>STM32</font>标准库编程之LED闪烁
常规放大电路和差分放大电路原理分析
0、小叙闲言 有一个两相四线的步进电机,需测量其A、B两相的电流大小,电机线圈的电阻为0.6Ω,电感为2.2mH。 打算在A、B相各串接一个0.1Ω的采样电阻,然后通过放大电路,送到单片机采样(STM32,12位AD采样),放大的电压值是最大应为3v。 电路如下。 我在这里讨论其中的采样放大电路。 很多东西平时在书本上学到烂熟,但真正在实战时,还是碰到了不少问题。 纸上得来终觉浅,绝知此事要躬行。 因此,在这里总结一下,供自己学习之用,或许也可给大家一点点帮助。 图1 步进电机系统结构图 1、常规放大电路 这里暂时不讨论放大电路的工作原理,直接使用放大器的虚短(短路)和虚断(断路)性质来分析这一类电路,之所以在前面加个虚字,是
[单片机]
常规放大电路和差分放大电路原理分析
《如何制作STM32开发板》之串口
一说到串口,大家应该在脑海中出现下面这个画面就对了: 看到没有,这就是正儿八经的串口。在现在的工控机上,和以前的家用电脑上,都有串口,现在的家用电脑上,已经没有串口了。(千万不要把VGA口看成串口,VGA口是15针,串口是9针) 我们要搞单片机,就必须会用串口。所以,开发板上,就必须要有学习串口的功能。 串口的硬件应用,现在最多的有3种: USB转TTL串口 232串口 485通信 在我们的开发板上,把这3种功能都实现。 一、USB转TTL串口 这个功能,在讲程序下载方式的那一篇文章已经讲过了。STM32VET6有5个串口,但是只有串口1可以下载程序,所以我们默认把USART1与CH340G转成的RXD和TXD放到一起
[单片机]
《如何制作<font color='red'>STM32</font>开发板》之串口
基于STM32嵌入式系统的智能控制网络终端设计
  智能网络终端是实现智能化管理的嵌入式终端设备。通常具有安全门禁系统和自动化控制的基本功能。本文重点介绍基于 STM32 的智能嵌入式终端的网络控制功能的设计和实现。    1智能网络通信实现方案   将 嵌入式系统 与Internet连接起来实现远距离信息获取和控制功能的本质是 嵌入式系统 本身能够实现TCP/IP网络通信协议。该协议的解决方案总体上可分为两大类。第一类是直接在嵌入式设备上实现TCP/IP,使之直接连上Internet。这实质上是由MCU及内部固化TCP/IP协议的芯片组成应用系统的核心,MCU可以直接拨号上网,这种方法的硬件电路相对简单,也不需要中间环节的支持。但是由于使用了TCP/IP协议芯片,因此需要大
[单片机]
基于<font color='red'>STM32</font>嵌入式系统的智能控制网络终端设计
如何使用STM32实现systick的精确延时
SYSTICK寄存器初始化 void SysTick_Configuration(void) { if (SysTick_Config(SystemCoreClock / 100)) { while (1); } NVIC_SetPriority(SysTick_IRQn, 0x0); } SysTick_Config默认时钟为SysTick_CLKSource_HCLK,所以在这之前使用SysTick_CLKSourceConfig()选择系统时钟不会改变systick的时钟 static __INLINE uint32_t SysTick_Config(uint32_t ticks) { if (ticks 》 Sys
[单片机]
基于LTC6804的电池管理系统设计
简介:本文基于该芯片,辅以热电阻式温度传感器实现多路的温度采集,配合Ⅱ公司STM32F103单片机实现电池管理系统模块单个模块实现24个单体电池的充放电电压监控(两片LTC6804)和16路的温度采集,支持can总线。 LTC6804是Lmear公司2012年发布的第三代多电池组监视器,可几乎同时测量多达121、串接电池的电压,并具有更低的总测量误差相比LTC6803测量精度有了不小的提升,本文基于该芯片,辅以热电阻式温度传感器实现多路的温度采集,配合Ⅱ公司STM32F103单片机实现电池管理系统模块单个模块实现24个单体电池的充放电电压监控(两片LTC6804)和16路的温度采集,支持can总线。 本文分电压温度采集和控
[单片机]
基于LTC6804的电池管理系统设计
STM32 TFTLCD原理与驱动与指令介绍
一,TFTLCD简介 TFTLCD : 薄膜晶体管液晶显示器 在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT) 克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,提高图像质量 TFTLCD优点: 亮度好,对比度高,层次感强,颜色鲜艳,是目前最主流的LCD显示器 广泛用于电视,手机,电脑,平板等各种的电子产品 二,ALINETEK 2.8寸 TFTLCD模块介绍 240*320分辨率 16位真彩显示(65536色) 自带电阻触摸屏 自带背光电路 三,ALINETEK 2.8寸 TFTLCD模块原理图 1,2.8寸LCD引脚 2,TFTLCD 为对外接口,引出2*17排针 3,电阻触摸
[单片机]
<font color='red'>STM32</font> TFTLCD原理与驱动与指令介绍

推荐帖子

TI秀+我买的开发板
本帖最后由led2015于2014-2-2323:56编辑 这两块是我在淘宝花了400块买的DSP2812开发板和M3LM3S6911开发板,都是用在自学上的。这两块板子都是自学开发的基础,值得研究一下的。DSP2812自身具有12bitAD转换器,0~3.3v输入范围。开发板一般会有相关例程。配置EVA中相关的ADC模块控制寄存器,16选1路为模拟信号输入端,设置好外设时钟,启动转换,读取结果寄存器里的值即可。一定要下载最新的FLASH烧写插件哦。而M3LM3s69
led2015 微控制器 MCU
600MA低压差LDO AP1735 AP6256
安崴提供低压差600MA输出电流的LDO,AP1735做到600MA/350MV,AP6256做到600MA/500MV需要样品请联系13537795709梁生,QQ291426765邮箱:LY158@TOM.COM600MA低压差LDOAP1735AP6256
LY158 电源技术
求助:读取flash问题
我用的单片机是MSP430F149,我想把保存在flash中的数据读取出来,请问有什么办法?谢谢求助:读取flash问题没烧熔丝可以读出,使用仿真器或编程器都可以读出。没烧断熔丝可以用JTAG/BSL读出,如果烧断了,只能用BSL了,并且需要提供密码文件。不好意思,不太明白。我是将现场采集到的数据存到flash中,回到公司再把flash中的数据读到电脑中。问题是我需要重新Debug才能将通过JTAG查看Flash,可是重新Debug会造成Flash中的数据被冲掉啊。请高手详细告诉我办法可
shenqibuhui 微控制器 MCU
电子仿真软件MultiSIM使用技巧
我们都知道,电子仿真软件MultiSIM最初由加拿大的IIT公司推出,从Multisim2001开始到后来的Multisim7和Multisim8止;Multisim9到目前的Multisim10版本,已改由美国国家仪器公司(NI公司)所推出。Multisim版本每次升级,软件功能都有相应的提高,但它们的操作方法和电子电路虚拟仿真这一块内容几乎没有太大的变化。也就是说,读者只要掌握和学会了Multisim7软件的使用方法,其它的版本也就触类旁通了。软件更新快,读者也不一定要一味去赶时髦
qwqwqw2088 电源技术
模拟,无处不在
网上一篇写的不错的文章,转来给大家看看关键字:模拟电路经常翻阅各种电子行业的平面媒体,每每看见AnalogDevice公司的广告,在广告画面的下方,都会有这么一个广告词“Analogiseverywhere”(见图1.1)。翻译成中文,就是本文的标题“模拟,无处不在”。下载(201.33KB)2011-3-1120:12我想,AnalogDevice公司想通过这个广告词想表达这样几层意思:1.1任何电路都会有可能用到模拟器件我虽然和Ana
张无忌1987 模拟电子
瑞芯微RK3568鸿蒙开发板OpenHarmony系统修改cfg文件权限方法,深圳触觉智能鸿蒙硬件
本文适用OpenHarmony开源鸿蒙系统,本次使用的是深圳触觉智能专注研发生产的鸿蒙开发板,搭载瑞芯微RK3568芯片。一、查看文件路径首先init.rkxxx.cfg文件在系统路径/vendor/etc/,如下图所示:二、文件传至本地将需要需要修改的cfg文件从文件系统中拉下来放在本地目录,命令是:hdcfilerecv'系统路径''本地文件路径',如下
Industio_触觉智能 ARM技术
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved