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即可

### APM32F103 替代 STM32F103 的可行性 APM32F103C8T6 和 STM32F103C8T6 在软硬件上具有高度兼容性,这意味着在许多情况下可以直接替换而无需大幅修改现有设计。这种兼容性使得更换芯片成为可能,尤其是在资源受限的情况下寻找更具成本效益的选择时。 #### 软件兼容性 软件层面的兼容性意味着现有的固件可以在不作任何更改或仅需少量调整的情况下运行于新芯片之上。这得益于两者相似的核心架构以及外设接口的一致性[^1]。 ```c // 示例代码展示如何初始化定时器,在两种MCU上的实现基本相同 void Timer_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_TimeBaseStructure.TIM_Period = 999; TIM_TimeBaseStructure.TIM_Prescaler = 7199; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); TIM_Cmd(TIM2, ENABLE); } ``` #### 硬件兼容性 硬件方面同样保持了一定程度的一致性,特别是在引脚定义和电气特性上。然而需要注意的是,尽管大多数应用中可以直接物理替换,但在某些特殊应用场景下仍可能存在细微差异,因此建议仔细核对数据手册中的具体参数。 --- ### 更换方案注意事项 - **电源电压范围**:确认目标系统的供电条件是否满足新的微控制器的要求。 - **工作温度区间**:确保环境温湿度不会超出所选型号的工作极限。 - **I/O电平标准**:验证输入输出信号逻辑电平匹配情况。 - **通信协议支持度**:检查串口、SPI、IIC等通讯方式能否无缝衔接既有设备。 - **中断向量表位置**:如果程序存储区发生变化,则需要相应更新启动文件内的中断向量映射关系。 - **库函数版本一致性**:当依赖第三方开发工具链时,务必保证其能够良好适配新版处理器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值