STM32之系统中断处理

发布者:RadiantDusk最新更新时间:2018-12-26 来源: eefocus关键字:STM32  系统中断处理 手机看文章 扫描二维码
随时随地手机看文章

点击(此处)折叠或打开

  1. /*******************************************************************************

  2. * Function Name : SysTickHandler

  3. * Description : This function handles SysTick Handler.

  4. * Input : None

  5. * Output : None

  6. * Return : None

  7. *******************************************************************************/

  8. void SysTickHandler(void)

  9. {

  10. __SVC();


  11. /* Toggle PC.04 pin */ LED4

  12. GPIO_WriteBit(GPIOC, GPIO_Pin_4, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_4)));

  13. }

  14. /*******************************************************************************

  15. * Function Name : SVCHandler

  16. * Description : This function handles SVCall exception.

  17. * Input : None

  18. * Output : None

  19. * Return : None

  20. *******************************************************************************/

  21. void SVCHandler(void)

  22. {

  23. /* Set the PSV system handler pending bit */

  24. NVIC_SetSystemHandlerPendingBit(SystemHandler_PSV);


  25. /* Toggle PC.05 pin */ LED3

  26. GPIO_WriteBit(GPIOC, GPIO_Pin_5, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_5)));

  27. }

  28. /*******************************************************************************

  29. * Function Name : PendSVC

  30. * Description : This function handles PendSVC exception.

  31. * Input : None

  32. * Output : None

  33. * Return : None

  34. *******************************************************************************/

  35. void PendSVC(void)

  36. {

  37. /* Set the NMI system handler pending bit */

  38. NVIC_SetSystemHandlerPendingBit(SystemHandler_NMI);


  39. /* Toggle PC.06 pin */ LED2

  40. GPIO_WriteBit(GPIOC, GPIO_Pin_6, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_6)));

  41. }

  42. /*******************************************************************************

  43. * Function Name : NMIException

  44. * Description : This function handles NMI exception.

  45. * Input : None

  46. * Output : None

  47. * Return : None

  48. *******************************************************************************/

  49. void NMIException(void)

  50. {

  51. /* Toggle PC.07 pin */  LED1

  52. GPIO_WriteBit(GPIOC, GPIO_Pin_7, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_7)));

  53. }

本例展示了如何运用NVIC和系统Handler(system handler):

各个system handlers拥有如下的强制优先级(preemption priority):

   - NMI preemption priority    -2   固定优先级

   - PSV preemption priority     0   可设置

   - SVCall preemption priority  1   可设置

   - SysTick preemption priority 2   可设置

首先把Systick定时器设定为每当其计数器为零,这里是1s产生一个Systick中断。

点击(此处)折叠或打开

  1. /* SysTick interrupt each 1 Hz with Counter clock equal to 72MHz/8 = 9MHz */

  2. SysTick_SetReload(9000000);


  3. /* Enable the SysTick Interrupt */

  4. SysTick_ITConfig(ENABLE);


  5. /* Enable the SysTick Counter */

  6. SysTick_CounterCmd(SysTick_Counter_Enable);

在Systick handler routine中,设置与PC.04相连的LED4以1秒为周期闪耀。随后执行_SVC(System Service Call)指令。这个指令在cortexm3_macro.h中


执行_SVC()会激活SVCall handler来打断当前的指令流。在SVCall handler routine中,设置与PC.05相连的LED3闪耀,同时设置PSV handler的pending比特。由于PSV(Pendable request for system service)的优先级更高,因此他又会打断SVCall handler。在PSV handler routine中,设置与PC.06相连的LED2闪耀,并设置NMI(Non maskable interrupt)pending比特,进一步由NMI handler打断当前handler。


最后,在NMI handler中设置与PC.07相连的LED1闪耀。


关键字:STM32  系统中断处理 引用地址:STM32之系统中断处理

上一篇:stm32启动文件中heap与stack
下一篇:STM32 SVCall

推荐阅读最新更新时间:2024-03-16 16:21

STM32 利用systick 精确延时 nms
/***************************************************************************** * File Name : systick_delay.h * Author : shifu * Version : * Date : 09/20/2008 * Description : ********************************************************************************/ /* Define to prevent recursive inclus
[单片机]
STM32串口双缓冲乒乓数据传输方式
对于没玩过DMA 的朋友,这里简单说一下DMA,用自己的语言说吧,那就是,从某个位置 传输数据到某个位置,如果不用DMA,那要CPU参与操作,一个字节一个字节地搬,效率高 点的,就一个字一个字地搬.但当你用了DMA 后,那就是只需要设置:A.从哪里开始搬; B, 搬到哪里去;C以字节方式搬还是半字还是字;D:一共搬多少个.之后,启动DMA.CPU内部 就会开始搬数据了,整个搬数据的过程都不需要指令的参与,唯一要做的,就是检测什么时 候搬完.你可以扫描寄存器,也可以用中断.这里,我使用了中断. 具体设置功能看注释就可以明白了.注意一点就是,有一个设置: DMA_InitStructure.DMA_PeripheralInc = DM
[单片机]
<font color='red'>STM32</font>串口双缓冲乒乓数据传输方式
嵌入式stm32学习:外部中断
bsp_exti.h #ifndef __EXTI_H #define __EXTI_H #include stm32f4xx.h //引脚定义 /*******************************************************/ #define KEY1_INT_GPIO_PORT GPIOA #define KEY1_INT_GPIO_CLK RCC_AHB1Periph_GPIOA #define KEY1_INT_GPIO_PIN GPIO_Pin_0 #define KEY1_INT_EXTI_PORTSOURCE EXTI_
[单片机]
STM32——粗谈通信接口设备
在STM32中,其通信接口共有5个,分别是:用于IC间通信的SPI接口和I2C接口、用于控制局域网通信的CAN 总线接口、与PC通信的 USB接口、还有最常见的通用同步/异步串口USART。下面我们来详细介绍一下这5个通信接口在STM32中分别所起的作用。 1. 用于IC间通信的SPI接口 在STM32中,为了能够与其他 IC进行通信,其配备2个SPI接口,并提供高达18 MHz的全双工SPI通信。在这两个SPI接口上,其中有一个SPI设备接口是位于满速为72 MHz的APB2高速总线上,而另外一个SPI设备接口则是位于满速为36 MHz的APB1低速总线上。用户可以对每个 SPI 设备的时钟极性和相位进行定制,其发送数据
[单片机]
STM32 I/O Retargeting
1.半主机模式 半主机是用于 ARM 目标的一种机制,可将来自应用程序代码的输入/输出请求传送至运行调试器的主机。 例如,使用此机制可以启用 C 库中的函数,如 printf() 和 scanf(),来使用主机的屏幕和键盘,而不是在目标系统上配备屏幕和键盘。 这种机制很有用,因为开发时使用的硬件通常没有最终系统的所有输入和输出设备。 半主机可让主机来提供这些设备。 半主机是通过一组定义好的软件指令(如 SVC)来实现的,这些指令通过程序控制生成异常。 应用程序调用相应的半主机调用,然后调试代理处理该异常。 调试代理提供与主机之间的必需通信。 2. 微库microlib microlib 是缺省 C 库的备选库。 它用于
[单片机]
<font color='red'>STM32</font> I/O Retargeting
STM32内存使用及分配
堆空间和栈空间配置 Stack Size,一般小工程0X400足够,我们综合实验才设置0X1000就够用,所以默认无需设置太大。Stack_Size的值根据你程序中局部变量最大尺寸计算, Heap Size,如果没有用到标准库的malloc,就是废物,纯属浪费内存,所以直接设置为0即可。Heap_Size的值如果程序中没有用到动态内存malloc就默认不用管。 编译后空间使用情况 在Keil中编译工程成功后,在下面的Bulid Ouput窗口中会输出下面这样一段信息: Program Size: Code=6320 RO-data=4864 RW-data=44 ZI-data=1636 Code :是程序中代码所占字节
[单片机]
STM32中的一些小坑-ADC通道设置-写FLASH
最近做项目用到STM32F051的片子,遇到了两个小坑。 我的一个项目,需要ADC采集。两路ADC输入通道。PA0-ADCIn0; PA1-ADCIn1. 一开始想使用最简单的方式,单次转换。第一次采In0, 第2次采集In1. STM32F0 的ADC库里面提供了ADC转换的函数:如下: ADC_StartOfConversion(ADC1); while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); AdcProValRig =ADC_GetConversionValue(ADC1); ADC_StopOfConversion(ADC1);
[单片机]
STM32系统架构
在小容量、中容量和 大容量产品中,主系统由以下部分构成: ● 四个驱动单元: ─ Cortex-M3内核DCode总线(D-bus),和系统总线(S-bus) ─ 通用DMA1和通用DMA2 ● 四个被动单元 ─ 内部SRAM ─ 内部闪存存储器 ─ FSMC ─ AHB到APB的桥(AHB2APBx),它连接所有的APB设备 这些都是通过一个多级的AHB总线构架相互连接的,如下图所示: 在互联型产品中,主系统由以下部分构成: ● 五个驱动单元: ─ Cortex-M3内核DCode总线(D-bus),和系统总线(S-bus) ─ 通用DMA1和通用DMA2 ─ 以太网DMA ● 三个被动单元 ─ 内部SRAM ─ 内部闪存
[单片机]
<font color='red'>STM32</font><font color='red'>系统</font>架构
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved