关于STM32F107移植到GD32F307后,固件不断重启的一个解决方式
近期有一个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后,固件不断重启的一个解决方式相关推荐
- 【经验】Office|重装后,PPT 2016后失去平滑等功能(解决方式:使用Office Tools Plus重新安装另一版本)
重装ppt 2016后没有平滑等功能,并且在淡入/淡出中的平滑播放的还是淡入/淡出.本文记录了解决方案. 如何下载带平滑功能的Office? 首先,不能从官网微软服务和订阅下载.因为官网的必须购买才能 ...
- eclipse导入项目后中文汉字出现乱码的解决方式
注意: 这不是程序问题,是因为eclipse没有调节默认识别程序中字体的能力. 如下图所示,这个文件的中文有乱码: 就解决办法如下: 第一步,先把打开的这个文件关闭,然后在这个文件上右键选择属性: 然 ...
- 问题创建双网卡后,不能重启网卡的解决办法
配置集群服务器,设置双网卡,A网卡用于外网,B网卡用于内用(-采用NAT模式,设置区间段),重启网卡失败 解决步骤:1,查询日志 tail -30 /var/log/messages 日志显示 n ...
- anno arm移植Qt环境后,编译正常,程序无法正常启动问题的记录
anno arm移植Qt环境后,编译正常,程序无法正常启动问题的记录 Cannot load library libqxcb.so: (libQt5XcbQpa.so.5: symbol , vers ...
- Win10开启快速启动后关机变重启
同样可以用来解决,"msconfig引导为空","默认操作系统为空","win10改为uefi启动后关机变重启","legacy转 ...
- 【ESP32 S2 烧录AT固件 串口与USB两种方式】
ESP32 S2 烧录AT指令固件 串口与USB两种方式 什么是AT指令? 固件和工具下载 USB完整固件烧录 串口完整固件烧录 AT测试 本文主要介绍了对ESP32 S2进行AT指令固件烧录的具体操 ...
- apache 安装后默认主页无法打开_CAD教程:CAD软件打开图纸后钢筋符号无法读取的解决办法...
设计师在日常绘图工作中经常会用CAD软件打开其他人发送过来的结构图纸,图纸打开后有些时候会出现钢筋符号显示为问号的情况.那么作为一名CAD遇到这种状况该如何解决呢?小编仔细研究了一下发现大致情况分为两 ...
- 关于Oracle.ManagedDataAccess数据库表加字段后,必须重启的问题
关于Oracle.ManagedDataAccess数据库表加字段后,必须重启的问题,解决方法如下: 在数据库连接字串中,增加一个参数:Metadata Pooling=false 如"Da ...
- pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决
pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决 目录 pandas使用cut函数基于分位数进行连续值分箱(手动计算分位数)处理后出现NaN值原因及解决 ...
- html不能超出div的宽度,DIV设置width后超出父元素应该如何解决
这次给大家带来DIV设置width后超出父元素应该如何解决,解决DIV设置width后超出父元素的注意事项有哪些,下面就是实战案例,一起来看一下. 前言 本文介绍的是利用CSS3的新属性box-siz ...
最新文章
- IntelliJ IDEA(一、下载,安装与激活)
- MapReduce Job集群提交过程源码跟踪及分析
- 实习生对企业的认识_如何成为您认识的超级明星实习生
- CVPR 2021 底层视觉最新进展分享
- python unittest教程_Python Unittest原理及基本使用方法
- MYSQL语句:创建、授权、查询、修改、统计分析等 一 用户的创建、权限设置、删除等...
- BSW系列:CFAR算法解析
- 电子设计自动化实验 实验三 频率计制作
- SPSS单因素方差分析
- mstar的android方案,Mstar Android 方案.pdf
- GIF、SVG、PNG、图片格式转换
- UVM--单向通信、双向通信、多向通信和通信管道
- 基于netty+websocket实现门户游客实时统计功能
- 01-weston 简介
- Java 儒略历和公历的换算
- C++基础知识-----命名空间
- [003] 嵌入式学习:创建工程模板——使用STM32CubeMX
- 天津学计算机的专科,天津计算机网络技术大专有哪些
- 读小王子巩固英语词汇量
- 将预训练模型应用于长文本阅读理解
热门文章
- 右键桌面的计算机图标管理没用,计算机桌面图标消失了,鼠标右键没有响应
- 实现echarts中国地图迁徙图
- java社交框架,java毕业设计_springboot框架的社交平台
- 四川大学转专业到计算机学院面试,2016年本科生转专业工作面试通知
- 【分享】豆瓣上排名top100的书籍
- 避坑宝典|win11升级最新预览体验版bug梳理
- 学生选课系统—软件工程课程设计
- ubuntu 14.04 安装 minidwep-gtk, aircrack-ng, reaver 搭建抓包环境
- 【Python计算检验值】一元线性回归拟合,t值与p值,显著性检验
- 一款好用得国产SSH工具——FinalShell