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

2023-05-16

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 处理器外部的任何电路,所以单片机上的各片上外设和其它电路都不受影响。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32中NVIC_SystemReset()函数的作用?什么时候用? 的相关文章

随机推荐

  • 重定向printf,不使用微库,采用ARM Compiler 6 报错如何解决?

    复制正点原子的以下代码 xff0c 不使用微库 xff0c 采用ARM Compiler 6 报错 xff1a 报错 xff1a pragma import is an ARM Compiler 5 extension and is not
  • uint8_t / uint16_t / uint32_t /uint64_t 这些数据类型是什么?

    uint8 t uint16 t uint32 t uint64 t 都是别名 xff0c c语言中有哪些数据类型 xff1f 怎么样取别名 在C语言中有6种基本数据类型 xff1a short int long float double
  • 使用stm32c8t6和mpu6050制作一台穿越机

    飞控部分 xff1a 介绍 xff1a 使用stm32c8t6和mpu6050制作一款低价飞控 xff0c 固件用的是开源的betaflight 3 2 5 NAZE xff0c 飞行噪声很小 xff0c 可能是桨叶好 xff0c 乾丰5寸
  • 小米平衡车plus放久后无法充电解决办法

    半年没在家 xff0c 电池没充电 xff0c 回来后发现已经无法充电 xff0c 看了网上一些 激活神器 的产品 xff0c 有人说是智商税 xff0c 我猜那个东西也没什么神奇的东西 xff0c 像这款plus的充电线上3孔的 xff0
  • c语言宏函数怎么传递宏参数_C语言中的宏参数评估

    c语言宏函数怎么传递宏参数 We can define a function like Macro in which we can pass the arguments When a Macro is called the Macro bo
  • MiniFly V1.1开源四轴驱动代码分析八:旋转矩阵、控制分配矩阵等分析介绍

    很久没更新 看见订阅数量持续增加 感觉得加点料才对得起大家的 旋转矩阵 前言 在网上搜索到的一下关于旋转矩阵的表达形式 看起来很像 都是三角函数组合成 不同资料的正负号或者字母不一样 甚至一些是有模有样的复制粘贴 看的脑壳疼 旋转矩阵的形式
  • 数据区、栈区、堆区、代码区

    简介 1 栈区 stack xff1a 由系统的编译器自动的释放 xff0c 主要用来存放方法中的参数 xff0c 一些临时的局部变量等 xff0c 并且方法中的参数一般在操作完后 xff0c 会由编译器自动的释放掉 2 堆区 heap 由
  • 上位机PC控制UR3机器人实现方式

    一 在计算机上安装urx 库 终端输入 xff1a pip install urx xff1b 参考和例程下载见 xff1a https github com SintefManufacturing python urx xff1b 二 利
  • STM32实战项目-串口打印

    前言 xff1a 本小结主要实现串口打印功能 xff0c 主要将上一结的状态机运行次数 xff0c 通过串口在串口终端上打印出来 xff0c 硬件电路上主要是TTL转USB驱动电路 xff0c 软件上主要有状态机函数 xff0c 串口发送函
  • CURL详解

    原文链接 xff1a https www cnblogs com xishaonian p 6550613 html span class token number 1 span CURL详解 span class token number
  • STM32F103C8T6串口通信

    STMF103C8T6串口通信 串口相关的固件函数 xff1a mainusart cusart h 串口作为 MCU 的重要外部接口 xff0c 同时也是软件开发重要的调试手段 xff0c 其重要性不言而喻 关于STM32F103C8T6
  • 单片机(中断系统-串口通信)

    1 RETI 中断操作指令 这条指令的功能和RET指令相似 xff0c 2条指令的不同之处是 xff1a 本指令清除了中断响应时 xff0c 被置1的MCS 51内部不可寻址的 优先级生效 触发器清零 中断程序完成后 xff0c 一定要执行
  • ESP32 for arduino 的3个hardware serial

    在arduino IDE的开发环境中 xff0c 如果使用的开发板不是arduino的开发平台 xff0c 而是ESP32模组的开发板 xff0c 那么在实际开发中由于ESP32的支持库与arduino不同 xff0c 会使得我们在使用一些
  • 大疆开发板A型基于HAL库驱动M3508直流无刷电机及PID控制

    1 首先 xff0c 我们先了解一下大疆开发板A型的资料 xff0c 官方有提供 官网 xff1a RoboMaster 机甲大师赛 芯片型号STM32F427IIH6 2 了解M3508直流无刷电机的资料 xff0c 官网有提供 3 于是
  • [note] C++ STL初步(二) 迭代器、算法和映射

    STL算法 迭代器和映射总结 迭代器 迭代器的提出 算法函数独立于数据结构无疑是一种很好的思路 xff0c 它高度体现了OOP的核心思想 但很快 xff0c 我们就会发现因各数据结构的访问形式不同 xff0c 困难显而易见 比如 xff1a
  • python 用 xlwings 处理 Excel 中的重复数据

    xlwings 简介 xlwings 是一个 Python 库 简化了 Python 和 Excel 通信 xlwings 让Excel跑得飞快 本文写作背景 amp 需求 amp 方案 因前几个月帮在医院工作的朋友现学现卖用VBA写了段程
  • STM32学习(5)外部中断实验

    STM32 的每个 IO 都可以作为外部中断的中断输入口 xff0c 这点也是 STM32 的强大之处 STM32F103 的中断控制器支持 19 个外部中断 事件请求 每个中断设有状态位 xff0c 每个中断 事件都有独立的触发和屏蔽设置
  • STM32学习(6) 定时器中断实验

    基本定时器功能简介 1 计数器16bit xff0c 只能向上计数 xff0c 只有TIM6和TIM7 2 没有外部的GPIO xff0c 是内部资源 xff0c 只能用来定时 3 时钟来自PCLK1 xff0c 为72M xff0c 可实
  • STM32学习(7)PWM 输出实验

    脉冲宽度调制 PWM xff0c 是英文 Pulse Width Modulation 的缩写 xff0c 简称脉宽调制 xff0c 是利用 微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术 简单一点 xff0c 就是对脉冲宽度的
  • STM32中NVIC_SystemReset()函数的作用?什么时候用?

    STM32软件复位有两种方式 xff08 1 xff09 方式一 xff1a NVIC SystemReset 函数用来复位STM32 注意1 xff1a 从SYSRESETREQ 被置为有效 xff0c 到复位发生器执行复位命令 xff0