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

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脚。

    对比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有他本身的缺陷,下面会提到。

    踩过的坑和一些总结:

    1——串口空中断bug

    ,现象为不能触发空中断,后来发现在官方勘误中有注明需要将发送和发送空中断同时使能,通过寄存器位或解决。

    2——标志位的寄存器

    这款芯片很多标志位的寄存器不能直接写入,只能通过硬件清零,这就导致了一些特殊情况失去了最好的解决办法,比如说串口空中断触发两次等等。(最后写了判断,但是避免不了执行两次)

    3——写IAP遇到的问题

    我写IAP升级工程的时候,发现写入flash有bug,只能写到0x400后停止了,后来经过分析发现,是hc32本身有一些配置数据放在了0x400后面一小段空间,而且这段空间不能被修改,导致写flash出了问题,解决办法为,在app工程中屏蔽掉hc_ll_icg.h文件,这样app程序就避免了在0x400这个位置写入配置数据,且boot工程拥有这段配置数据。

    4——CPU主频配置

    配置CPU频率时,我的外部晶振是8MHZ,进入cpu时会先经过一个120倍频为PPLN,然后再通过四分之一分频给PPLP,PPLP作为CPU主频,240MHZ。接着再给内部其他时钟分频,比如说PCLK1,我是二分之一分频为120MHZ,PCLK3则是四分之一分频为60MHZ。

    5——RTC时钟

    在配置RTC时钟时,要注意将时钟源改为外部时钟源,否则会引起时间出现巨大偏差。由于我的外部时钟晶振频偏为20ppm,最后测试的结果也为一天偏差1秒,在误差范围内。

    6——移入操作系统后的DDL_DealyMS函数

    在移入操作系统后,HC32的库延时函数会失去精度,比方说原本DDL_DealyMS(1000);结果可能会变成延迟了1.3秒,而操作系统的时间片一般为1000hz,所以最好还是使用操作系统内置的延迟函数,比如vTackdelay。

    7——IO口的一些区别

    HC32的io口几乎都没有内部下拉(除去一些特殊功能外),且只有在io口配置的输入的时候可以启用内部上拉,需要下拉的时候应该考虑外部接入下拉电阻。 HC32的io口同样没有配置io口频率的寄存器,而是替换成了高中低驱动模式,其中这三种模式就对应了不同的频率,这点在手册中的io口驱动能力数据可以看到。

    8——ETH

    提供给ETH外设的时钟至少需要在60MHZ以上才可以工作正常(在我使用PHY芯片LAN8720的情况下),而ETH的时钟由PCLK1提供。

    9——CPU主频与IO口读写周期

    需要注意,配置IO时需要根据主频率来配置读写插入周期寄存器,否则可能出现问题。

    10——HC官方库的解锁

    需要注意,使用keil工程开发时,很多库函数并不是可以直接使用,需要在工程中的某个配置文件的define里面进行解锁。

    11——配置寄存器需要解锁保护寄存器

    很多寄存器不可以直接进行配置,需要先解锁保护寄存器,才可以配置。

    12——SRAM3的读问题

    使用SRAM3如果出现了问题,则可能需要将SRAM123的读周期寄存器设置为1(也就是两个读写周期)。

    物联沃分享整理
    物联沃-IOTWORD物联网 » 华大半导体 HC32F4A0 系列开发笔记

    发表评论