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中怎样让自己指定部分程序不受系统复位的影响?的主要内容,如果未能解决你的问题,请参考以下文章