网站大量收购独家精品文档,联系QQ:2885784924

stm32软件复位.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
stm32软件复位

STM32软件复位(基于库文件V3.5) 对于STM32来说软件复位有两种方式:? ??1)采用官方自带的软件库? ????在官方软件库的?core_cm3.h?文件里?直接提供了?系统复位的函数? ??static __INLINE void NVIC_SystemReset(void) { ? SCB-AIRCR ?= ((0x5FA SCB_AIRCR_VECTKEY_Pos) ? ? ?|? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(SCB-AIRCR SCB_AIRCR_PRIGROUP_Msk) |? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SCB_AIRCR_SYSRESETREQ_Msk); ? ? ? ? ? ? ? ? ? /* Keep priority group unchanged */ ? __DSB(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??/* Ensure completion of memory access */ ? ? ? ? ? ? ? ? while(1); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? /* wait until reset */ } ??但是不是直接调用这个函数就OK了?? ??在Cortex-M3权威指南中有这么一句话? ?? 这里有一个要注意的问题:从SYSRESETREQ?被置为有效,到复位发生器执行复位命令,? 往往会有一个延时。在此延时期间,处理器仍然可以响应中断请求。但我们的本意往往是要? 让此次执行到此为止,不要再做任何其它事情了。所以,最好在发出复位请求前,先把? FAULTMASK?置位。? ??所以最好在将FAULTMASK?置位才万无一失。? ??同样官方?core_cm3.h?文件里也直接提供了该函数? ??static __INLINE void __set_FAULTMASK(uint32_t faultMask) { ? register uint32_t __regFaultMask ? ? ? __ASM(faultmask); ? __regFaultMask = (faultMask 1); } ? 把上面这两个函数写在一起就可以实现软件复位了~~ void SoftReset(void) { __set_FAULTMASK(1); ? ? ?// 关闭所有中端 NVIC_SystemReset();// 复位 } ?/*-------------------------------------以下未测试-----------------------------------------*/? 2)自己编写相应汇编代码? ??其实到底一样,我当初是没有看到官方的函数所以自己编的,实际你看官方函数里面其实就是调用的cortexm3_macro.s同样的代码?呵呵。? ??我的代码:? ?? /*******************************************************************************? *?Function?Name??:?SystemReset? *?Description????:?Configures?the?port?pin?connected?to?the?push?button.?GPIO_D_4? *?Input??????????:?None? *?Output?????????:?None? *?Return?????????:?None? *******************************************************************************/? __asm?void?SystemReset(void)? {? ?MOV?R0,?#1???????????//;?? ?MSR?FAULTMASK,?R0????//;?清除FAULTMASK?禁止一切中断产生? ?LDR?R0,?=0xE000ED0C??//;? ?LDR?R1,?=0x05FA0004??//;? ?STR?R1,?[R0]?????????//;?系统软件复位???? ??deadloop? ????B?deadloop????????//;?死循环使程序运行不到下面的代码? }? 然后用的时候在C程序里直接调用该函数就行了。?

文档评论(0)

f8r9t5c + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档