STM32软件复位的实现方法

发布者:bianzitong521最新更新时间:2019-06-13 来源: eefocus关键字:STM32  软件复位  实现方法 手机看文章 扫描二维码
随时随地手机看文章

前些天写程序的时候,需要做一个自动复位的功能,也就是当收到外部通讯设备复位指令时,主设备立刻执行复位操作。当时是想到的用看门狗实现。但是觉得似乎不太妥当,因为看门狗的复位是需要一定的时间。而在这段时间内系统还是处于正常运行当中,而且所有中断都会正常响应。这恰好与要实现的功能南辕北辙。需求是当收到复位指令时,系统停止执行后面的所有操作,包含中断响应。所以看门狗无法实现。 


我用的是STM32F103芯片,了解这颗芯片能用来复位的只有5种,外部复位、独立/窗口看门狗、软件复位功耗管理。看来我能用的也就只有软件复位了。但是我查了所有STM32F103芯片相关的资料,还是没有找到具体的实现方法,最多是提到过这种复位寄存器SYSRESETRQ位。不过功夫不负有心人,我还是找到了线索,STM32F103芯片手册中提到这种复位属于内核部分,于是我翻看了cortex-m3内核相关书藉才找到,在此分享一下,表达一个喜悦之情。 


共有两种实现方法,具体方法实现如下: CM3允许由软件触发复位序列。 


第一种方法,是通过置位NVIC中应用程序中断与复位控制寄存器(AIRCR)的VECTRESET位(位偏移:0),如下所示: 

LDR R0, =0XE000ED0C  ;NVIC AIRCR address 

LDR R1, =0X05FA0001  ;置位VECTRESET位,前面的0X5FA是访问钥匙、 STR R1, [R0]     ;触发复位序列 deadloop 

B    deadloop   ;该死循环保证后面的指令不可能被执行到 

这种复位的作用范围覆盖了整个CM3微控制器中,除了调试逻辑之外的所有角落,但是它不会影响到CM3微控制器处部的电路,所以单片机上的各片上外设和其他电路都不受到影响。  


复位的第二种方法,置位同一个寄存器中的SYSRESETREQ位,这种复位则是会波及整个芯片上的电路:它会使CM3微控制器把送往系统复位发生器的请求线置为有效。但是,系统复位发生器不是CM3的一部分,而是芯片厂商实现的,因此,不同的芯片对此复位的响应也不同。因此读者需要认真 参阅该芯片的规格书,明白发生片内复位时,各外设和功能模块都会回到什么状态,或者有哪些功能模块受到影响(比如,STM32系列有后备存储区,该区就被特殊对待)。SYSRESETRQ的使用代码如下面代码段演示: LDR R0, =0XE000ED0C NVIC AIRCR address 

LDR R1, =0X05FA0004 置位SYSRESETRQ,前面的0X05FA是访问钥匙 STR R1, [R0]     ;触发复位序列 deadloop 

B    deadloop  ;该死循环保证后面的指令不会被执行到   

这里要注意一个问题:从SYSRESETRQ被置为有效,到复位发生器执行复位命令,往往会有一个延时。在些延时期间内,处理器仍然可以响应中断请求。但我们的本意往往是要让此次执行到此为止,不要再执行任何操作。所以,最好在发出复位请求前,先把FAULTMASK置位。 


这两种方法都是对CM3内核寄存器直接操作的,调试的时候可以试试看,不过正常情况下,没事不要瞎玩儿啊!


关键字:STM32  软件复位  实现方法 引用地址:STM32软件复位的实现方法

上一篇:STM32如何使用内部时钟源当系统时钟
下一篇:STM32F4系统时钟设置之二

推荐阅读最新更新时间:2024-11-09 18:43

