STM32中怎样让自己指定部分程序不受系统复位的影响?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32中怎样让自己指定部分程序不受系统复位的影响?相关的知识,希望对你有一定的参考价值。

STM32中怎样让自己指定部分程序不受系统复位的影响?

参考技术A 某些系统允许复位,但对外设又有特殊要求:某一个IO状态不能因为复位而改变,某一个定时器计数器不能改变等。

例子:A系统通过一个IO控制B系统的电源,而这个IO置高时才开启B系统的电源。

正常工作过程中,B系统只有收到A系统关机命令任务才会进行关机(也就是说不能掉电关机),而A系统在工作过程中有复位的需求。

这个时候如果使用常规的复位方式,就会复位IO,不符合要求。如果有一种方式只复位内核而不复位外设就好了。

接下来就介绍两种复位的实现方式。

2 关于复位
说到复位,我们都不会陌生,系统基本都有一个复位按键。

复位的种类有很多:上电复位、掉电复位、复位引脚复位、看门狗复位、软件复位等。

上面说的复位按键,也就是对应复位引脚复位;而本文说的内核复位与系统复位是属于软件复位。

3 内核复位与系统复位的区别
本文说的内核是指处理器内核,也就是MPU(Microprocessor Unit)。比如STM32F103,其内核就是Cortex-M3内核。

而这里的系统就是包含内核和外设,也就是MCU(Microcontroller Unit),对于STM32F103来说,就是Cortex-M3内核+各种外设接口。

内核复位:只复位Cortex-M3处理器,而不复位外设如GPIO、TIM、USART、SPI等的寄存器。

系统复位:即复位Cortex-M3处理器,又复位外设寄存器。

因此,我们常说的复位一般指的是系统复位。

4 内核复位与系统复位的函数源代码
本文以Cortex-M3(STM32F103)为例来说明,其他芯片类似。

怎样找出产生stm32硬件错误的原因

通过断点代码跟踪,在进入fun1(buf);函数时,发现SP指向了数组data所开辟的空间,同时PC、等寄存器值压入栈,在循环执行data =buf;的时候修改了压入栈的数据,导致在退出函数fun1(buf);时PC指向了错误的位置。 参考技术A 软硬件调试,用KEIL单步调试,万用表示波器测量

以上是关于STM32中怎样让自己指定部分程序不受系统复位的影响?的主要内容,如果未能解决你的问题,请参考以下文章

stm32怎样实现软件复位

我用stm32接编码器问题,配置成功,但如果编码器速度快了之后自动复位

stm32 复位问题

STM32 软件复位 3.5/早期库/自己实现

怎样找出产生stm32硬件错误的原因

嵌入式 02 STM32 09 独立/窗口看门狗实验