0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用APM32F407替代STM32F407制作的demo

GReq_mcu168 来源:21ic电子网 作者:WuKaiLi 2022-05-10 14:37 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

最近一段时间在玩极海的APM32F407系列的MCU,在研究一段时间后发现其资源和意法半导体STM32F407不相上下。通过对比两者的数据手册和参考手册,我发现APM32F407替代STM32F407绰绰有余。我拿出了我吃灰已久的一块开发板“启明欣欣 IMT407 V5.1”(淘宝搜索“启明欣欣”)。预计将开发板上的STM32F407芯片替换成APM32F407的芯片,看看会发生什么样的事情。

本文记录一下我使用APM32F407替代STM32F407制作的一个小demo(使用SPI外设读取W25Q128)。该demo使用原开发板电路,看看将主控换成APM32F407后看看能不能做到pin对pin的完美替代。

本文使用环境:

硬件

启明欣欣 IMT407 V5.1(APM32F407ZGT6)

J-link v9.7

IMT 2.8 TFTLCD

USB转TTL

软件:

MDK-ARM Plus Version: 5.36.0.0

fireTools

固件或例程库:

1.APM32F4xx_SDK_V1.1

2.启明欣欣STM32F407(高配版V5.1)学习资料(2 各资源学习例程标准库版本15 SPI_W25Qxx)

参考文档:

1.APM32F4xxx用户手册 V1.1

2.APM32F405xG 407xExG数据手册 V1.1

3.启明欣欣407开发板(高配版)V5.1原理图

4.STM32F4xx中文参考手册

5.STM32F407ZGT6数据手册.pdf

先上一下替换芯片后的板子照片(原谅我的渣渣焊工):

2de71d54-d029-11ec-bce3-dac502259ad0.png

1 环境配置

1.1 APM32F407开发环境

在极海官网获取最新的SDK"APM32F4xx_SDK_V1.1",在其目录下有Pack“Geehy.APM32F4xx_DFP.1.0.1.pack”,安装完毕后才能使用keil开发APM32F407芯片。

2e02e7e6-d029-11ec-bce3-dac502259ad0.png

1.2 添加APM32F407驱动库文件

a.在原工程下添加APM32F407的驱动库(本文节取原开发板例程中的SPI_W25Qxx例程),复制APM32F4xx_SDK_V1.1下的Library文件夹至工程目录,改名为APM32F4xx_Library。

2e132cc8-d029-11ec-bce3-dac502259ad0.png

b.在原工程下添加APM32F407的中断控制函数文件。将“APM32F4xx_SDK_V1.1ExamplesTemplateTemplateSource”和“APM32F4xx_SDK_V1.1ExamplesTemplateTemplateInclude”下的“apm32f4xx_int.c”和“apm32f4xx_int.h”复制至工程目录“Main”下。

2e207a4a-d029-11ec-bce3-dac502259ad0.png

1.3 添加APM32F407工程及目录

a.在“Project Items”目录下新增“APM32F407”工程,以便换不同的工程进行编辑编译下载。

b.在“Groups”目录下新增“APM32F4xx_StdPeriphDriver”与“APM32F4xx_Startup_config”分组。

c.分别在“APM32F4xx_StdPeriphDriver”与“APM32F4xx_Startup_config”分组下添加本次例程使用到的驱动文件。

d.在“Main”分组下添加我们上一节增加的内容“apm32f4xx_int.c”。

2e310b62-d029-11ec-bce3-dac502259ad0.png

2e41a814-d029-11ec-bce3-dac502259ad0.png

2e50deb0-d029-11ec-bce3-dac502259ad0.png

1.4 更改APM32F407工程芯片

将工程“APM32F407”的芯片选型设置为“APM32F407ZG”。

2e61741e-d029-11ec-bce3-dac502259ad0.png

1.5 设置编译选择

a.设置不同工程目录下的编译选择,以控制不同的工程下编译的文件。

2e6f4cf6-d029-11ec-bce3-dac502259ad0.png

“APM32F407”工程去除STM32的编译文件包含。

2e7f5da8-d029-11ec-bce3-dac502259ad0.png

b.设置“APM32F407”工程的声明为“APM32F40X”。

c.增加“APM32F407”工程中APM32F407驱动库文件头文件目录。

2e8edaa8-d029-11ec-bce3-dac502259ad0.png

2 底层驱动替换

更改代码,将STM32的驱动函数替换为APM32的驱动函数,这部分比较繁琐,需要慢慢替换。可根据工程所需外设的驱动进行对照替换。如我们现在的工程主要涉及到的外设有:misc/gpio/spi/fsmc/usart/rcm。可以通过查看两者的参考手册,查看那些寄存器功能基本一致的对应的库函数的功能也基本一致。

2.1 外设与库函数对照

我这里也整理了本次替代过程中常用外设的寄存器与库函数的参照,供大家参考。这里截取部分内容,更多内容请查阅附件(*附件下载链接:

https://bbs.21ic.com/forum.php?mod=viewthread&tid=3220654&page=1&extra=)。

2e9e51e0-d029-11ec-bce3-dac502259ad0.png

2eb0deaa-d029-11ec-bce3-dac502259ad0.png

2.2 驱动替换方式

由于前文我们已经将“APM32F407”工程的声明设置为“APM32F40X”,这里我们仅需将涉及外部功能模块的源码文件内的驱动进行替换。通过宏定义的方式以支持不同平台的文件。

如包含头文件时:


#ifdef STM32F40_41xxx
/** 原 stm32 接口或外设驱动 */
#include "stm32f4xx.h"
#endif

#ifdef APM32F40X
/** 替换为 apm32 接口或外设驱动 */
#include "apm32f4xx.h"
#include "apm32f4xx_misc.h"
#include "apm32f4xx_spi.h"
#include "apm32f4xx_rcm.h"
#include "apm32f4xx_smc.h"
#include "apm32f4xx_gpio.h"
#include "apm32f4xx_usart.h"
#endif

如替换GPIO外设驱动时:

#ifdef STM32F40_41xxx
/** 原 stm32 接口或外设驱动 */
GPIO_InitTypeDef GPIO_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); //使能GPIOF时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; //KEY0 KEY1 KEY2 KEY3对应引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //普通输入模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //100M
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOF, &GPIO_InitStructure); //初始化GPIOF6,7,8,9
#endif

#ifdef APM32F40X
/** 替换为 apm32 接口或外设驱动 */
GPIO_Config_T GPIO_InitStructure;

RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_GPIOF);

GPIO_InitStructure.pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
GPIO_InitStructure.mode = GPIO_MODE_IN;
GPIO_InitStructure.speed = GPIO_SPEED_100MHz;
GPIO_InitStructure.otype = GPIO_OTYPE_PP;
GPIO_InitStructure.pupd = GPIO_PUPD_UP;

GPIO_Config(GPIOF, &GPIO_InitStructure);

#endif

替换过程较为繁琐,这里不再一一赘述。具体代码实现大家可参考附件源码。

3 程序下载与仿真

由于我们的已做双工程处理,在修改底层驱动至APM32F407时并不影响原工程内容,我们可以通过选择不同的工程对目标芯片进行下载。我这里选择"APM32F407"工程通过J-LINK下载我手上的板子。

2ec6c2b0-d029-11ec-bce3-dac502259ad0.png

程序下载过程中会提示我们选择芯片平台,这里选择“M4”即可。

2ed291bc-d029-11ec-bce3-dac502259ad0.png

4 最后效果

a.程序开始运行后,屏幕会显示请用户发送数据到串口1“Please send data to usart1”,此时用户就要通过串口助手向开发板发送数据,发送格式为S…….E。“….…”为用户所需要发送的数据,发送后数据存在 receive_str[ ]数值中并在显示屏显示。

2f042ace-d029-11ec-bce3-dac502259ad0.png

b.将接收到的数据写入W25Q128,KEY0按下,将串口1接收到的数据(receive_str[ ]中数据)写入25Q128。
c.将写入到W25Q128的数据读出并显示,KEY1按下,将写入到W25Q128中的数据读出并显示。

2f15cc70-d029-11ec-bce3-dac502259ad0.png

5 总结

以上便是本次使用APM32F407替代STM32F407的简要过程。通过本次替代经历,发现极海的APM32F407芯片的硬件与软件环境对STM32F407都有着非常优秀的替代能力。在原有硬件无需改动的情况下,简单的进行驱动更换后也能很好运行起来。国产优秀替代者极海也!各位小伙伴可以和我一起讨论替代过程中发生的趣事~

整个内容较多,个人能力有限,些许地方可能存在较多问题,欢迎大家指出。

声明

1.本代码(文档),仅供学习参考。

2.代码(文档)参考了网上开源的代码。如涉及贵方版权,请联系本人删除。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    463

    文章

    54631

    浏览量

    470904
  • 代码
    +关注

    关注

    30

    文章

    4983

    浏览量

    74533

