APM pin to pin替换STM32,程序需要修改的地方

2024-03-02 00:20

本文主要是介绍APM pin to pin替换STM32,程序需要修改的地方,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、关于APM

二、问题描述

三、解决办法


一、关于APM

APM32是基于ARM® Cortex®-M0+/M3/M4内核的优质国产(Geehy 极海半导体)32位通用MCU,具有低功耗、高性能、高集成度以及快速移植等特性。凭借优异的系统性能、丰富的协处理功能以及灵活的使用体验,有助于用户缩短产品设计时间、降低开发成本、实现性能最优化。目前可广泛应用于工业控制、医疗设备、汽车电子以及智慧家庭等领域。

发展时间线:

二、问题描述

APM的同系列型号是完全可以pin to pin替换STM32,软件还是使用STM32的工程。但是在用APM的单片机在pin to pin替换STM32单片机的时候,遇到了一些坑,给项目应用带来了不小的麻烦,投入了不少精力反复的测试验证才最终解决

替换芯片:STM32F103RET6 ---> APM32F103RET6

问题:参数被写成NAN值、远程升级死机、boot前4字节被置为0。这些问题都有一个共同点,就是都是对片内FLASH进行操作

三、解决办法

1、修改Flash操作等待周期,改成到4

APM的HCLK最高是96MHZ,所以FLASH等待周期也要对应的改为4,也就是3WS,LATENCY[2:0] = 0011

程序修改:

(1)、LL_FLASH_SetLatency设置为LL_FLASH_LATENCY_3

(2)、LL_FLASH_LATENCY_3如果没有找到定义,需要自己添加上

2、操作FLASH的时候都要先关全局中断、再开全局中断

FLASH操作函数(写、擦除)中,HAL_FLASH_Unlock()前加入__disable_interrupt(),HAL_FLASH_Lock()后加入__enable_interrupt()。注意,如果有boot,boot中有操作FLASH的地方也需要一并修改!

STM32的单片机也一样需要添加上,ST的我之前也遇到过参数被写成NAN值的,通过写检验、增加备份等方式反反复复也没有根治,大概率也是这个原因导致的,只是ST出现的概率要比APM的小很多

程序修改:

int stm32_flash_erase(uint32_t addr, uint32_t size)
{...__disable_interrupt();HAL_FLASH_Unlock();...HAL_FLASH_Lock();__enable_interrupt();...
}

3、外部晶体起振时间改成0xFFFFFFFF或是死等

这里是用的LL库的时钟初始化,在初始化HSE和PLL的时候都会死等时钟起来

如果是用的HAL库的时钟初始化,将CLOCKSWITCH_TIMEOUT_VALUE、HSE_TIMEOUT_VALUE 改为0xFFFFFFFF即可

这篇关于APM pin to pin替换STM32,程序需要修改的地方的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/764318

相关文章

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的

MySQL批量替换数据库字符集的实用方法(附详细代码)

《MySQL批量替换数据库字符集的实用方法(附详细代码)》当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改,下面:本文主要介绍MySQL批量替换数据库字符集的实用方法... 目录前言为什么要批量修改字符集?整体脚本脚本逻辑解析1. 设置目标参数2. 生成修改表默认字符集的语句3

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图