历史上的今天
返回首页

历史上的今天

今天是:2024年12月26日(星期四)

正在发生

2018年12月26日 | STM32之系统中断处理

2018-12-26 来源:eefocus

点击(此处)折叠或打开

  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闪耀。


推荐阅读

史海拾趣

DATEL Inc公司的发展小趣事

DATEL Inc.公司成立于1970年,总部位于美国马萨诸塞州。公司成立的初衷是解决当时数据采集领域的痛点,如数据准确性低、采集效率低下等问题。创始人带领一支由工程师组成的团队,开始研发第一代数据采集产品。他们日夜兼程,不断试验、调整,最终成功推出了一款体积小、功耗低、易于开发的数据采集器,这款产品迅速在市场中获得了认可。

长园维安(CYGWAYON)公司的发展小趣事

长园维安一直注重产品质量管理。公司建立了完善的质量管理体系,通过ISO9001、TS16949等认证,确保产品质量的稳定性和可靠性。此外,长园维安还积极推行6Sigma等质量管理方法,不断提高产品质量和客户满意度。这些措施使长园维安赢得了客户的信赖和好评。

ESTEK公司的发展小趣事

在电子行业日益注重环保的背景下,ESTEK公司积极响应号召,致力于研发和生产绿色环保的电子产品。公司投入大量资金和资源,研发出了一系列符合环保标准的电子元件和设备。这些产品在市场上受到了广泛欢迎,不仅为公司带来了可观的经济效益,也为环保事业做出了积极贡献。

格瑞宝(GP)公司的发展小趣事

随着产品线的拓展和技术实力的增强,格瑞宝开始积极拓展国内外市场。公司不仅在消费电子和工业类电子领域取得了显著成绩,还努力将产品和服务拓展到通信、汽车电子等新兴领域。同时,格瑞宝注重品牌建设,通过提供优质的产品和服务,赢得了广大客户的信赖和好评。公司的品牌知名度和影响力不断提升,为公司的长远发展奠定了良好基础。

BETA Transformer Technology Corp公司的发展小趣事

随着电子行业的快速发展和变革,BETA Transformer Technology Corp公司面临着前所未有的挑战。为了应对这些挑战,公司不断加大研发投入,加强技术创新,推出了一系列符合市场需求的新产品。同时,BETA公司还积极调整生产结构,优化供应链管理,降低成本,提高产品质量。这些举措使得BETA公司在激烈的市场竞争中保持了领先地位。

Hasco Relays and Electronics International Corp公司的发展小趣事

进入21世纪后,Harris公司经历了重要的战略转型。2019年,Harris与L3 Technologies合并成立了L3Harris Technologies。这次合并旨在通过整合两家公司的技术、资源和市场优势,打造一家综合性的国防和信息技术公司。合并后的L3Harris在通信系统、雷达系统、太空和导航系统等多个领域均取得了显著进展,进一步提升了其在电子行业中的竞争力。

问答坊 | AI 解惑

选择ASIC、FPGA、DSP设计无线电系统的准则1

ASIC、FPGA和DSP的应用领域呈现相互重迭的趋势,使设计人员必须在软件无线电架构设计中重新考虑组件选择策略问题。本文从可程序性、整合度、开发周期、性能和功率五个方面论述了选择ASIC、FPGA和DSP的重要准则。 软件无线电(Software Defined Ra ...…

查看全部问答>

怎么分析晶体管放大器的电路,Ib,c,e方向怎么考虑?

怎么分析晶体管放大器的电路,Ib,c,e方向怎么考虑?…

查看全部问答>

如何实现开机自动运行指定的应用程序并全屏显示?

rt 自己写了个程序,想一开机全屏自动运行。 有没有比较详细的说明、操作步骤,刚接触不久,以前一点都没有做过。是用PB自己定制系统吗?如何做? 感谢啊!…

查看全部问答>

问DeviceEmulatorBSP.msi模拟器支持不知道directdrawCreate

感谢大家来看我的问题: 我想问的问题,标题已经说了 现在我的环境如下: 1.用pb5.0定制了sdk,并安装完成。并添加了directdraw组件 2.vs2005可以正常使用该sdk,并建立项目运行调试正常。 现在调用ddraw里的函数 directdrawcreate直接返回失 ...…

查看全部问答>

【急】xpe无法启动,提示“lsass.exe 当试图更新密码时本返回状态表示所提供的当前密码不正确”

一台升腾的8600,所用系统为Windows XP Embedded,就用了C盘一个分区,加过一层保护。那天装某个软件 ,安装驱动时提示更新几个系统文件,没怎么注意就更新掉了。结果重启后就进不去系统了, 在XP启动画面滚动 条之后用户名密码登录提示框出来前 ...…

查看全部问答>

gprs模块用at指令上网connect之后出现乱码?

我用的西门子mc35i gprs modem 与pc机连接上之后 通过串口调试助手 发送at指令给它 当发送 atd*99***1#时 先返回 connect 然后持续不断出现大概四排乱码!@¥#!%……%……&~!~#¥¥#%@#@%%之类的 然后再显示:no carrier 我不知道是怎么回 ...…

查看全部问答>

请教大家关于电源芯片lm1117-1.8的问题

开发板上的lm1117-1.8不发烫,我自己做的板上为什么很烫啊,也能正常使用,就是很烫。 哪位高手指点一下,该怎么处理阿 未命名.JPG (35.01 KB) 2009-7-23 05:02 椭圆内的100欧姆的电阻 ...…

查看全部问答>

Z430-RF2500紧急求助:无法安装驱动!

       前天就收到了soso姐寄来的开发板,但直到今天也没能成功安装驱动,如附件所示:       自己试了许多方法,比如:安装了光盘里的所有软件,如IAR For MSP430 V4.09A、 ...…

查看全部问答>

OMAP-L137的uboot该如何配置SDRAM

使用的是TI官方PSP20.0.0.07包里的Uboot-1.3.3,SDRAM该如何配置? 我看davinci系列以及s3c2440的lowlevel_init.s文件都有用汇编配置sdram时序、管脚之类的,但是OMAP-L137的Uboot的lowlevel_init.s文件却几乎是空的,是需要自己用汇编写上,还是C ...…

查看全部问答>