原文标题:国产优秀替代_APM32F407替代STM32F407记录

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    STM32F407IGTx芯片的串口使用CubeMX做重映射后到Finsh无效,为什么?

    在使用STM32F407IGTx芯片时,由于UART4的默认引脚TX-PA0和RX-PA1被占用,因此重映射到TX-PC10和RX-PC11,配置后使用Finsh没有输出,个人认为是配置时出现了某些
    发表于 04-28 06:04

    基于极海APM32F4的Azure RTOS ThreadX移植过程分享

    最近在玩APM32F407IG的板子,发现官方提供了两个RTOS的demo,FreeRTOS和RT-thread。想着APM32F4这么丰富的资源,是不是也可以跑一下ThreadX RTOS看看
    的头像 发表于 04-02 11:30 1925次阅读
    基于极海<b class='flag-5'>APM32F</b>4的Azure RTOS ThreadX移植过程分享

    STM32F407的晶振选型分析

    STM32F407的最佳晶振选项
    的头像 发表于 11-07 12:03 2159次阅读

    与AI探讨简易示波器和频谱仪

    对于追求性价比和足够性能的入门到中级项目,STM32F407 是完全足够且更具成本效益的选择。
    的头像 发表于 10-18 15:35 1084次阅读

    正点原子F407开发板BSP RTstudio配置LVGL demo界面不能触摸怎么解决?

    正点原子 ATK-F407 开发板BSP,使用RT studio配置LVGL,自带demo界面下,屏幕不能触摸 参考了https://club.rt-thread.org/ask/question
    发表于 10-14 06:31

    下载到stm32F407是提示“ \'ascii\' codec can\'t decode byte 0xc4 )”错误怎么解?

    本人小白, 求助问题如下: 1、使用RT-Thread Studio, 新建工程,mcu型号,stm32F407. 2、编译无报错,但DAP-Link下载时提示
    发表于 10-10 06:34

    rtt5.0.0下lvgl在正点原子stm32f407探索者开发板V3上mdk编译报错怎么解决?

    开发板为正点原子stm32f407探索者V3,在rtt5.0.0版本下加入lvgl及相应的lcd, touch驱动,其它什么功能也没加,在mdk中编译,报错: Program Size: Code
    发表于 09-22 06:17

    在rt-thread4.0.2版本stm32f407硬件平台上,使用reboot命令无法重启,会让系统死机的原因?

    我在rt-thread4.0.2版本stm32f407硬件平台上,使用reboot命令无法重启,会让系统死机。 reboot命令默认是调用rt_hw_cpu_reset()
    发表于 09-12 06:08

    用gd32f470移植成功无法进入main函数,怎么解决?

    如下所示,我之前用gd32f470移植成功无法进入main函数,之后用官方例程用stm32f407去跑也还是这样
    发表于 09-10 06:24

    STM32F407VGT6的完美国产替代——中科芯CKS32F407VGT6在智能电力网关的应用

    风险。如今,这一局面正被打破,STM32F407VGT6的完美国产替代——中科芯CKS32F407VGT6在智能电力网关的应用,为这一领域带来了新的曙光,开启了国产芯片在
    的头像 发表于 08-25 16:16 1523次阅读
    <b class='flag-5'>STM32F407</b>VGT6的完美国产<b class='flag-5'>替代</b>——中科芯CKS32<b class='flag-5'>F407</b>VGT6在智能电力网关的应用

    stm32f407ZGT6生成的bootloader打印的app分区偏移地址正常吗?

    stm32f407ZGT6生成的bootloader打印的app分区偏移地址正常吗?bootloader使用iot平台配置自动生成的,日志信息如下图
    发表于 08-15 08:24

    微控制器 STM32F407VG(ST品牌),的pin to pin国产替代解决方案XHTM32F407VG

    在科技飞速发展的当下,芯片作为智能设备的“心脏”,其性能直接决定了设备的优劣。XTM32F407VG,这款是32位芯片,以卓越性能、丰富功能和超高稳定性,成为众多开发者与工程师的理想之选,引领着智能
    的头像 发表于 08-11 17:59 966次阅读
    微控制器 <b class='flag-5'>STM32F407</b>VG(ST品牌),的pin to pin国产<b class='flag-5'>替代</b>解决方案XHTM32<b class='flag-5'>F407</b>VG

    STM32F407的IO去驱动5V的外部上拉电阻,请问VDD_FT的电压范围是多少?

    目前想用STM32F407的IO去驱动5V的外部上拉电阻,看手册5V容忍的VDD_FT且有保护二极管。 请问VDD_FT的电压范围是多少? 开漏输出时,PA8口的上拉电阻能否输出5V? 谢谢!
    发表于 07-10 06:03

    极海APM32F407 uc/os3学习笔记之任务管理介绍

    最近了解了uc/os3这个操作系统,上篇介绍了uc/os3如何正确移植到APM32F407开发板上,根据我最近学到的一些知识,这篇文章主要介绍一下uc/os3中的一些简单的任务管理API以及如何使用。
    的头像 发表于 05-24 14:37 1260次阅读
    极海<b class='flag-5'>APM32F407</b> uc/os3学习笔记之任务管理介绍

    极海APM32F407IG-Tiny开发板的DAPLINK固件更新方法

    最近申请到了APM32F407IG-Tiny板,这块开发板做工不错,尤其自带了DAPLINK下载器,外设资源也挺丰富的,很适合做mbedos移植,并且mbedos官方stduio是有自带
    的头像 发表于 05-24 14:28 1835次阅读
    极海<b class='flag-5'>APM32F407</b>IG-Tiny开发板的DAPLINK固件更新方法