最新STM32中断程序.docx

最新STM32中断程序.docx

ID:62985030

大小:216.68 KB

页数:9页

时间:2021-07-23

最新STM32中断程序.docx_第1页
最新STM32中断程序.docx_第2页
最新STM32中断程序.docx_第3页
最新STM32中断程序.docx_第4页
最新STM32中断程序.docx_第5页
资源描述:

《最新STM32中断程序.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、精品资料STM32中断程序........................................精品资料STM32中断程序前段时间用STM32F103VBT6写了一个中断的函数,借此机会想了解下STM32的中断机制,用过之后发现STM32的中断配置相当灵活,稳定行很高,测试发现几乎没出过什么差错。我在程序里开了三个中断,一个计数器用于精确延时用,另外两个为外部事件处理中断,下面一一详细介绍,方便初学者入门。在进行STM32中断配置之前首先需要了解下它的中断部分:一、Cortex-M3中断机制 在STM32处理器中有43个可屏蔽中断通道(?包含16个Cortex?-M3的中

2、断线)。共设置了16个可编程的优先等级(使用?4位中断优先级);它的嵌套向?中断控制器(NVIC)和处?器核的接口紧密相连,可以实现低延迟的中断处?和有效处?地处?晚到的中断。嵌套向?中断控制器管?着包括核异常等中断。 Cortex—M3是一个32位的核,在传统的单片机领域中,有一些不同于通用32位CPU应用的要求。比如在工控领域,用户要求具有更快的中断速度,........................................精品资料Cortex-M3采用了Tail-Chaining中断技术,完全基于硬件进行中断处理,最多可减少12个时钟周期数,在实际应用中可减少70%

3、中断。  异常或者中断是处理器响应系统中突发事件的一种机制。当异常发生时,Cortex—M3通过硬件自动将编程计数器(PC)、编程状态寄存器(XPSR)、链接寄存器(LR)和R0~R3、R12等寄存器压进堆栈。在Dbus(数据总线)保存处理器状态的同时,处理器通过Ibus(指令总线)从一个可以重新定位的向量表中识别出异常向量,并获取ISR函数的地址,也就是保护现场与取异常向量是并行处理的。一旦压栈和取指令完成,中断服务程序或故障处理程序就开始执行。执行完ISR,硬件进行出栈操作,中断前的程序恢复正常执行。图1为Cortex—M3处理器的异常处理流程。 二、STM32SysTick介

4、绍 Cortex-M3的内核中包含一个SysTick时钟。SysTick为一个24位递减计数器,SysTick设定初值并使能后,每经过1个系统时钟周期,计数值就减1。计数到0时SysTick计数器自动重装初值并继续计数,同时内部的COUNTFLAG标志会置位,触发中断(如果中断使能情况下)。 对于STM32系列微处理器来说,执行一条指令只有几十个ns,进行for循环时,要实现N毫秒的x值非大,而且由于系统频率的宽广,很难计算出延时........................................精品资料N毫秒的精确值。针对STM32微处理器,需要重新设计一个新的方法去

5、实现该功能,因此,在STM32的应用中,使用Cortex-M3内核的SysTick作为定时时钟,设定每一毫秒产生一次中断,在中断处理函数里对N减一,在Delay(N)函数中循环检测N是否为0,不为0则进行循环等待;若为0则关闭SysTick时钟,退出函数,这种延时函数的做法能很高效地实现精确定时。三、SysTick编程实现Delay(N)函数 思路:利用systick定时器为递减计数器,设定初值并使能它后,它会每个系统时钟周期计数器减1,计数到0时,SysTick计数器自动重装初值并继续计数,同时触发中断。那么每次计数器减到0, 时间经过了: T=系统时钟周期x计数器初值 比如使用

6、72M作为系统时钟,那么每次计数器减1所用的时间是1/72M,计数器的初值如果是72000,那么每次计数器减到0,时间经过(1/72M)*72000=0.001s,即1ms.有了以上思路做铺垫后,为了实现首先我们需要一个72MHz的SysTick时钟。第一步配置RCC寄存器和SysTick寄存器 由于系统时钟(SysTick)可选择为PLL输出、HSI或者HSE,在这里选择9倍频的PLL作为SysTick的时钟源,同时HCLK(AHBClock)时钟也相应的配置成72MHz了,因为最终SysTick是需要通过AHB后输出的,所以在配置的同时也需要选择AHB时钟,这里选择为RCC_S

7、YSCLK_Div1(咖啡色部分)表示AHB时钟=系统时钟,相关配置见下面函数(RCC_Configuration)红色字体部分。这里需要特别强调一点,有关书籍里常提到"SysTick的最高频率为9MHz(最大为HCLK/8),在这个条件下,把SysTick重装载值设置为9000,将SysTick时钟设置为9MHz,就能够产生1ms的时间基值"刚开始对这句话感到很迷惑,因为,有的地方介绍SysTick没有说最大频率智能9MHz,这里却指出会被8分频,两者出现了矛盾!相

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。