近期有一个STM32F107的项目需要移植到GD32F307。遇到一个问题发现其他移植教程中都没有提到。

目录

1.首先是按照网上的教程:

1)修改启动时间宏定义

2)修改内部flash

3)flash访问时间

2.这个是其他教程中没有提到的

1)floating point hardware设置

总结:




1.首先是按照网上的教程:

1)修改启动时间宏定义

#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500)

修改为:

#define HSE_STARTUP_TIMEOUT ((uint16_t)0xFFFF)

2)修改内部flash

在写完KEY 序列以后,需要读该位,确认key 已生效。

需要插入:while((FLASH->CR&CR_OPTWRE_Set)!=CR_OPTWRE_Set ){}

#define CR_OPTWRE_Set ((uint32_t)0x00000200)

在ST库中,有以下四个函数中需要修改:

FLASH_Status FLASH_EraseOptionBytes(void)

FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data)

FLASH_Status FLASH_EnableWriteProtection(uint32_t FLASH_Pages)

FLASH_Status FLASH_ReadOutProtection(FunctionalState NewState)

示例:

FLASH_Status FLASH_EraseOptionBytes(void)
{uint16_t rdptmp = RDP_Key;FLASH_Status status = FLASH_COMPLETE;/* Get the actual read protection Option Byte value */ if(FLASH_GetReadOutProtectionStatus() != RESET){rdptmp = 0x00;  }/* Wait for last operation to be completed */status = FLASH_WaitForLastOperation(EraseTimeout);if(status == FLASH_COMPLETE){/* Authorize the small information block programming */FLASH->OPTKEYR = FLASH_KEY1;FLASH->OPTKEYR = FLASH_KEY2;/********看这里看这里看这里看这里看这里看这里**********/    while((FLASH->CR&CR_OPTWRE_Set)!=CR_OPTWRE_Set ){}/****************************************************/    /* if the previous operation is completed, proceed to erase the option bytes */FLASH->CR |= CR_OPTER_Set;FLASH->CR |= CR_STRT_Set;/* Wait for last operation to be completed */status = FLASH_WaitForLastOperation(EraseTimeout);if(status == FLASH_COMPLETE){/* if the erase operation is completed, disable the OPTER Bit */FLASH->CR &= CR_OPTER_Reset;/* Enable the Option Bytes Programming operation */FLASH->CR |= CR_OPTPG_Set;/* Restore the last read protection Option Byte value */OB->RDP = (uint16_t)rdptmp; /* Wait for last operation to be completed */status = FLASH_WaitForLastOperation(ProgramTimeout);if(status != FLASH_TIMEOUT){/* if the program operation is completed, disable the OPTPG Bit */FLASH->CR &= CR_OPTPG_Reset;}}else{if (status != FLASH_TIMEOUT){/* Disable the OPTPG Bit */FLASH->CR &= CR_OPTPG_Reset;}}  }/* Return the erase status */return status;
}

3)flash访问时间

GD32 由于自有flash 的0 访问时序,同STM32 在Flash 的Erase 和Program 上存在差别,GD32 的Erase 和Program 时间比STM32 的稍微长些,建议对Erase 和Program 时间进行修改。

解决方法:将宏定义

#define EraseTimeout ((uint32_t)0x000B0000)#define ProgramTimeout ((uint32_t)0x00002000)

修改为:

#define EraseTimeout ((uint32_t)0x000FFFFF)#define ProgramTimeout ((uint32_t)0x0000FFFF)

2.这个是其他教程中没有提到的

1)floating point hardware设置

一般来说,完成以上三个步骤移植就算完成了,但是我的固件烧录在固件中后,程序会不断重启。折腾了大半天,发现把下面这个配置关掉就好了。

点击“魔术棒”-“Code Generation”中的“Floating Point Hardware”,选择“Not Used”。

总结:

这个选项在STM32中貌似是没有的,把工程中的芯片包换成GD32F30x之后,就会冒出这个选项。暂不清楚有什么作用,有知道的大佬也可以在评论区解惑,谢谢啦!

