打印
[方案相关]

华大半导体 HC32F4A0 系列开发笔记

[复制链接]
702|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
HC32F4A0 系列开发笔记目录
选用芯片
对比STM32的优势
踩过的坑和一些总结:
1——串口空中断bug
2——标志位的寄存器
3——写IAP遇到的问题
4——CPU主频配置
5——RTC时钟
6——移入操作系统后的DDL_DealyMS函数
7——IO口的一些区别
8——ETH
9——CPU主频与IO口读写周期
10——HC官方库的解锁
11——配置寄存器需要解锁保护寄存器
12——SRAM3的读问题
选用芯片
由于芯片涨价严重,stm32f4系列价格对比国产芯片高不少,所以使用国产华大半导体的HC32F4系列开发。曾经考虑过stm32f460作为开发,但是f460系列的缺陷就是外设通道特别少,而且不支持VBAT,比方说我想用8个串口做产品,但是f460只支持4串口,并不符合理想。所以使用了HC32F4A0,共提供了10个USART,6个SPI,6个I2C,2个CAN,2个USB,以及提供了一个ETH MAC。但是确实F460比较便宜。
综上,选择了HC32F4A0PGTB开发,flash有1MB的容量,516KB的SRAM。共100脚。




————————————————
版权声明:本文为CSDN博主「K V G」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ZYP_KVG/article/details/127840927

使用特权

评论回复
沙发
鱿鱼丝|  楼主 | 2023-5-26 11:05 | 只看该作者
对比STM32的优势
其中最亮眼的一点,就是大部分io口都支持任意配置为某个串口或者spi ,i2c,can。不过也有一些功能是固定某个引脚的,比如说烧录用的jtag和sw,或者说ETH和USB。具体是哪个引脚就参考数据手册的引脚分配图吧。



但是io引脚会分为3个功能组,FG1,FG2,FG3(FunctionGroup),比方说,FG1只能配置为USART1,2,3,4中的其中一个,不能配置为USART8,9,10。同理FG3就可以配置为USART3,8,9,10,但是不能配置为1,2,4。所以在画原理图的时候,必须先看数据手册,把需要的功能尽量在同一个FG上,方便配置。
反观stm32f4,最多就支持端口重映射,所以它规定是哪个脚,你就必须用哪个脚。
而我用HC32F4A0,我哪个io想用spi就用spi,想用USART用USART,哪怕后面后悔了,哪个io不想用spi了,也可以通过配置寄存器来修改他的功能。这就非常的方便。

当然HC32有他本身的缺陷,下面会提到。

使用特权

评论回复
板凳
鱿鱼丝|  楼主 | 2023-5-26 11:06 | 只看该作者
踩过的坑和一些总结:
1——串口空中断bug
,现象为不能触发空中断,后来发现在官方勘误中有注明需要将发送和发送空中断同时使能,通过寄存器位或解决。

使用特权

评论回复
地板
鱿鱼丝|  楼主 | 2023-5-26 11:06 | 只看该作者
标志位的寄存器
这款芯片很多标志位的寄存器不能直接写入,只能通过硬件清零,这就导致了一些特殊情况失去了最好的解决办法,比如说串口空中断触发两次等等。(最后写了判断,但是避免不了执行两次)

使用特权

评论回复
5
鱿鱼丝|  楼主 | 2023-5-26 11:07 | 只看该作者
写IAP遇到的问题
我写IAP升级工程的时候,发现写入flash有bug,只能写到0x400后停止了,后来经过分析发现,是hc32本身有一些配置数据放在了0x400后面一小段空间,而且这段空间不能被修改,导致写flash出了问题,解决办法为,在app工程中屏蔽掉hc_ll_icg.h文件,这样app程序就避免了在0x400这个位置写入配置数据,且boot工程拥有这段配置数据。

使用特权

评论回复
6
鱿鱼丝|  楼主 | 2023-5-26 11:07 | 只看该作者
CPU主频配置
配置CPU频率时,我的外部晶振是8MHZ,进入cpu时会先经过一个120倍频为PPLN,然后再通过四分之一分频给PPLP,PPLP作为CPU主频,240MHZ。接着再给内部其他时钟分频,比如说PCLK1,我是二分之一分频为120MHZ,PCLK3则是四分之一分频为60MHZ。

使用特权

评论回复
7
鱿鱼丝|  楼主 | 2023-5-26 11:07 | 只看该作者

使用特权

评论回复
8
鱿鱼丝|  楼主 | 2023-5-26 11:07 | 只看该作者
RTC时钟
在配置RTC时钟时,要注意将时钟源改为外部时钟源,否则会引起时间出现巨大偏差。由于我的外部时钟晶振频偏为20ppm,最后测试的结果也为一天偏差1秒,在误差范围内。

使用特权

评论回复
9
yang377156216| | 2023-5-26 11:39 | 只看该作者
挺不错的应用避坑分享,再来一些更好了

使用特权

评论回复
10
鱿鱼丝|  楼主 | 2023-5-26 11:41 | 只看该作者
移入操作系统后的DDL_DealyMS函数
在移入操作系统后,HC32的库延时函数会失去精度,比方说原本DDL_DealyMS(1000);结果可能会变成延迟了1.3秒,而操作系统的时间片一般为1000hz,所以最好还是使用操作系统内置的延迟函数,比如vTackdelay。

使用特权

评论回复
11
鱿鱼丝|  楼主 | 2023-5-26 11:45 | 只看该作者
IO口的一些区别
HC32的io口几乎都没有内部下拉(除去一些特殊功能外),且只有在io口配置的输入的时候可以启用内部上拉,需要下拉的时候应该考虑外部接入下拉电阻。 HC32的io口同样没有配置io口频率的寄存器,而是替换成了高中低驱动模式,其中这三种模式就对应了不同的频率,这点在手册中的io口驱动能力数据可以看到。




使用特权

评论回复
12
15172348802| | 2023-5-26 11:47 | 只看该作者
点赞

使用特权

评论回复
13
鱿鱼丝|  楼主 | 2023-5-26 11:50 | 只看该作者
CPU主频与IO口读写周期
需要注意,配置IO时需要根据主频率来配置读写插入周期寄存器,否则可能出现问题。

使用特权

评论回复
14
鱿鱼丝|  楼主 | 2023-5-26 11:52 | 只看该作者
HC官方库的解锁
需要注意,使用keil工程开发时,很多库函数并不是可以直接使用,需要在工程中的某个配置文件的define里面进行解锁。

使用特权

评论回复
15
鱿鱼丝|  楼主 | 2023-5-26 11:52 | 只看该作者
配置寄存器需要解锁保护寄存器
很多寄存器不可以直接进行配置,需要先解锁保护寄存器,才可以配置。

使用特权

评论回复
16
鱿鱼丝|  楼主 | 2023-5-26 11:53 | 只看该作者
SRAM3的读问题
使用SRAM3如果出现了问题,则可能需要将SRAM123的读周期寄存器设置为1(也就是两个读写周期)。

使用特权

评论回复
17
犀利无言| | 2023-6-6 14:15 | 只看该作者
不错。

使用特权

评论回复
18
guijial511| | 2023-6-13 23:41 | 只看该作者
学习了,楼主写的很详细。

使用特权

评论回复
19
csy1123| | 2023-6-14 11:04 | 只看该作者
学习

使用特权

评论回复
20
lajfda001| | 2023-6-26 10:57 | 只看该作者
学习了,楼主写的已经很详细了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

387

帖子

0

粉丝