一. MM32-Link配合MM32Program方式
1. 在MM32Program中做读保护设置

2. 在汇编程序中的设置:
如使用IAR开发项目,在\Device\MM32F013x\Source\IAR_StartAsm\startup_mm32f013x_iar.s中,
添加如下代码:

即 DS8 1024 ;reserved 1024 bytes
如使用KEIL开发项目,在\Device\MM32F013x\Source\KEIL_StartAsm\startup_mm32f013x_keil.s中,
添加如下代码:

即 data2xyz FILL 1024,0xBF00,2 ; defines 1024 bytes containing 0xBF00
编译通过后使用MM32Program+MM32LINK烧录器,烧录到目标MCU,记得烧录成功后需要断电重上电一次 确保读保护操作成功。
二. 使用其它第三方烧录工具方式
1. 如不是通过MM32Program+MM32LINK烧录器,烧录到目标MCU,而是通过其他第三方烧录工具烧录到目标MCU(以非保护的方式),则需要在程序添加上述写读保护代码与判断是否已设置读保护动作,来实现MM32F013x RevC的读保护;
烧录好后,第一次上电,判断是否已经读保护,如果未读保护则执行配置读保护程序,否则运行主代码;
断电后,再次上电,就完成的读保护了;
具体代码如下:
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief Read protection for the main flash
- /// @note This function can be used for protect devices.
- /// @retval None.
- ////////////////////////////////////////////////////////////////////////////////
- FLASH_Status FLASH_ProgramProtectSpecialRev(void)
- {
- FLASH_Status ret;
- ret = FLASH_ProgramOptionHalfWord(0x1FFE0000, 0xFE01);
- if (ret != FLASH_COMPLETE) {
- return ret;
- }
- ret = FLASH_ProgramOptionHalfWord(0x1FFE0002, 0xFF00);
- if (ret != FLASH_COMPLETE) {
- return ret;
- }
- ret = FLASH_ProgramOptionHalfWord(0x1FFE0004, 0xC03F);
- if (ret != FLASH_COMPLETE) {
- return ret;
- }
- ret = FLASH_ProgramOptionHalfWord(0x1FFE0006, 0xFE01);
- if (ret != FLASH_COMPLETE) {
- return ret;
- }
- return ret;
- }
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief Check Read protection status of the main flash
- /// @note This function can be used for protect devices.
- /// @retval None.
- ////////////////////////////////////////////////////////////////////////////////
- bool Check_MainFlashProtectSpecialRev(void)
- {
- u16 temp;
- temp = *(__IO u16*)(0x1FFE0000);
- if (temp != 0xFE01) {
- return false;
- }
- temp = *(__IO u16*)(0x1FFE0002);
- if (temp != 0xFF00) {
- return false;
- }
- temp = *(__IO u16*)(0x1FFE0004);
- if (temp != 0xC03F) {
- return false;
- }
- temp = *(__IO u16*)(0x1FFE0006);
- if (temp != 0xFE01) {
- return false;
- }
- return true;
- }
作者: SnailWillow, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-3931539.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论