
1,stm32的bootloader,网上有很多例程,官网也有。文章最后我也会附上源代码链接。
开发环境keil.
设置地址如下:
这里需要一个按键(根据自己使用的开发板调整)
STM_EVAL_PBInit()//按键初始化
if(STM_EVAL_PBGetState()) //判断按键是否进入bootloader.
......
Main_Menu ()//这部分主要是bootloader升级部分,要重点细看
......
/* 这里是跳转到应用程序部分*/
if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
{
/* Jump to user application */
JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4)
Jump_To_Application = (pFunction) JumpAddress
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) ApplicationAddress)
Jump_To_Application()
}
......
2,找一个支持Ymodem的串口工具,这个很重要。有很多都不能升级,然后我去secureCRT官网下载了个试用版本就可以IAP了。
Download - SecureCRT (vandyke.com)
http://pan.baidu.com/s/1dELQHY5
密码:9yum 打开软件 根兄旁宴据自己电脑系统,选择对应版本 第一次打开会d出快速羡银链接,选择串口协议,然后点击连接启友。 , 根据实际情况设置端口,和波特率,去掉流控制, 点连接。 如果什么也没有提示说明连接成功。三、利用id做软件加密1,如果板子上有外部存储器,可以先编写一个程序,利用算法把id计算得到一些值存入外部存储器,然后再烧写真正的程序,真正的程序去校验外部存储器的数据是悔颤否合法即可
2,利用板子上按键组合,或是上电按住某些键,程序在这个时候利用算法把id计算得到一些值存入程序区(stm8为EE区),程序运行时去验证程序区数据是否正确
3,轩微编程器有软件加密轿前毁的功能,编程器会读芯片id,根据算法直接改写缓冲区,达到软件加密的作用
4,读出的id通过一定算法,例如异或加上一个数,得到的数据存入flash(只运行一次,运行后标志位也存入flash),下次读到这闭备个标志位,就不运行这个程序。
四、做软件加密时注意
1,不要在程序中直接出现id地址,例如STM32:1FFFF7E8 1FFFF7EC 1FFFF7F0 STM8: 0x4865~0x4870
2, 利用校验和或是crc对程序区进行校验,防止改程序
1、为你的bootloader程序选择存储器地址,因为STM32的存储器FLASH存储程序代码空间为512K,需要进行划分。2、如果需要使用JTAG在线调试,则需要配置区域:3、为您的用户程序选择合适的存储空间:同时配置在线调试区域:4、bootloader程序编写基本流程如下:)检测有无需要更新的标志,用户可自定义。比如说读取flash某位置存储的字节作为标志位。2)如需更新,则调用STM32的FLASH程序擦鞋用户代码部分。3)将新的bin文件(即2进制文件直接烧写进去,需要将keil生成的hex文件转换为bin文件,然后存储到外扩展的flash中)写入到STM32自带的FLASH中去,记住需要与上述设置的仿灶用户代码存储区一致。4)更新成功后芹衫再跳转至用户程序。5、用户程序需要注意一点,需要在程序运行前重新设置中断向量表,即:NVIC_SetVectorTable()。6、用STM32自带的烧录软件进行烧录时,需要修改项目如下:1)打开安装后目标文件中的map文件夹,我们所用的STM32为512Kflash,所以选取STM32_High-density_512K.STmap,将其分解为两个STmap文件(此文件可用记事本 打开)STmap文件中,扇区是以每2K为一page来显示的,所以boot区我们只需要到page7,用户区我们需要page8到最后。修改完成后再次打开此软件会发现多出了两个flash选项,可以根据此处来选择需要存储的代码区。然后嫌大腔还有一处需要修改欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)