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

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

3天内不再提示

STM32F103移植到AT32F403A之MDK(二)

创易栈 来源:创易栈 2023-01-29 15:09 次阅读

上一篇我们已经实现了不改硬件,只改软件情况下将STM32F103C8T6替换为AT32F403ACGT7的过程,但毕竟STM32F103C8T6已经是10多年前的东西了,用现在的AT32F403ACGT7替换实在是大材小用了,毕竟这颗是主频能到240M的M4。

上篇我们解决了替换能用的问题,本篇我们来结合AT32F403ACGT7的优势,实现不改硬件只改BOM降成本的方法。

从接触MCU开始,MCU外围电路中就缺少不了很重要的器件,那就晶振,晶振是MCU的时钟源。随着技术的不断发展,越来越多的MCU将晶振集成到了MCU内部,但集成到内部后真的就能够省略掉外部晶振吗,当然不是,由于技术和工艺问题,前些年的MCU还无法完全摆脱外部晶振,而近几年的MCU才算真正能够摆脱外部晶振,STM32F103系列和AT32F403A系列正好代表了这两个阶段的产品

我们先来看看STM32F103系列内部晶振的参数

4bd82378-9bce-11ed-bfe3-dac502259ad0.png

荡器精度大多数情况下都大于1%,最大时大于了2%,用在串口应用中都觉得不靠谱,更何况是在USB应用当中了,所以,官方文档对使用内部晶振时做了明确的使用说明:

4bf9bb50-9bce-11ed-bfe3-dac502259ad0.png

我们再来看看AT32F403A系列的内部晶振参数

4c23d28c-9bce-11ed-bfe3-dac502259ad0.png

4c23d28c-9bce-11ed-bfe3-dac502259ad0.png

在使用RCC_CTRL寄存器校准情况下,能够达到最大值偏差1%的精度,已经能够满足大多数的精度要求,RCC_CTRL寄存器校准是在系统启动后自动完成的,不需要人为干预,如果想再提到精度,可以再修改相关寄存器,以提高到更高的精度。

4c58b236-9bce-11ed-bfe3-dac502259ad0.png

并且在USB应用中,为保证内部晶振能够满足精度要求,还提供了ACC校准功能,可以提高进度到0.25%。

4c856df8-9bce-11ed-bfe3-dac502259ad0.png

4cb13c4e-9bce-11ed-bfe3-dac502259ad0.png

4cb13c4e-9bce-11ed-bfe3-dac502259ad0.png

在这些校准方式下,AT32F403A系列的内部晶振已经能都替换掉外部晶振了。另外,在省略掉外部晶振后,还能够让芯片多出2个IO脚,在ST32F103系列中,使用内部晶振时空出的2个管脚只能做IO用,没有中断功能,而AT32F403A系列则没有这个限制。

4d16d478-9bce-11ed-bfe3-dac502259ad0.png

接下来,本篇内容的重点就是在使用ST32F103标准库情况下最小的改动实现开启AT32F403A内部晶振,让BOM成本降低,并且增加了性能。在上一篇中我在标准库的系统时钟初始化函数void SystemInit (void)内添加的开启FPU代码。

4d401996-9bce-11ed-bfe3-dac502259ad0.png

同样在这个函数内还有一行代码SetSysClock(),它负责设置系统内的各条总线时钟。STM32这里一般是设置使用外部晶振,总线时钟为72M。

4d607006-9bce-11ed-bfe3-dac502259ad0.png

因为我们要使用内部晶振,所以要将外部晶振相关的宏定义关掉,这里我们只需将#define SYSCLK_FREQ_72MHz 72000000关掉即可。

4d7c037a-9bce-11ed-bfe3-dac502259ad0.png

这样所有和外部晶振相关的时钟配置都将关闭,总线时钟将被配置为内部时钟。

4d95772e-9bce-11ed-bfe3-dac502259ad0.png

