历史上的今天
返回首页

历史上的今天

今天是:2024年12月25日(星期三)

正在发生

2018年12月25日 | stm32f103 学习笔记 —— 05 使用SysTick实现硬件延时

2018-12-25 来源:eefocus

SysTick定时时间计算(当系统时钟为72M时)

t =重载*(1 / Clk)


Clk = 72M时,t =(72)*(1 / 72M)= 1 us


Clk = 72M时,t =(72000)*(1 / 72M)= 1ms


1s = 1000ms = 1000 000 us = 100 000 000 ns


当系统定时器中断与外设中断进行优先级比较时,只需要把内核外设的中断优先级的四个位按照外设的中断优先级来分组解析即可,即人为的分出抢占优先级和子优先级

SysTick_Config()函数

//这个固件库函数在core_com3.h中

静态__INLINE uint32_t SysTick_Config(uint32_t ticks)


//重载寄存器为24位,最大值为2 ^ 24

  如果(滴答> SysTick_LOAD_RELOAD_Msk)返回(1);           

  

//配置重装寄存器的初始值

        SysTick-> LOAD =(ticks&SysTick_LOAD_RELOAD_Msk) -  1;      

  

//配置中断优先级为15,优先级为最低

NVIC_SetPriority(SysTick_IRQn,(1 << __ NVIC_PRIO_BITS) -  1);

  

//配置计数器计数器的值

SysTick-> VAL = 0;   

  //配置系统定时器的时钟为72M

  //使能中断

  //使能系统定时器

  SysTick-> CTRL = SysTick_CTRL_CLKSOURCE_Msk | 

                   SysTick_CTRL_TICKINT_Msk | 

                   SysTick_CTRL_ENABLE_Msk;                   

  返回(0);                                                 

}

延时函数(软件检测 - 判断计数器的数值)

void SysTick_Delay_us(uint32_t us)

{

我uint32_t我;

SysTick_Config(72);

对于(I = 0; I <我们;我++)

{

while(!((SysTick-> CTRL)&(1 << 16)));

}

SysTick-> CTRL&=〜SysTick_CTRL_ENABLE_Msk;

}

延时函数(利用中断服务函数)

静态__IO u32 TimingDelay;

 

/ **

  * @brief启动系统滴答定时器SysTick

  * @param无

  * @retval无

  * /

void SysTick_Init(void)

{

/ * SystemFre * quency / 1000 1ms中断一次

* SystemFrequency / 100000 10us中断一次

* SystemFrequency / 1000000 1us中断一次

* /

//如果(SysTick_Config(SystemFrequency / 100000))// ST3.0.0库版本

如果(SysTick_Config(SystemCoreClock / 100000))// ST3.5.0库版本

/ *捕捉错误* / 

而(1);

}

}

/ **

  * @brief us延时程序,10us为一个单位

  * @参数  

  * @arg nTime:Delay_us(1)则实现的延时为1 * 10us = 10us

  * @retval无

  * /

void Delay_us(__ IO u32 nTime)

TimingDelay = nTime;

//使能滴答定时器  

SysTick-> CTRL | = SysTick_CTRL_ENABLE_Msk;

while(TimingDelay!= 0);

}

/ **

  * @brief获取节拍程序

  * @param无

  * @retval无

  * @注意在SysTick中断函数SysTick_Handler()调用

  * /

void TimingDelay_Decrement(void)

{

如果(TimingDelay!= 0x00)

TimingDelay--;

}

}


推荐阅读

史海拾趣

EiKO Global LLC公司的发展小趣事

随着智能家居和物联网技术的兴起,EiKO开始积极探索智能照明系统的研发与应用。公司投入大量研发资源,将传统照明产品与智能控制技术相结合,推出了具有远程控制、定时开关、色温调节等功能的智能照明系统。

这些智能照明系统不仅提高了用户的使用体验,还为用户带来了更加便捷和智能的生活方式。例如,用户可以通过手机APP远程控制家中的照明设备,实现定时开关和色温调节等功能;同时,智能照明系统还可以与智能家居系统相连接,实现与其他智能设备的联动控制。

晨晶电子(Chenjing Electronics)公司的发展小趣事

晨晶电子始终将品质放在首位,坚持以客户为中心的服务理念。公司建立了严格的质量管理体系,从原材料采购到生产过程控制,再到产品出厂检验,每一个环节都严格把关,确保产品的品质稳定可靠。正是凭借这种对品质的执着追求,晨晶电子赢得了客户的广泛认可和好评,也为企业赢得了良好的口碑。

