历史上的今天
今天是: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). 



史海拾趣
|
请问在vs2005(vb.net)里面如何将datatime日期型的变量插入SQL Server数据 库格式就发生了变化。 比如08-04-07,插入数据库就变成了07-08-04,我在WM5模拟器的查询分析器里面看到的 请问这是什么原因呢? 如何解决这个问题… 查看全部问答> |
|
请教各位,我通过PDA的串口采集到数据后如何同步到PC机上,如何编写相关的程序?PDA上是不是要建立数据库,如SQL service for CE?在线等待中。。。。。。… 查看全部问答> |
|
在做永久保存问题的时候,盘符出现了.应该是成功了.但一看大小为64MB,结果一关机,系统就开不开了...分析原因决的是改注册表的时候,把整个FLASH给格式掉了。所以,把板子给恢复出厂设置后,就好了.烧上NK.NB0就又可以用了...所以我想问问,通过修改注册 ...… 查看全部问答> |
|
本帖最后由 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的驱动函数,也相当于是一个固件库了,而我们平时所说的STM32的固件库又是怎么一回事呢?这二者有什么联系和区别? 这些库 ...… 查看全部问答> |




