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
    +关注

    关注

    147

    文章

    18604

    浏览量

    386592
  • STM32F103
    +关注

    关注

    34

    文章

    490

    浏览量

    67049
  • MDK
    MDK
    +关注

    关注

    4

    文章

    211

    浏览量

    33455

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【新品上市】华清远见AIoT实战平台-STM32F103&ESP32-S3 AI开发板套件,玩转小智AI桌宠机器狗智能车等项目

    :以ESP32-S3作为AI中枢,承担视觉识别、语音交互及WiFi/BLE无线通信任务;以STM32F103作为控制核心,实现实时运动控制与多传感器数据融合,者通过UAR
    的头像 发表于 11-03 16:18 787次阅读
    【新品上市】华清远见AIoT实战平台-<b class='flag-5'>STM32F103</b>&amp;amp;ESP32-S3 AI开发板套件,玩转小智AI桌宠机器狗智能车等项目

    AT32F403A 移植RT-thread时SPI DMA和I2C DMA 冲突怎么解决?

    开发板:AT-START-F403A V1.1 我使用官方标准版RT-Thread BSP里的工程时,通过ENV工具启用了SPI和I2C ,但是启用了SPI RX/TX DMA之后I2C 就会
    发表于 10-10 06:14

    MH32F103A系列单片机的功能特性

    MH32F103A是一款硬件完美兼容ST32的国产32位单片机,使用高性能的ARM Cortex-M3 内核,最高工作频率216 MHz。内置最大512K Flash,96K Sram存储器。MH32F103A 软硬件兼容STM32F1
    的头像 发表于 09-12 10:58 822次阅读
    MH32<b class='flag-5'>F103A</b>系列单片机的功能特性

    AT32F403A硬件I2C与从机通信

    示例目的 演示AT32F403A硬件I2C与从机通信。 注:本应用笔记对应的代码是基于雅特力提供的V2.x.x 板级支持包(BSP)而开发,对于其他版本BSP,需要注意使用上的区别。 支持
    发表于 09-10 16:59

    STM32F103长时间运行,串口发送失败怎么解决?

    STM32F103长时间运行,串口发送失败,目前定位一致卡在USART_FLAG_TC判断那里,我们采用轮询的方式发送数据,然后判断USART_FLAG_TC是否发送成功,在大量发送后出现了一次发送后USART_FLAG_TC没有置位,然后就一直卡在这里了,这可如何是好
    发表于 07-30 07:55

    STM32F103c8上做DLQR最优控制算法的C编程资料

    这是我近期做的一个项目--基于STM32F103c8的DLQR控制算法的C编程,涉及DLQR最优控制算法、嵌入式STM32F103编程、CMSIS-DSP库使用。    附有完整的程序。
    发表于 07-23 15:30 0次下载

    MH32F103A系列单片机产品概述

    MH32F103A系列单片机软硬件兼容STM32F103A系列,可以快速替换,同时强化许多功能。性能和价格都非常的有优势。
    的头像 发表于 07-21 15:45 1078次阅读
    MH32<b class='flag-5'>F103A</b>系列单片机产品概述

    STM32F103驱动LD3320语音识别模块

    本文介绍了如何使用STM32F103微控制器驱动LD3320语音识别模块,该模块具备非特定人语音识别功能,支持动态编辑关键词,且无需额外Flash和RAM。通过SPI接口连接并配置代码,实现在不同指令下执行相应操作,如流水灯、闪烁等。实验结果显示,STM32能成功识别并响
    的头像 发表于 06-28 14:16 1252次阅读
    <b class='flag-5'>STM32F103</b>驱动LD3320语音识别模块

    CS32F103RB有无驱动例程,是否可用stm32F103的驱动代码?

    如果不能使用stm32F103驱动的话,请把驱动例程发送1830665518@qqcom
    发表于 05-15 10:54

    STM32F103x8 STM32F103xB单片机数据手册

    STM32F103x8STM32F103xB单片机数据手册
    发表于 04-14 14:55 6次下载

    STM32F103×8/STM32F103×B MCU手册

    本文提供了STM32F103x8和STM32F103xB中密度高性能系列微控制器的订购信息和机械器件特性。有关整个STMicroelectronics STM32F103xx系列的更多信息,请
    发表于 03-18 16:37 0次下载

    MH32F103A单片机 低价替代STM32,硬件完美兼容 主频可达216M

    MH32F103A是一款基于高性能32位ARM Cortex-M3内核的单片机,工作频率最高可达216 MHz,相比STM32F103系列的72 MHz有了显著提升。内置最大512KB Flash
    的头像 发表于 02-14 16:14 892次阅读
    MH32<b class='flag-5'>F103A</b>单片机 低价替代<b class='flag-5'>STM32</b>,硬件完美兼容 主频可达216M

    零死角玩转STM32F103—指南者

    电子发烧友网站提供《零死角玩转STM32F103—指南者.pdf》资料免费下载
    发表于 01-20 14:18 49次下载

    ADS8320如何与STM32f103的SPI连接?

    如题,请教一下ADS8320如何与STM32f103的SPI连接,因为STM32的SPI只支持8位和16为的传输格式。如果您有驱动,那定是极好的!
    发表于 12-24 08:23

    STM32F103x8/STM32F103xB规格书

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