因为原来的程序都是建立在总线时钟是72M情况下的,我们需要使用内部晶振重新创建各个总线的时钟与原程序的总线时钟一致,才能保证系统能够正常运行。

我们在AT32F402A系列的BSP的system_at32f4xx.c文件内找到#define SYSCLK_FREQ_72MHz_HSI 72000000所对应的函数,这个函数内实现了再使用内部晶振情况下,配置总线为72M的操作(注意,BSP要用1.xx版本的,2.xx版本的库风格改变了,不再兼容STM32标准库风格)。

因为原来的程序都是建立在总线时钟是72M情况下的,我们需要使用内部晶振重新创建各个总线的时钟与原程序的总线时钟一致,才能保证系统能够正常运行。

我们在AT32F402A系列的BSP的system_at32f4xx.c文件内找到#define SYSCLK_FREQ_72MHz_HSI 72000000所对应的函数,这个函数内实现了再使用内部晶振情况下,配置总线为72M的操作(注意,BSP要用1.xx版本的,2.xx版本的库风格改变了,不再兼容STM32标准库风格)。

4da9695a-9bce-11ed-bfe3-dac502259ad0.png

4dbfe45a-9bce-11ed-bfe3-dac502259ad0.png

4dd902a0-9bce-11ed-bfe3-dac502259ad0.png

将static void SetSysClockTo72MHSI(void)函数,拷贝到现在的代码中(位置根据自己习惯),我放在main函数这里。

4df80a60-9bce-11ed-bfe3-dac502259ad0.png

4df80a60-9bce-11ed-bfe3-dac502259ad0.png

由于缺少宏定义和寄存器名差异问题,会有很多报错,先不管,先将函数内精简一下,只保留我们使用型号的先关定义。

4e2cd39e-9bce-11ed-bfe3-dac502259ad0.png

然后我们对照STM32F103的参考手册和AT32F403A的参考手册中关于RCC寄存器的名称定义,用STM32F103的寄存器名和宏定义替换AT32F403A的寄存器名和宏定义,修改后名称后如下:

4e5e5838-9bce-11ed-bfe3-dac502259ad0.png

依然报错的位置是因为这3个宏是STM32F103库里没有定义的,需要我们重新定义一下,我们可以在AT32F403A的BSP库里找到,拷贝过来就行。

4e82b232-9bce-11ed-bfe3-dac502259ad0.png

接下来我们将SetSysClockTo72MHSI();添加的main函数开始的位置,也就是实现了原来void SystemInit (void)内SetSysClock();的工作。

4ea95b4e-9bce-11ed-bfe3-dac502259ad0.png

4ea95b4e-9bce-11ed-bfe3-dac502259ad0.png

重新编译,没有错误。

4ece4cf6-9bce-11ed-bfe3-dac502259ad0.png

至此,使用AT32F403A内部晶振替换原STM32F103外部晶振的配置就完成了,省去了外部晶振和电容,增加了2个能实现中断的管脚,实现了通过修改BOM降低层本增加性能的目的。

注意:在这种配置下,多数外设模块是能够正常工作的,但部分外设会有问题,我会再后面的文章中继续为大家分享相关的问题。

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

    关注

    146

    文章

    17110

    浏览量

    350899
  • STM32F103
    +关注

    关注

    33

    文章

    477

    浏览量

    63587
  • MDK
    MDK
    +关注

    关注

    4

    文章

    209

    浏览量

    32061

原文标题:STM32F103移植到AT32F403A之MDK(二)

文章出处:【微信号:创易栈,微信公众号:创易栈】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32F103x8/STM32F103xB规格书

    电子发烧友网站提供《STM32F103x8/STM32F103xB规格书.pdf》资料免费下载
    发表于 12-06 15:43 0次下载

    STM32F103×8/STM32F103×B MCU手册

    1. Q: STM32F103C8T6如何正确配置时钟系统?A: STM32F103C8T6的时钟系统配置通常涉及HSE(高速外部时钟)、HSI(高速内部时钟)、PLL(相位锁定环)等。配置时,首先
    发表于 11-18 15:14 0次下载

    【GD32 MCU 移植教程】9、从 STM32F10x 系列移植 GD32F30x 系列

    对比、外设及性能对比以及从 STM32F10x 移植 GD32F30x 的移植步骤,旨在让开发者能够快速从
    的头像 发表于 09-07 09:57 656次阅读
    【GD32 MCU <b class='flag-5'>移植</b>教程】9、从 <b class='flag-5'>STM32F</b>10x 系列<b class='flag-5'>移植</b><b class='flag-5'>到</b> GD32<b class='flag-5'>F</b>30x 系列

    STM32CUBEMX(7)--移植雅特力AT32F403AVGT(兼容STM32F103VGT6),DAC输出电压

    概述 本篇文章主要介绍如何使用STM32CubeMX移植雅特力AT32F403AVGT7,并通过DAC输出电压,在芯片中有2个12位的DAC口可以供选择。 硬件准备 首先需要准备一
    发表于 09-06 16:40

    【GD32 MCU 移植教程】8、从 STM32F4xx 系列移植 GD32F4xx 系

    、外设及性能对比以及从 STM32F4xx 移植 GD32F4xx 的移植步骤,旨在让开发者能够快速从
    的头像 发表于 09-06 09:40 1209次阅读
    【GD32 MCU <b class='flag-5'>移植</b>教程】8、从 <b class='flag-5'>STM32F</b>4xx 系列<b class='flag-5'>移植</b><b class='flag-5'>到</b> GD32<b class='flag-5'>F</b>4xx 系

    STM32F103xC,STM32F103xD,STM32F103xE中文资料

    电子发烧友网站提供《STM32F103xC,STM32F103xD,STM32F103xE中文资料.pdf》资料免费下载
    发表于 06-17 14:12 3次下载

    stm32f103能超多少频率,是否稳定?

    谁超频使用过stm32f103系列的片子,能超多少频率,是否稳定?
    发表于 05-09 07:35

    STM32国产兼容替代芯片,MH32F103A 32位M3内核 主频216M

    这次介绍的可以兼容替代STM32F103的国产芯片是MH32F103A。MH32F103A系列单片机基本兼容SXX32F103系列,同时强化许多功能,有些许地方与SXX32
    的头像 发表于 04-25 16:43 1818次阅读

    STM32F407的程序移植STM32F103的芯片上面,需要修改哪些内容?

    STM32F407的程序移植STM32F103的芯片上面,需要修改哪些内容?
    发表于 04-10 07:38

    如何把stm32F103程序移植stm32g030k6t6上?

    怎么把stm32F103程序移植stm32g030k6t6上
    发表于 04-03 07:57

    STM32F103VE搭建的PWM输入捕获功能,移植STM32F103VD无法捕获的原因?

    利用STM32F103VE芯片搭建的PWM输入捕获功能,移植STM32F103VD的时候,无法捕获。主要存在的问题:进入不了中断服务函数(利用ST
    发表于 03-20 08:21

    STM32F103如何使用BOOT下载程序?

    STM32F103如何使用BOOT下载程序
    发表于 03-15 07:21

    ARM系列STM32F103芯片的解密方法

    本文介绍ARM系列STM32F103芯片的解密方法,其内核是Cortex-M3,内存从16K-512K都有。
    发表于 02-28 11:20 1663次阅读

    AT32F403A系列 数据手册

    电子发烧友网站提供《AT32F403A系列 数据手册.pdf》资料免费下载
    发表于 01-22 10:06 6次下载

    stm32f103 flash模拟eeprom

    STM32F103是意法半导体(STMicroelectronics)推出的一款32位单片机系列,该系列芯片具有高性能和丰富的外设接口,广泛应用于工业控制、消费电子、汽车电子等领域。其中
    的头像 发表于 01-09 11:21 1992次阅读