GD32篇 记录
一、GD32开发版程序设置读保护,防止程序被读取
二、GD32TIMER输出PWM
平台:PC
系统:Win10 1909
开发版:GD32F103RCT6
软件:Keil、STM32 ST-LINK Utility
STM32 ST-LINK Utility下载链接:密码2022
文章目录
前言
在实际发布的产品中,在GD32芯片的内部FLASH存储了控制程序,如果不作任何保护措施的话,可以使用下载器直接把内部FLASH的内容读取回来,得到bin或hex文件格式的代码拷贝,别有用心的厂商会利用该方法山寨产品。
为了解决这个问题,GD32芯片提供了好几种保护内部Flash不被轻易读取的方式,但是一般在默认的情况下这个功能是没有打开的。
一、STM32 ST-LINK Utility?
STM32 ST-LINK Utility这个软件工具其实主要就是配套“ST-LINK”这个下载工具一起使用的上位机软件。因此使用STM32 ST-LINK Utility上位机软件需要有一个ST-LINK工具才行。它的功能和J-Link对应的工具类似,用于烧写代码。
STM32 ST-LINK Utility工具在产品开发过程中测试一些其他版本的代码,可以直接下载hex,而不用打开工程再编译去下载。 当你开发完一个STM32产品,需要量产的时候,就可以用这个工具直接下载hex代码,对代码加密(读保护)
二、使用步骤
1.ST-LINK Utility界面介绍
安装下载完成之后打开就是这个界面
点击Target
接着点击Connect
出现一下信息就说明成功读取到了内部的Flash了
很明显,已经通过ST-Link用 STM32 ST-LINK Utility读取出来了Flash 的内容,我甚至还可以保存成BIN文件
2.写入数据
接下来往Flash里面写一些内容,测试一下
代码如下(示例):
const char FIRMWARE[] __attribute__((section(".ARM.__at_0x08010000"))) ={
"WRITE FLASH"};
const char g_revision_datetime[]__attribute__((section(".ARM.__at_0x08010020"))) = __DATE__" " __TIME__;
在0x08010000这里写入“ WRITE FLASH”
在0x08010020 纪录编译代码时间
完成后编译代码,写入到芯片上,然后打开ST-LINK Utility
如下图
时间差不多
可以看到,用ST-link脸上GD32 的芯片,用ST-LINK Utility完全可以读出Flash的内容
三、GD32FMC介绍
可选项字节块编程
闪存结构
对于GD32F10x_MD,闪存页大小为1KB。
对于主存储闪存容量不多于512KB的GD32F10x_CL 和GD32F10x_HD,闪存页大小为2KB。例如RCT6
对于主存储闪存容量不少于768KB的GD32F10x_CL和
GD32F10x_XD,使用了两片闪存;前512KB容量在第一片闪存(bank0)中,后续的容量在第
二片闪存(bank1)中。其中bank0的闪存页大小为2KB,bank1的闪存页大小为4KB。主存储
闪存的每页都可以单独擦除。闪存结构见下图。
GD32F103RCT6属于GD32F10x_HD系列产品,每页的字节是2K,总共的Flash有256K,也就是0-127页
FMC相关的寄存器
/* FMC and option byte definition */
#define FMC FMC_BASE /*!< FMC register base address */
#define OB OB_BASE /*!< option bytes base address */
/* registers definitions */
#define FMC_WS REG32((FMC) + 0x00U) /*!< FMC wait state register */
#define FMC_KEY0 REG32((FMC) + 0x04U) /*!< FMC unlock key register 0 */
#define FMC_OBKEY REG32((FMC) + 0x08U) /*!< FMC option bytes unlock key register */