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

相关文章

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种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

Python批量替换多个Word文档的多个关键字的方法

《Python批量替换多个Word文档的多个关键字的方法》有时,我们手头上有多个Excel或者Word文件,但是领导突然要求对某几个术语进行批量的修改,你是不是有要崩溃的感觉,所以本文给大家介绍了Py... 目录工具准备先梳理一下思路神奇代码来啦!代码详解激动人心的测试结语嘿,各位小伙伴们,大家好!有没有想

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

linux批量替换文件内容的实现方式

《linux批量替换文件内容的实现方式》本文总结了Linux中批量替换文件内容的几种方法,包括使用sed替换文件夹内所有文件、单个文件内容及逐行字符串,强调使用反引号和绝对路径,并分享个人经验供参考... 目录一、linux批量替换文件内容 二、替换文件内所有匹配的字符串 三、替换每一行中全部str1为st

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker