历史上的今天
返回首页

历史上的今天

今天是:2024年12月13日(星期五)

正在发生

2021年12月13日 | STM32-(SysTick定时器,EXTI外部中断/事件控制器)

2021-12-13 来源:eefocus

Systick系统定时器

介绍:systick定时器上属于CM3内核中的一个外设,内嵌在NVIC中。系统定时器是一个24位向下计数的计数器,计数器每一次计数的时间是1/SYSTICK,一般我们设置SYSTICK为72M。当重载数值寄存器的值递减到0时,系统定时器产生一次中断,以此循环。


使用范围:1.一般用于操作系统,用于产生时基,维持操作系统的心跳。


使用的寄存器:CTRL,LOAD,VAL,CALIB;


例程1:利用systick产生1s的时基。


步骤:

1.设置重载寄存器的值

2.清除当前数值寄存器的值

3.配置控制于状态寄存器

systick配置库函数:


_STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

{

//不可能的重装载值,超出范围

if((ticks - 1UL)>SysTick_LOAD_RELOAD_Msk){

return (1UL);

}

//设置重装载寄存器

SysTick->LOAD = (uint32_t)(tiicks - 1UL);

//设置中断优先级

NVIC_SetPriority(SysTick_IRQn,(1UL< //设置当前数值寄存器

SysTick->VAL = OUL;

//设置系统定时时钟源为AHBCLK=72M

//使能系统定时器中断

//使能定时器

SysTick->CTRL = SysTIck_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk;

return (OUL);

}


用固件库编程的时候我们只需要调用库函数SysTick_Config()即可,形参ticks用来设置重装载寄存器的值,最大不能超过重装载寄存器的值2^24,当重载寄存器的值递减到0的时候产生中断,然后重载寄存器的值又重新装载往下计数,以此循环。


设置中断优先级:


void NVIC_SetPriority(IRQn_Type IRQn,uin32_t priority)

{

if((int32_t) IRQ<0){

SCB->SHP[(((uint32_t)(int32_t))IRQn)&0XFUL)-4UL] = (uint8_t)((priority<<(8-_NVIC_PRIO_BITS)) &(uint32_t)0xffUL);

}

}


使用:NVIC_SetPriority(Systick_IRQn,(1UL<<_NVIC_PRIO_BITS)-1UL);


配置系统定时器的时钟(AHBCLK)为72M:

SysTick初始化函数:


void SysTick__Init(void)

{

/*systickFrequency / 1000    1ms中断一次*/

/*systickFrequency / 100000   10us中断一次*/

/*systickFrequency / 1000000   1us中断一次*/

if(SysTick_Config(SystemCoreClock / 100000)){

while(1);

}

}


这个函数决定了多长时间产生一次中断。

使能定时器和定时器中断:

在这里插入图片描述
在这里插入图片描述

函数Delay_us()中我们等待TimingDelay为0,当它为零时表示延时时间到了。所以systick每进一次中断即10us时间


SysTick中断服务函数:


void TimingDelay_Decrement(void)

{

if(TimingDelay !=0x00)

{

TimingDelay--;

}

}

void SysTick_Handler(void)

{

TimingDelay_Decrement();

}


TimingDelay的值等于延时函数中传进去的nTime的值,比如nTime=100000,则延时时间等于100000*10us = 1s。


EXTI外部中断/事件控制器

EXTI(external interrupt/event controller) 一外部中断/事件控制器,管理了控制器的20个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI可以实现对每个中断/事件进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。


EXTI的功能框图:

在这里插入图片描述

EXTI可以分为两部分功能,一个产生中断,一个产生事件,这两个功能在硬件上就有所不同。

**中断与事件的区别:产生中断的线路的目的上把输入信号输入到NVIC,进一步会运行中断服务函数,实现功能,这样是软件级别的。而产生事件线路目的就是传输一个脉冲信号给其他外设使用,并且是电路级别的信号传输,属于硬件级别的。


红色线路上EXTI产生中断的线路,绿色线路上EXTI产生事件的线路。

在这里插入图片描述

EXTI初始化结构体详解

typedef struct{

uint32_t EXTI_Line; //中断/事件线

EXTIMode_TypeDef  EXTI_Mode;//EXTI模式

EXTITrigger_TypeDef EXTI_Trigger;//触发类型

FunctionalState EXTI_LineCmd;//EXTI使能

}EXTI_InitTypeDef;


1.EXTI_Line:EXTI中断/事件选择,参考上表。

2.EXTI_MODE:EXTI模式选择,可以选择是产生中断还是事件。

3.EXTI_Trigger:EXTI边沿触发事件,可以选择上升沿触发还是下降沿触发或者是边沿触发。

4.EXTI_LineCmd:控制是否使能EXTI线,可选使能EXTI线(ENABLE)或禁用(DISABLE).

推荐阅读

史海拾趣

American Power Devices Inc公司的发展小趣事

在激烈的市场竞争中,APD公司始终坚持品质至上的原则。公司建立了严格的质量管理体系,从原材料采购到产品生产、检测等各个环节都严格把关。凭借卓越的产品品质和良好的售后服务,APD赢得了众多客户的信赖和支持。

FARNELL公司的发展小趣事

FARNELL公司成立于1937年,由创始人在英国利兹创建。起初,公司专注于电子元器件的分销,凭借其优质的产品和可靠的供货能力,逐渐在电子行业中崭露头角。在那个时代,电子产品正处于快速发展阶段,FARNELL公司凭借其前瞻性的市场洞察力和灵活的供应策略,赢得了众多客户的信赖。

DBM REFLEX公司的发展小趣事

在全球环保意识日益增强的今天,DBM REFLEX积极响应可持续发展的号召。公司不仅在生产过程中注重环保和节能,还积极推广绿色产品和技术。同时,DBM REFLEX还积极参与社会公益事业,通过捐款捐物等方式回馈社会。这种对环保和社会责任的关注,使DBM REFLEX在电子行业树立了良好的企业形象。

Greenray Industries Inc公司的发展小趣事

为了加速绿色技术的推广和应用,GreenTech积极寻求与全球知名企业的战略合作。例如,公司与一家国际领先的电动汽车制造商达成合作协议,共同研发用于电动汽车的高效电池管理系统。通过这一合作,GreenTech不仅提升了自身在电池技术领域的竞争力,还成功将绿色技术应用于实际产品中,推动了电动汽车行业的绿色发展。

Digital View公司的发展小趣事

Digital View公司成立于1995年,当时正值电子显示技术快速发展的时期。公司创始人凭借对数字显示技术的深刻理解和前瞻性的市场洞察力,决定专注于平板数字显示市场连接解决方案的研发和生产。在创业初期,公司面临资金短缺、技术瓶颈等多重困难,但团队凭借坚韧不拔的精神,成功开发出多款具有竞争力的产品,逐渐在市场上获得认可。

Aten International公司的发展小趣事

在电子设备的日益增多的背景下,用户对于高效、便捷的设备管理需求愈发强烈。Aten International凭借其对连接技术的深入理解,成功研发出KVM切换器,该产品能够实现对多台计算机的控制,大大提高了工作效率。随着技术的不断进步,Aten International的KVM切换器不断更新迭代,从最初的简单切换功能,发展到现在的智能管理、远程操控等高级功能,成为了电子行业的一大亮点。

问答坊 | AI 解惑

怎樣做一塊好的PCB板

就学这样能做好的.…

查看全部问答>

超低纹波电源 欣赏 PUSHPULL 图

超低纹波电源 欣赏 PUSHPULL 图…

查看全部问答>

无线传输模组_快

本帖最后由 paulhyde 于 2014-9-15 09:36 编辑 无线传输模组_快  …

查看全部问答>

Linux设备驱动程序(第一版)

LINUX设备驱动程序 出版社:中国电力出版社 作者:Rubini.A.编著(美国);聊鸿斌等译(北京); 个人认为经典之作: …

查看全部问答>

WinCE学习

刚学习WinCE,请大家推荐一些有用的资料,最好是电子版的书籍。 顺便请问哪里有《Programming Windows Embedded 6.0 Developer Reference.4th Edition》电子版的下载地址,谢谢…

查看全部问答>

请问VS2005(vb.net)里日期格式转换的问题

请问在vs2005(vb.net)里面如何将datatime日期型的变量插入SQL Server数据 库格式就发生了变化。 比如08-04-07,插入数据库就变成了07-08-04,我在WM5模拟器的查询分析器里面看到的 请问这是什么原因呢? 如何解决这个问题…

查看全部问答>

EVC采集的数据如何同步到pc机

请教各位,我通过PDA的串口采集到数据后如何同步到PC机上,如何编写相关的程序?PDA上是不是要建立数据库,如SQL service for CE?在线等待中。。。。。。…

查看全部问答>

如何设置永久保存区域的大小

在做永久保存问题的时候,盘符出现了.应该是成功了.但一看大小为64MB,结果一关机,系统就开不开了...分析原因决的是改注册表的时候,把整个FLASH给格式掉了。所以,把板子给恢复出厂设置后,就好了.烧上NK.NB0就又可以用了...所以我想问问,通过修改注册 ...…

查看全部问答>

2010年TI杯江苏赛区QQ交流群群号:100194463

本帖最后由 paulhyde 于 2014-9-15 09:01 编辑 2010年TI杯江苏赛区QQ交流群群号:100194463 2010年TI杯江苏赛区QQ交流群群号:100194463 2011大学生电赛兼TI杯QQ交流群号:120081477 2011大学生电赛兼TI杯QQ交流群号:120081477 群内有各类资料 ...…

查看全部问答>

STM32固件库和Keil里面的Lib库是什么关系

最近想使用一下STM32的库文件函数编程,我发现KEIL安装后会自动生成一个LIB文件,里面包含了很多STM32的驱动函数,也相当于是一个固件库了,而我们平时所说的STM32的固件库又是怎么一回事呢?这二者有什么联系和区别?     这些库 ...…

查看全部问答>