历史上的今天
返回首页

历史上的今天

今天是:2024年08月26日(星期一)

正在发生

2021年08月26日 | STM32 SysTick 精准延时 简单分析

2021-08-26 来源:eefocus

在设计软件的时候,有的对时序要求比较严格,但是简单的延时函数又不能准确延时---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


}

推荐阅读

史海拾趣

EMC [ELAN Microelectronics Corp]公司的发展小趣事

随着公司的发展,义隆电子不断加大研发投入,致力于技术创新和产品多元化。公司拥有一支高素质的研发团队,拥有多项自主知识产权和核心技术。通过不断的技术创新和产品升级,义隆电子成功推出了微控制器、个人计算机外设芯片、数字显示器芯片等一系列具有市场竞争力的产品。同时,公司还积极拓展智能型人机接口技术之应用芯片等新兴领域,为未来的发展奠定了坚实的基础。

Brite-Led Optoelectronics Inc公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。Brite-Led深知这一点,始终将品质放在首位。公司建立了严格的质量管理体系,从原材料采购到生产过程中的每一个环节都进行严格把控。同时,公司还投入大量资源用于产品质量检测和改进,确保每一件产品都能达到客户的高标准要求。正是这种对品质的执着追求,使得Brite-Led在市场上赢得了良好的口碑和信誉。

Edsun Laboratories Inc公司的发展小趣事

随着公司规模的扩大和产品线的丰富,ECM Electronics Limited.开始积极拓展市场。公司不仅在国内市场取得了良好的销售业绩,还积极开拓国际市场,将产品出口到多个国家和地区。为了更好地服务全球客户,公司还设立了海外办事处和研发中心,加强与国际市场的联系和合作。通过国际化战略的实施,ECM进一步提升了品牌知名度和市场竞争力。

AAT [Advanced Analog Technology, Inc.]公司的发展小趣事

面对日益严重的环境问题,ECM Electronics Limited.积极响应国家节能减排的号召,将绿色发展和可持续发展作为企业的重要战略。公司采用环保材料和节能技术,降低产品能耗和排放。同时,公司还积极参与环保公益活动,推动行业绿色发展。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

谷峰(GOFORD)公司的发展小趣事

GStek登丰微电子成立于2007年,正值中国电子产业快速发展之际。公司自创立之初便明确了其在电源管理领域的战略定位,专注于为市场提供高效、可靠的电源管理解决方案。通过深入研究市场需求和技术趋势,GStek迅速开发出包括线性稳压IC、PWM控制IC、电池保护IC及照明装置驱动IC在内的核心产品,奠定了其在行业内的技术基础。这一时期,GStek积极与国内外知名企业建立合作关系,不断拓展其市场份额。

芯海科技(CHIPSEA)公司的发展小趣事

随着市场需求的不断升级,芯海科技在ADC芯片的基础上,开始研发自主知识产权的8位MCU(微控制器)内核。经过数年的努力,公司成功将8位MCU内核技术应用于消费类电子产品市场,如小家电、电子玩具等。这一技术的突破进一步巩固了芯海科技在电子行业的地位,并为其后续发展提供了有力支撑。

问答坊 | AI 解惑

想请高人指点一下

我今年三十四岁了,在电工行业工作,想转业学习电子工程和单片机应用,请问这个年龄转业还能找到相关的工作吗?…

查看全部问答>

我现在做.net开发,如果从事单片机或嵌入式开发,学哪个有比较好点?需要多长时间可以上手!用什么平台最好!

各位朋友,本人计算机应届生.我现在做.net开发, 不过我想问下如果从事单片机,需要多长时间可以上手?…

查看全部问答>

[请问]使用ADC时关于引脚上电压问题

小弟初用STM32F103 64管脚的ADC功能 参考Example1中 使用DMA传输转换后的数据 通过PC.01(Channel11)进行采集来自外部AD键盘的电压 键盘的电压在未接PC.01时,一切正常!但是一旦接了PC.01后 就不正常了,变得非线性;但是ADC仍然可以采样电 ...…

查看全部问答>

角速度传感器

本帖最后由 paulhyde 于 2014-9-15 04:03 编辑 对于2011电子大赛很有价值,欢迎下载  …

查看全部问答>

【团购】ALIENTEK 战舰STM32F103ZET6开发板+2.8液晶

团购价格:前10名购买者418元。                 第11至20名购买者428元。                 第21之后购买者448元。 注:本款开发板的淘 ...…

查看全部问答>

逻辑分析仪DIY硬件idea

这个帖子仅仅是一个idea,不代表逻辑分析仪最终的实现思路。希望大家提出宝贵建议。 既然要做逻辑分析仪,就会涉及到硬件设计,在坛子里大多数坛友都是都是抱着学习,分享的心态的。 做一个假设,我们逻辑分析仪直接设计成一块板子。 大家在上面 ...…

查看全部问答>

FPGA发展方向!

各位FPGA前辈,搞FPGA往哪方面发展比较有前途?求各位指点迷津!…

查看全部问答>

EEWORLD大学堂----中断及工作模式

中断及工作模式:https://training.eeworld.com.cn/course/367…

查看全部问答>

请问IIs和IIC有什么区别?

请问IIs和IIC有什么区别?…

查看全部问答>