HC32

来自Jack's Lab
2022年3月28日 (一) 14:53Comcat (讨论 | 贡献)的版本

跳转到: 导航, 搜索

目录

1 Overview



2 Bare Metal

2.1 Reset Handler

hc32/variants/hc32l130f8ua/hc32l130f8ua.ld (Link Script) :

ENTRY(Reset_Handler)

SECTIONS
{
  .text :
  {
    KEEP(*(.vectors))
    __Vectors_End = .;
    __Vectors_Size = __Vectors_End - __Vectors;
    __end__ = .;
    *(.text*)
......
......


2.2 SystemInit()

位于 hc32/common/system_hc32l13x.c:

void SystemInit(void)
{
    M0P_SYSCTRL->RCL_CR_f.TRIM = (*((volatile uint16_t*) (0x00100C22ul)));
    M0P_SYSCTRL->RCH_CR_f.TRIM = (*((volatile uint16_t*) (0x00100C08ul)));
    SystemCoreClockUpdate();
    _HidePinInit();
}


2.3 Makefile

-D__START=main



3 HC32L130F8UA

  • Cortex-M0+, Up to 48MHz
  • 8KB RAM, 64KB Flash
  • -40 ~ 85 'C
  • 1.8 ~ 5.5V
  • QFN32, 4x4mm

HC32L130-QFN32.png


  • PB0 - AIN8/VC0_INN10/VC1_INN6/SEG13
  • PB1 - AIN9/EXVREF/VC1_INP6/VC1_INN7/SEG12
  • PB6 - I2C0_SCL (SEL1)
  • PB7 - I2C0_SDA (SEL1)


  • PA04 - SPI0_CS (SEL1)
  • PA05 - SPI0_CLK (SEL1)
  • PA06 - SPI0_MISO (SEL1)
  • PA07 - SPI0_MOSI (SEL1)
  • PA09 - UART0_TXD (SEL1)
  • PA10 - UART0_RXD (SEL1)
  • PA14 - UART0_TXD (SEL2) - SWCLK
  • PA13 - UART0_RXD (SEL2) - SWDIO


  • PB0/PB1, PB4/PB5: I2C1


4 最小系统

HC32L130-mini-sys.png


5 MODE (模式) PIN

在正常情况下,必须通过电阻(推荐 10KΩ)将 MODE Pin (PD03/MD)下拉到 GND。

  • MODE (PD03)为高电平时,Power Reset 或硬件 Reset,则芯片进入在线编程模式(如加上跳帽使 MODE Pin 置位于高电平),通过上位机可以进行在线编程;
  • MODE (PD03)为低电平时,芯片进入用户模式。

PD03/MD 用户可用作输入端口,但是在 NRST 有效期间(即 RESETB 为低电平期间)必须保持低电平,否则 NRST 解除后(即 RESETB 变为高电平),芯片会误进入在线编程模式(Boot Mode)。


  • 当复位时 BOOT0(PD03)管脚为高电平,芯片工作于 ISP 编程模式,可通过 ISP 协议对 Flash 进行编程。
  • 当复位时 BOOT0(PD03)管脚为低电平,芯片工作于用户模式,芯片执行 Flash 内的程序代码,可通过 SWD 协议对 Flash 进行编程。


注意:

- 建议预留 PA9、PA10 作为 ISP 编程接口,如需使用 PA13、PA14 作为 ISP 编程接口请参见 PCN:PCN20191230-1_HC32L130HC32F030HC32L136 提高烧录速度。


6 Toolchain

6.1 Compier

  • toolchain/gcc-arm-none-eabi/bin/
    • arm-none-eabi-gcc
    • arm-none-eabi-g++
    • arm-none-eabi-gdb


  • toolchain/gcc-arm-none-eabi/arm-none-eabi/lib/thumb/v6-m/
    • libc.a
    • libstdc++.a
    • libm.a


6.2 Uploader

6.2.1 UART


6.2.2 STLINK or J-LINK


6.3 Linker Script

MEMORY
{
    FLASH ( rx )      : ORIGIN = 0x00000000, LENGTH = 64K
    RAM ( rxw )       : ORIGIN = 0x20000000, LENGTH = 8K
}

.vectors (Vector Table) 位于 Flash 开始处,Flash 上代码段 .text 之前:

ENTRY(Reset_Handler)

SECTIONS
{
  .text :
  {
    KEEP(*(.vectors))
    __Vectors_End = .;
    __Vectors_Size = __Vectors_End - __Vectors;
    __end__ = .;
......
......

arch/hc32/common/startup_hc32l13x.c:

/*----------------------------------------------------------------------------
  Exception / Interrupt Vector table
 *----------------------------------------------------------------------------*/
const pFunc __Vectors[] __attribute__ ((section(".vectors"))) = {
    /* Cortex-M Exception Handlers */
    (pFunc)&__StackTop,                       /*      Initial Stack Pointer     */
    Reset_Handler,                            /*      Reset Handler             */
......
......


7 SystemInit()

位于 hc32/common/system_hc32l13x.c:

void SystemInit(void)
{
    M0P_SYSCTRL->RCL_CR_f.TRIM = (*((volatile uint16_t*) (0x00100C22ul)));
    M0P_SYSCTRL->RCH_CR_f.TRIM = (*((volatile uint16_t*) (0x00100C08ul)));
    SystemCoreClockUpdate();
    _HidePinInit();
}


7.1 系统时钟

HC32L13x 支持以下五种时钟源作为系统时钟:

    SysctrlClkRCH  = 0u,               // 内部 RC 高速时钟,输出频率为 4~24MHz
    SysctrlClkXTH  = 1u,               // 外部晶振高速时钟,XTH 可以不接晶振,直接从 PD00 引脚输入 4~32MHz 的时钟信号
    SysctrlClkRCL  = 2u,               // 内部 RC 低速时钟,可选频率:38.4K 与 32.768K。当系统进入 DeepSleep,此低速时钟不会自动关闭,超低功耗外设模块可以选择 RCL 作为其时钟。
    SysctrlClkXTL  = 3u,               // 外部晶振低速时钟,XTL 可以不接晶振,直接从 PC14 引脚输入 32.768KHz 的时钟信号。当系统进入 Deep Sleep,此低速时钟不会自动关闭。超低功耗模式下工作的外设模块可以选择 XTL 作为其时钟。
    SysctrlClkPLL  = 4u,               // 锁相环 PLL 时钟


还有两个辅助时钟:

  • 内部低速 10K 时钟;仅供 WatchDog 和 CLKTRIM 模块使用。
  • 内部 150K 时钟:仅供 LVD 和 VC 模块使用。


芯片上电或复位后的默认时钟源为 4MHz 的内部 RCH 时钟;当系统进入 Deep Sleep,此高速时钟会自动关闭。

更改寄存器 RCH_CR[10:0]的数值即可调整 RCH 的输出频率。寄存器数值每增加 1 则 RCH 的输出频率增加约 0.2%,总调整范围为 4~24MHz。更改 RCH 输出频率需要按照特定的更改时序,详见系统时钟切换章节。

内部高速时钟 RCH 从启动到稳定仅需 4us。为了在深度休眠模式下能快速响应中断,建议进入深度休眠模式前将系统时钟切换为 RCH。


8 GPIO

MCU 的 GPIO 是通过 CMOS 的 PMOS 输出高电平,NMOS 输出低电平。

内部上拉电阻也是一个 PMOS,引脚输出时,PMOS 或 NMOS 工作在线性区域,其等效导通电阻随着 MCU 的 VCC 变化而变化。到 MCU 工作下限电压附近时,其导通电阻会急剧变化,表象上看就是驱动能力急剧下降,上拉电阻也变大


芯片复位后端口为高阻输入,目的是防止芯片被异常复位时,对外部器件产生异常动作。但为了避免高阻输入而产生的漏电,用户要在芯片启动之后对端口进行相应的配置(配置成内部拉高/拉低输入或者输出)。


9 I2C


10 SPI


11 RTC


12 ADC

https://bbs.21ic.com/icview-2817282-1-1.html


13 Reference





个人工具
名字空间

变换
操作
导航
工具箱