STM32F103移植到AT32F403A之MDK(三)

stm32f103移植到at32f403a详细教程
 在篇2当中,我们已经实现了使用内部晶振使主频达到72m,使各总线时钟也达到了和使用外部晶振一样的频率。
但部分模块在使用stm32标准库时还是会有些问题,本篇就针对常用的外设遇到的问题予以说明并解决。
首先,串口是我们最常用的外设,在使用内部晶振使各总线与使用外部晶振达到一样的频率时,使用串口时会存在数据收发乱码的问题。
我们来分析一下问题点,因为串口在使用外部晶振时,都是正常的,说明串口配置是没错的。再改为使用内部时钟后就出现串口异常问题,那问题一定来自时钟这块的问题,我们通过代码仿真看一下。在串口初始化过程中有和时钟相关的操作,在void usart_init(usart_typedef* usartx, usart_inittypedef* usart_initstruct)函数中。
通过仿真看一下rcc_clocksstatus中各总线的时钟值,发现总线时钟都不对
经过对rcc_getclocksfreq(&rcc_clocksstatus)函数的分析发现,获取的倍频系数竟然是3,这是怎么回事?
通过看at32f403a的用户手册发现,pll倍频系数是两部分组成的,我们在总线时钟初始化时使用的是倍频18倍,正好两部分都用到的,而st的库在取值时只取了其中的一部分,导致倍频系数在计算时出现了错误。
好了,现在问题的原因找到了,我们该怎么解决呢?
有两种方式解决,第一种是改宏定义,使cfgr_pllmull_mask能够完整的取到正确的倍频系数(本人没有采用这种方式,因为倍频系数不连续,处理起来比较麻烦,而且容易出现其他调用问题)。
第二种是,不改宏,而是改串口初始化函数,因为获取各总线频率后用来计算波特率,我们人为将用到的总线频率改成正确的值就行了,我是这么改的。
通过修改此处,串口通信恢复正常。串口问题就此解决。
注意:其他外设如果也有通过获取总线时钟用于计算的,都要注意这个问题!!!
接着我们要处理个很容易忽略的问题,那就是flash问题,这里要说的不是厂家手册里说过的零等待啊,flash延时等问题。而是页大小问题,这个问题不是在所以的at32f403a替换stm32f103系列都会遇到的问题。
我们先来看看stm32f103系列flash页大小的定义。
我们再来看看at32f403a系列flash页大小的定义。
在使用at32f403a替换stm32f103系列小容量和中容量时,由于页大小定义不同,在进行flash操作时要注意页大小问题,此问题多会出现在iap,或将flash用于存储数据时会出现问题,而stm32f103大容量和互联型者不会有问题。
至此,我在使用at32f403a替换stm32f103过程中遇到的问题就都介绍完了,如果在后续使用过程中再发现其他问题,请点击下方图片打开问个芯小程序进行咨询哦
本文来自创易栈平台用户 @峰@ 投稿


仪表电缆敷设安装技术要求
惠普发布新款轻薄商务本 满足雅典娜计划规范
协作机器人的应用,它将如何助力企业自动化升级
什么是电流传感器?有哪些分类和应用?
PCB组装检查和测试选项指南
STM32F103移植到AT32F403A之MDK(三)
Apple TV HD已被列入为过时产品
欧洲连接器市场现状分析
基于80C51单片机的智能电表设计分析
ADALM2000:齐纳二极管稳压器
Intel展示一款全新的AI加速器 基于10nmIceLake改造并做成了M.2接口
年年低迷的IC产业为何突遇8倍爆发式增长?
英国禁止华为在英国销售手机及通讯设备
如何修复碎煤机轴磨损问题
兽药检测仪的产品性能及主要参数
AI大模型开启智能交通的未来?
智能镜子显示器的作用是怎样的
嵌入式软体市场将满足消费电子产品不断增长的需求
旅游带什么耳机好?佩戴最舒适的骨传导耳机
广和通正式发布2022 5G焕新年度主题:5力共驱·极智未来