参考链接1:(设置读保护)
GD32F4x 如何开启读保护功能(芯片加密)?_EmbeddedOsprey的博客-CSDN博客
参考链接2:读取芯片ID进行加密
《嵌入式 – GD32开发实战指南》第19章 程序加密_gd32大小端_Bruceoxl的博客-CSDN博客
参考链接3:
1:GD32F103 、GD32F303 与 STM32F103 基本上兼容的,甚至可以直接使用ST 的库操作,所以替换起来还是相当方便的。
2. 首先看看 GD32F1的或者说 STM32F1的:
//开启读保护
if(FLASH_GetReadOutProtectionStatus() != SET)
{
FLASH_Unlock();
FLASH_ReadOutProtection(ENABLE);
FLASH_Lock();
}
//关闭读保护
if(FLASH_GetReadOutProtectionStatus() != RESET)
{
FLASH_Unlock();
FLASH_ReadOutProtection(DISABLE);
FLASH_Lock();
}
事实上,读保护一旦开启,如果解除读保护,同时也会由硬件自动清除掉代码,所以如果你通过调试器取消读保护时,会自动清除代码,防止被它人读取数据。
而一旦开启了读保护,你是无法通过调试器读取 FLASH 的,你读取的数据全是 0xff ,同时也无法通过调试器在线调试,所以,正在开发的产品一般不会加入这个功能,只有量产时才会加入,否则出现问题难定位。
如果需要重新下载,可以使用 KEIL 软件的这个擦除按钮:
3. F4的读保护
if(ob_spc_get() != SET)
{
ob_unlock();
ob_security_protection_config(FMC_LSPC);
ob_start(); // 特别注意这条语句
ob_lock();
}
4. 另外,产品一般会禁用 SW 引脚的调试功能,F1 和 F4 的方式不一样:
F1 的由专门语句负责:
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,DISABLE);
5. 而F4 就是把 PA13、P14 重新配置即可(即不使用默认功能,可设置为下拉输入):
rcu_periph_clock_enable(RCU_GPIOA);
gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_PULLDOWN, GPIO_PIN_13 | GPIO_PIN_14);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13 | GPIO_PIN_14);