STM32学习笔记——高级定时器TIM1更新中断配置
stm32高级定时器TIM1,更新中断初始化配置和普通定时器差别不大,需要注意的是结构IM_TimeBaseInitTypeDef中TIM_RepetitionCounter配置问题。TIM_RepetitionCounte是用来配置重复计数,就是重复溢出多少次才给你来一个溢出中断,只有高级定时器需要配置。下面是官方库中对它的注释: 它对应的寄存器叫TIM1_RCR.如果这个值不配置,上电的时候寄存器值可是随机的,本来1秒中断一次,可能变成N 秒中断一次。下图是stm32参考手册中对该寄存器的详细解释: 总结一下高级定时器溢出中断配置的步骤: 1,时钟使能 2,配置预分频、自动重装值和重复计数值 3,清除中断标志
[单片机]
如何在STM32中得到最佳的ADC精度
STM32家族中的所有芯片都内置了逐次逼近寄存器型ADC模块.内部大致框架如下: 每次ADC转换先进行采样保持,然后分多步执行比较输出,步数等于ADC的位数,每个ADC时钟产生一个数据位。说到这里,用过STM32 ADC的人是不是想到了参考手册中关于12位ADC转换时间的公式: ST官方就如何保障或改善ADC精度写了一篇应用笔记AN2834。该应用笔记旨在帮助用户了解ADC误差的产生以及如何提高ADC的精度。主要介绍了与ADC设计的相关内容,比如外部硬件设计参数,不同类型的ADC误差来源分析等,并提出了一些如何减小误差的设计上建议。 当我们在做STM32的ADC应用遇到转换结果不如意时,常有人提醒或建议你对采样时间或
[单片机]
如何在<font color='red'>STM32</font>中得到最佳的ADC精度
STM32 HardFault_Handler 硬件错误 解决办法
在用Keil对STM32的程序进行仿真时程序有时会跑飞,停止仿真程序会停在HardFault_Handler函数里的死循环while(1)中。这说明STM32出现了硬件错误。 STM32出现硬件错误可能有以下原因: (1)数组越界操作; (2)内存溢出,访问越界; (3)堆栈溢出,程序跑飞; (4)中断处理错误; 遇到这种情况,可以通过以下2种方式来定位到出错代码段。 方法1: 1.1在硬件中断函数HardFault_Handler里的while(1)处打调试断点,程序执行到断点处时点击“STOP”停止仿真。 1.2 在Keil菜单栏点击“View”——“Registers Window”,在寄存器查看窗口查找R14(LR
[单片机]
<font color='red'>STM32</font> HardFault_Handler 硬件错误 解决办法
STM32Keil下编程实现蜂鸣器长鸣
前言 基于STM32F103C8T6在Keil下编程实现蜂鸣器的长鸣 一、原理图 1.STM32F103C8T6 STM32F103C8T6是ST在2007年发布的一款MCU,截止目前ST已经发布了速度高达400MHz的STM32H7。三点好处,一是封装比较大,方便初学者焊接,二是价格低廉,学习成本比较低,三是网上有大量的资料供初学者学习使用。 2.BELL蜂鸣器 二、Keil代码 1.Beep.c 代码如下: #include stm32f10x.h #include Beep.h void BEEP_Init(void) { GPIO_InitTypeDef GPIO_Structure;/
[单片机]
STM32Keil下编程实现蜂鸣器长鸣
基于STM32单片机的ADC与DMA配置的介绍与使用
本文使用ADC转换电位器输出的电压值,并用DMA模式传输转换的结果,每8次采样转换取平均值,做一个简单的数字滤波。 ADC的详细配置与使用 见之前的日记STM32中ADC的使用,只是最后增加一步配置DMA: DMA for ADC channels features configuration To enable the DMA mode for ADC channels group, use the ADC_DMACmd()funcTIon. To configure the DMA transfer request, use ADC_DMAConfig() func TI on. DMA的配置 (摘自STM32F3官
[单片机]
基于<font color='red'>STM32</font>单片机的ADC与DMA配置的介绍与使用
STM32常用的一些开发工具
本文为大家汇总 STM32 常用的一些开发工具。 IDE(集成开发环境) IDE:IntegratedDevelopmentEnvironment,集成开发环境。 IDE通常包含编辑器、编译器、调试器、图形用户界面等集成多种工具的应用程序(也就是大家写代码的上位机软件)。 通用IDE 1.KeilMDK 网址: https://www.keil.com/ 后续可能会将Keil MDK 升级为 Keil Studio,后台回复关键字【Keil系列教程】查看更多内容。 2.IAREWARM 网址: https://www.iar.com/ 后台回复关键字【IAR系列教程】查看更多内容。 3.Embedded Studio
[单片机]
<font color='red'>STM32</font>常用的一些开发工具
stm32中断解释
一,中断优先级: STM32(Cortex-M3)中的优先级概念 STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 当 两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后 才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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