STM32中NVIC_SystemReset()函数的作用?什么时候用?

发布者:SereneSoul55最新更新时间:2018-09-13 来源: eefocus关键字:STM32  NVIC_SystemReset()函数 手机看文章 扫描二维码
随时随地手机看文章

STM32软件复位有两种方式


(1)方式一:NVIC_SystemReset()函数用来复位STM32.

注意1:从SYSRESETREQ 被置为有效,到复位发生器执行复位命令,往往会有一个延时。在此延时期间,处理器仍然可以响应中断请求。但我们的本意往往是要让此次执行到此为止,不要再做任何其它事情了。所以,最好在发出复位请求前,先把FAULTMASK置位。需要加上这句:__set_FAULTMASK(1);意思是关闭所有中断的意思,目的是在执行NVIC_SystemReset()复位函数过程中不被中断所打断。两个函数执行后系统复位重新执行代码,包括之前所配置好的外设寄存器也都回到复位状态。如下:

__set_FAULTMASK(1);//关闭所有中断

NVIC_SystemReset();//复位函数

注意2:上面两个函数在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);                  

  __DSB();                                                                  

  while(1);                                                    

}

另外一些NVIC函数在misc.h中。

(2)方式二:1、通过置位NVIC中应用程序中断与复位控制寄存器(AIRCR)的VECTRESET位:

LDR R0, =0xE000ED0C ; NVIC AIRCR address

LDR R1, =0x05FA0001 ; 置位 VECTRESET位,前面的0x05FA是访问钥匙

STR R1, [R0] ; 触发复位序列

deadloop

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

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


关键字:STM32  NVIC_SystemReset()函数 引用地址:STM32中NVIC_SystemReset()函数的作用?什么时候用?

上一篇:stm32 中空编码器tim4初始化
下一篇:STM32 FLASH读、写、擦除

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

STM32堆栈整理
STM32的堆栈大小在官方文件已经定义好了,分别是: Heap_Size EQU 0x00000200 一共512字节 Stack_Size EQU 0x00000400 一共1K字节 /***********************************************************************************/ 但是STM32在keil环境下每次编译后的堆栈起始地址并不是固定的(就算事先已经定义好了堆栈的大小),因为栈的起始地址是由用户程序中事先定义好的变量数目决定的(实测是如此)。但欣慰的是,一旦这次编译之后,堆栈的首地址就不会再发生改变了,换言之,就是在烧完程序之后,堆栈的地
[单片机]
<font color='red'>STM32</font>堆栈整理
STM32中断机制
简介:下图是一条外部中断线或外部事件线的示意图,图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套。 这张图是一条外部中断线或外部事件线的示意图,图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套。 图中的蓝色虚线箭头,标出了外部中断信号的传输路径,首先外部信号从编号1的芯片管脚进入,经过编号2的边沿检测电路,通过编号3的或门进入中断“挂起请求寄存器”,最后经过编号4的与门输出到NVIC中断控制器;在这个通道上有4个控制选项,外部的信号首先经过边沿检测电路,这个边沿检测电路受上升沿或下降沿选择寄存器控制,用户可以使用这两个寄存器控制需要哪一个边沿产生中断,因为选择上升沿或下
[单片机]
<font color='red'>STM32</font>中断机制
STM32 ADC详解
01、ADC简介 ADC是Analog-to-DigitalConverter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。 从STM32F207的数据手册中下图看到,STM32F207VC有3个精度为12bit的ADC控制器,有16个外部通道,而144脚的STM32F207Zx和176脚的STM32F207Ix因为带PF脚,所以多8个通道,为24个外部通道。各通道的A/D转换可以单次、连续、扫描或间断执行,ADC转换的结果可以左对齐或右对齐储存在16位数据寄存器中。 02、STM32的ADC外设 上面说
[单片机]
<font color='red'>STM32</font> ADC详解
如何快速上手STM32学习?
单片机用处这么广,尤其是STM32生态这么火!如何快速上手学习呢? 你要考虑的是,要用STM32实现什么? 为什么使用STM32而不是用8051?是因为51的频率太低,无法满足计算需求?是51的管脚太少,无法满足众多外设的IO?是51的功耗太大,电池挺不住?是51的内存太小而你要存储的东西太多?还是51的功能太弱,而你要使用SPI、I2C、ADC、DMA? 当你需要使用STM32某些功能,而51实现不了的时候,那STM32自然不需要学习,你会直接去寻找STM32某方面的使用方法。比如要用spi协议的网卡、要使用串口通信、要使用rtos等等。 寄存器vs库函数 我的观点是:当你debug的时候寄存器很重要,当你需要理解芯片工作细
[单片机]
关于stm32寄存器地址定义的小结
最近一直在研读正点原子的stm32开发板,在学习SysTick寄存器的过程中查不到该寄存器的地址是在哪里定义的,很是不解。上网搜后发现 http://www.eepw.com.cn/article/246289.htm 部分代码粘贴如下: typedef struct { __IO uint32_t CTRL; /*! Offset: 0x000 (R/W) SysTick Control and Status Register */ __IO uint32_t LOAD; /*! Offset: 0x004 (R/W) SysTick Reload Value Register */ __IO uint32_
[单片机]
STM32入门学习之GPIO(STM32F030F4P6基于CooCox IDE)(三)
先直接上代码 #include stm32f0xx.h #include stm32_lib/inc/stm32f0xx_rcc.h #include stm32_lib/inc/stm32f0xx_gpio.h int main(void) { //1、使能时钟 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //定义一个IO GPIO_InitTypeDef PORT_LED; //设置IO引脚,模式,输出类型,速度 PORT_LED.GPIO_Pin=GPIO_Pin_4;//IO引脚,第4脚(个人的小板子PA4有连接LE
[单片机]
<font color='red'>STM32</font>入门学习之GPIO(STM32F030F4P6基于CooCox IDE)(三)
关于STM32中断向量表的位置 、重定向问题
首先我们需要跳到main函数,这个就不多说了。那么,中断发生后,又是怎么跑到中断入口地址的呢? 从stm32f10x.s可以看到,已经定义好了一大堆的中断响应函数,这就是中断向量表,标号__Vectors,表示中断向量表入口地址,例如: AREA RESET, DATA, READONLY ; 定义只读数据段,实际上是在CODE区(假设STM32从FLASH启动,则此中断向量表起始地址即为0x8000000) EXPORT __Vectors IMPORT OS_CPU_SysTickHandler IMPORT OS_CPU_PendSVHandler __Vectors DC
[单片机]
关于<font color='red'>STM32</font>中断向量表的位置 、重定向问题
Stm32的io口模拟spi例程分析
以下是硬件电路图,主芯片为stm32rbt6. 贴上代码 void SPI_FLASH_Init1(void)//io初始化配置 { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_9;//CS CLK GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStruc
[单片机]
<font color='red'>Stm32</font>的io口模拟spi例程分析
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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