stm32怎样实现软件复位
修改startup.a51,根据需要设置启动时置零的idata域。
其实对于你这种应用需求,应当将整个startup都重写的。
只要不掉电,复位后内部SRAM的值本身就是未被改写的。
初始化程序之前可以对复位源进行判断,并添加锁定变量判定是否出现异常复位。
stm32 上电复位 和软复位有什么区别.该如何解决
展开全部 软件复位看图片,有个函数实现复位,上电复位就是上电后复位,有上电复位电路,电容电阻电感组成、可以查查去,两个没啥大的区别,我一般都是加个复位按键,这样调试的时候比较方便,另外一般程序里加看门狗的时间过了不喂狗,狗狗会给片子复位。
。
...
STM32单片机看门狗复位后,全局变量的值会怎么处理
一般可以这么计算:总的管脚数量xSWD下载口2,jtag的话4个电源正负各4,少于等于32脚的单片机电源正负一般各2个模拟电源地各1复位1高速时钟和低速时钟各2,都可以不接基本上剩下的就是x-2-8-2-1-4=x-15,这个只是粗略的这么说,具体情况会上下浮动
stm32 复位问题
1,下面以流水灯为例说明STM32CubeMX软件的使用。
2, 第一步,建立并保存工程。
3,启动STM32CubeMX软件,界面如图2所示。
4,点击New Project,在New Project对话框中选择Board Selector标签页,在这里有各种ST评估板可以选择,我们选择STM32F429I-DISCO,最后点击OK,如图3所示。
这样就建立起了STM32F429I-DISCO评估板的工程,这个工程已经根据评估板设置好了,然后可以生成相应的代码。
5,为了演示如何使用STM32CubeMX软件,关闭刚刚建立的工程,从头建立一个新的工程。
点击New Project,在New Project对话框中选择Mcu Selector标签页,然后在MCU Filter中依次选择STM32F4,STM32F429/439,在下面列表中选择STM32F429ZITx,最后点击OK,如图4所示。
6,新建立的工程界面如图5所示。
STM32 从USB
我找到一个比较好的折中办法:1. IAP 起始地址0x08000000,APP 起始地址0x08004000,上电复位进入IAP 程序;2. APP 程序的长度和CRC32校验码存放在0x0800FC00(Flash最后一页);3. IAP 如果检测到是上电复位,IAP首先检查APP程序的CRC32校验码是否正确,如果正确则立即跳到APP程序;否则在IAP程序中等待软件重新配置APP程序FLash区;这样,USB设备重枚举只会在第一次上电的时候会出现,当然,如果STM32固件需要升级,那么软件首先请求STM32 软复位,4. STM32 软复位后进入IAP程序,IAP判断出如果是软复位,则等在IAP 中,接收上层软件的命令并配置APP Flash区;5. 配置APP Flash完成之后,软件请求跳到APP区
单片机原理的加密方法
传统软件加密方式归纳起来主要有以下几种;(1)指令伪装法 指令伪装法叫的策略是在不影响控制程序运行条件下,改变汇编语言源程序中个别指令的形态来增大反汇编代码阅读的难度,归纳起来主要有以下几种方式:a、对采用CISC指令系统的MCU芯片,用DB伪指令在两模块间插入多字节指令(双字节或3字节)的操作码,使反汇编后插入的操作码字节与下一模块第一条指令机器码组合形成新的指令(甚至会继续拆分源程序中第二条指令),使反汇编后看不到真实的汇编指令。
b、将长跳转指令中的目标地址压入堆栈,然后用RET指令代替无条件长跳转指令LJMP。
c、将长跳转指令中的目标地址送DPTR,然后用散转指令JMP @A+DPTR代替无条件长跳转指令LJMP。
不过,以上指令伪装方式最多只能增加反汇编程序的阅读难度,对破解后直接复制的盗取方式没有任何防范作用,严格地说指令伪装法并不属于软件加密范畴。
(2)破坏单片机芯片特定硬件资源加密法 破坏单片机芯片特定硬件资源加密法洲归纳起来主要有以下几种:a、故意烧坏数据总线。
对于MCS-51兼容芯片,程序代码总是从数据总线(PO口)读出,因此人为地将12V高压引到PO口某一I/O引脚,使其下拉N沟MOS管击穿——对地短路。
这一方法对防止片内代码被非法读出是有效的,但其局限性也非常明显:一方面无法通过总线方式扩展并行I/O口(破坏了芯片内部数据总线接口电路);另一方面,不能再通过并行编程方式更新片内程序代码;三是占用了芯片I/O引脚资源。
b、破坏芯片的加密锁定位。
由于Flasb ROM擦写次数仅为10K左右,因此在运行中通过IAP编程方式对芯片加密位进行多次擦写,使Flash ROM不能再擦除。
这种方式的潜在危险是万一加密位擦除失效后不能再写入,则片内代码就很容易被读出;再就是该方法也不能阻止探针攻击法。
此外,软件设计者也不能更新片内程序代码。
c、破坏MCS.51的EA引脚。
对于MCS-51兼容芯片来说,当EA引脚为低电平时,将从外部ROM执行程序。
于是有设计者试flj破坏E引脚,使MCS-51芯片复位后总是从片内执行程序,但这一方法并不能阻止通过擦除芯片加密琐定位方式读取片内代码。
(3)总线加密法 早期MCS-51芯片内部程序存储器容量小,甚至没有内部ROM,一般均需要通过总线方式扩展外部程序存储器,于是出现了所谓的总线加密法。
总线加密法主要有地址总线乱序法、数据总线乱序法,或在MCU芯片地址总线与存储器地址总线间增加可编程芯片(如GAL、FPGA等)俐,使MCU芯片地址与存储器地址之间形成新的映射关系。
这些加密方式对采用外设程序存储器的早期的MCS-51应用系统来说也许有一定的作用,但目前几乎所有的单片机应用系统都不再采用外部程序存储器。
经过长期实践,针对目前主流单片机芯片硬件特征,本文提出了基于芯片身份识别码、片内RC振荡器频率离散性、上电标志等3种实用的单片机控制程序加密方式。
二、基于芯片身份识别码的加密方法 为提高片内程序代码的安全性,最近上市的某些MCU芯片,如STC公司2009年后推出MCS-51兼容芯片、ST公司的STM32系列芯片等每一芯片内部均具有惟一的芯片ID号。
因此,在控制程序中可充分利用这一功能完善控制程序代码的保护,该加密方式的加密步骤可按图1所示进行。
设置首次上电标志的目的是为了便于判别编程后是否开机过,第一次上电时读出并保存芯片的ID号。
为防止攻击者通过仿真方式找到芯片ID号信息,一般不宜直接存放ID号的原码,而是经过相应的加密处理后再分散存放到不同的Flash ROM存储单元中;校验方式也不宜采用常见、简单的校验规则,如和校验等,应尽可能采用某些特殊的检验方式,使攻击者不能迅速确定校验算法。
为防止攻击者获取控制程序片段中有用代码,一旦发现ID号不符,最简单办法就是借助IAP编程方式删除控制程序代码,当然也可以随机改写控制程序代码中的1~2K字节, 三、基于片内RC振荡器频率离散性的加密方法 具有惟一ID号的MCU芯片加密容易,破解成功率很低。
但由于生产成本、专利限制等原因,许多中低档MCU芯片,如大部分厂家的MCS-51兼容芯片、PIC系列芯片,甚至最近上市的STM8S系列芯片都没有惟一芯片ID号功能。
对于这类芯片,如果内部含有作为看门狗计数器时钟或唤醒时钟的RC振荡器,如Philips公司的P89LPC900系列MCS-51兼容芯片、STM8S系列芯片、PIC16/18系列芯片等均内置了一定数量的RC振荡器。
设计者可充分利用RC振荡器频率离散性生成芯片ID号,提高片内控制程序代码的安全性。
1、用RC振荡器频率作为芯片ID号 这一加密方式的加密原理大致如下:(1)复位后启动MCU芯片的某一定时器测量RC振荡器的频率。
只要定时器计数脉冲来自精度与稳定性都很高的外部石英晶体振荡器,则频率测量误差是可控的,也不会很大。
(2)考虑到RC振荡器输出信号频率受环境温度影响较大,应考虑温度变化、晶振频率误差等对测量结果的影响。
例如STM8S系列MCU芯片内部低速RC振荡器标称频率为128KHz~12.5%,通过定时器TIM3测出某一特定芯片内部RC振荡器频率为OxID4ED...
转载请注明出处51数据库 » stm单片机软件复位
吻我至凄冷的深宵sp