Crane Connectors公司的发展小趣事

Crane Connectors公司自创立之初,便致力于电子连接器技术的研发与创新。面对激烈的市场竞争,公司不断投入研发资源,推出了一系列具有自主知识产权的新型连接器产品。这些产品凭借出色的性能、稳定性和可靠性,迅速获得了市场的认可,为公司赢得了大量订单。随着技术的不断升级和产品的持续优化,Crane Connectors逐渐在电子连接器领域树立了良好的品牌形象,实现了市场的快速扩张。

AINFO Inc公司的发展小趣事

随着电子行业的快速发展,AINFO Inc公司积极响应国家产业政策,加快了产业升级的步伐。公司引进了先进的生产设备和技术,实现了智能制造和数字化转型。通过优化生产流程和提高生产效率,公司降低了成本,提高了产品质量,进一步巩固了市场地位。

EDO Corp公司的发展小趣事

随着电子行业的快速发展,Eclipse Magnetics逐渐将目光投向了更为高端的市场领域。在航空航天领域,Eclipse Magnetics凭借其先进的磁性技术,成功开发了一系列用于航空航天设备的磁性产品。这些产品不仅提高了航空航天设备的性能,还为公司带来了丰厚的利润。

CMOS Sensor Inc公司的发展小趣事

随着技术的不断发展,CMOS Sensor Inc公司不断推出创新产品。其中,线型CMOS图像传感器的研发成功,为公司带来了重要的突破。这一产品具有更高的分辨率和更低的噪声,为工业质量保证、商业成像等领域提供了更优质的解决方案。此后,公司又不断对产品进行升级和优化,以满足不同客户的需求。

问答坊 | AI 解惑

DSP培训第一天全部资料

第一天的资料分两个部分,一个是学习资料,一个是练习作业的源码。…

查看全部问答>

调查一下支持winCE6.0的CPU及有成熟开发板的公司

我搜了一些做ARM开发板的公司,甚少有支持wince6.0的开发板在卖。立宇泰、友善之臂、扬创、周立功、英蓓特等都没找到一块。优龙也是在最近才出了一款LPC3250的板子有wince6.0,但是驱动还没有做全。搜到有两家卖S3C6410X和S3C6400开发板的公司,海 ...…

查看全部问答>

Can't create hard link ??

BUILDREL: Copying PLATFORMCOMMON binaries from C:\\WINCE600\\platform\\common Can\'t create hard link.  (FAT file system?) Copying files instead of creating hard links. 编译到最后的时候,出现这样几个错误?? 这是什么 ...…

查看全部问答>

EVC 隐式调用动态链接库得问题

我有个动态链接库,头文件里定义了结构体和函数名 struct FvFixed {         CString m_str; public:         friend FvFixed const        operator+(const FvFixed x, const ...…

查看全部问答>

急!两道单片机题目!(高分)

急需此两题的解答!小弟多年不碰单片机,两眼一抹黑,请各位大大救命啊! 在线等,解出来立刻双手把分奉上!! 邮箱:[email=darkstarxw@163.com][/email]…

查看全部问答>

DC-DC原理的培训讲义1,2

[local]1[/local][local]2[/local]…

查看全部问答>

S7-200的模拟量编写方法总结

1、模拟量值和A/D转换值的转换假设模拟量的标准电信号是A0—Am(如:4—20mA),A/D转换后数值为D0—Dm(如:6400—32000),设模拟量的标准电信号是A,A/D转换后的相应数值为D,由于是线性关系,函数关系A=f(D)可以表示为数学方程:   &nb ...…

查看全部问答>

请问:STM32中双ADC快速交替模式如何使用?

最近在学习使用STM32的ADC,单ADC已经调试成功了,LCD可以显示实际波形。 看到有双ADC快速交替模式,可以提高一倍的速度,就改为该模式,用二个ADC采样同一个输入。 但是无论如何都调试不出来,只有ADC1的值,没有ADC2的值。 看了论坛几乎 ...…

查看全部问答>

求助:关于TLV320AIC23的操作

各位大虾:我在DM642里面对TLV320AIC23进行Transmit操作时,遇到一个问题。代码如下,各同步时钟信号AFSX、ACLKX、AHCLKX由AIC23提供。 MCASP_ConfigSrctl MysrctlRegs = {      0x00000009,    //AXR00=Xmt &nbs ...…

查看全部问答>