关于STM32F107移植到GD32F307后,固件不断重启的一个解决方式相关推荐

  1. 【经验】Office|重装后,PPT 2016后失去平滑等功能(解决方式:使用Office Tools Plus重新安装另一版本)

    重装ppt 2016后没有平滑等功能,并且在淡入/淡出中的平滑播放的还是淡入/淡出.本文记录了解决方案. 如何下载带平滑功能的Office? 首先,不能从官网微软服务和订阅下载.因为官网的必须购买才能 ...

  2. eclipse导入项目后中文汉字出现乱码的解决方式

    注意: 这不是程序问题,是因为eclipse没有调节默认识别程序中字体的能力. 如下图所示,这个文件的中文有乱码: 就解决办法如下: 第一步,先把打开的这个文件关闭,然后在这个文件上右键选择属性: 然 ...

  3. 问题创建双网卡后,不能重启网卡的解决办法

    配置集群服务器,设置双网卡,A网卡用于外网,B网卡用于内用(-采用NAT模式,设置区间段),重启网卡失败 解决步骤:1,查询日志  tail -30 /var/log/messages  日志显示 n ...

  4. anno arm移植Qt环境后,编译正常,程序无法正常启动问题的记录

    anno arm移植Qt环境后,编译正常,程序无法正常启动问题的记录 Cannot load library libqxcb.so: (libQt5XcbQpa.so.5: symbol , vers ...

  5. Win10开启快速启动后关机变重启

    同样可以用来解决,"msconfig引导为空","默认操作系统为空","win10改为uefi启动后关机变重启","legacy转 ...

  6. 【ESP32 S2 烧录AT固件 串口与USB两种方式】

    ESP32 S2 烧录AT指令固件 串口与USB两种方式 什么是AT指令? 固件和工具下载 USB完整固件烧录 串口完整固件烧录 AT测试 本文主要介绍了对ESP32 S2进行AT指令固件烧录的具体操 ...

  7. apache 安装后默认主页无法打开_CAD教程:CAD软件打开图纸后钢筋符号无法读取的解决办法...

    设计师在日常绘图工作中经常会用CAD软件打开其他人发送过来的结构图纸,图纸打开后有些时候会出现钢筋符号显示为问号的情况.那么作为一名CAD遇到这种状况该如何解决呢?小编仔细研究了一下发现大致情况分为两 ...

  8. 关于Oracle.ManagedDataAccess数据库表加字段后,必须重启的问题

    关于Oracle.ManagedDataAccess数据库表加字段后,必须重启的问题,解决方法如下: 在数据库连接字串中,增加一个参数:Metadata Pooling=false 如"Da ...

  9. pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决

    pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决 目录 pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决 ...

  10. html不能超出div的宽度,DIV设置width后超出父元素应该如何解决

    这次给大家带来DIV设置width后超出父元素应该如何解决,解决DIV设置width后超出父元素的注意事项有哪些,下面就是实战案例,一起来看一下. 前言 本文介绍的是利用CSS3的新属性box-siz ...

最新文章

  1. IntelliJ IDEA(一、下载,安装与激活)
  2. MapReduce Job集群提交过程源码跟踪及分析
  3. 实习生对企业的认识_如何成为您认识的超级明星实习生
  4. CVPR 2021 底层视觉最新进展分享
  5. python unittest教程_Python Unittest原理及基本使用方法
  6. MYSQL语句:创建、授权、查询、修改、统计分析等 一 用户的创建、权限设置、删除等...
  7. BSW系列:CFAR算法解析
  8. 电子设计自动化实验 实验三 频率计制作
  9. SPSS单因素方差分析
  10. mstar的android方案,Mstar Android 方案.pdf
  11. GIF、SVG、PNG、图片格式转换
  12. UVM--单向通信、双向通信、多向通信和通信管道
  13. 基于netty+websocket实现门户游客实时统计功能
  14. 01-weston 简介
  15. Java 儒略历和公历的换算
  16. C++基础知识-----命名空间
  17. [003] 嵌入式学习:创建工程模板——使用STM32CubeMX
  18. 天津学计算机的专科,天津计算机网络技术大专有哪些
  19. 读小王子巩固英语词汇量
  20. 将预训练模型应用于长文本阅读理解

热门文章

  1. 右键桌面的计算机图标管理没用,计算机桌面图标消失了,鼠标右键没有响应
  2. 实现echarts中国地图迁徙图
  3. java社交框架,java毕业设计_springboot框架的社交平台
  4. 四川大学转专业到计算机学院面试,2016年本科生转专业工作面试通知
  5. 【分享】豆瓣上排名top100的书籍
  6. 避坑宝典|win11升级最新预览体验版bug梳理
  7. 学生选课系统—软件工程课程设计
  8. ubuntu 14.04 安装 minidwep-gtk, aircrack-ng, reaver 搭建抓包环境
  9. 【Python计算检验值】一元线性回归拟合,t值与p值,显著性检验
  10. 一款好用得国产SSH工具——FinalShell