小华STK-HC32L021评估板环境搭建、开发入门

分享作者:Mr_Fang
作者昵称:Mr_Fang
评测品牌:萤火工场
评测型号:STK-HC32L021
发布时间:2026-03-13 09:29:11
1
概要
小华STK-HC32L021评估板环境搭建、开发入门
开源口碑分享内容

开发环境搭建

小华提供了 HC32L021 主控的 IDE 支持包、驱动库以及样例,可以在 https://www.xhsc.com.cn/product/1263.html 获取相关资源

这里使用 MDK 作为开发环境,需要下载的有:SK_HC32L021_TSSOP20_Rev1.1.zipHC32L021_IDE_Rev1.1.0.zipHC32L021_DDL_Rev1.1.0.zip 这三个压缩文件

SK_HC32L021_TSSOP20_Rev1.1.zip 中包含本开发板的设计文件

使用 HC32L021_IDE_Rev1.1.0.zip 中的 IDE_PACK\MDK_IDE\HDSC.HC32L02x.1.1.0.pack 可以将 HC32L021 的包安装到 Keil:

pastedimage1773334620140webp

我们可以参考 HC32L021_DDL_Rev1.1.0.zip 中的例程,使用其中的模板进行开发

使用模板新建项目

解压 HC32L021_DDL_Rev1.1.0.zip,找到其中 example 目录下的 template,复制一份即可

pastedimage1773334722986webp

模板中 EWARM 为 IAR 工程,MDK 为 Keil MDK 工程,source 为源代码

pastedimage1773334907318webp

进入 MDK 目录,双击 Keil 工程文件即可打开

pastedimage1773335065681webp

打开 Keil 工程后,双击 main.c 打开主程序文件,在其中编写代码

pastedimage1773335237612webp

使用外部中断控制 LED 灯

查阅 SK_HC32L021_TSSOP20_Rev1.1.zip 中提供的开发板原理图:

  • LED D3 被连接到了 PA00,高电平点亮
  • 按钮 K1 被连接到了 PA12,按下后接地

pastedimage1773335419388webp

例程中提供了封装好的 GPIO 库 —— gpio.cgpio.h 中 include 了 ddl.h,所以我们在 main.c 中将 ddl.h 替换为 gpio.h 即可

/*******************************************************************************
 * Include files
 ******************************************************************************/
#include "gpio.h"

接下来需要初始化 PA00PA12 这两个管脚:

/*******************************************************************************
 * Local function prototypes ('static')
 ******************************************************************************/
static void GpioConfig(void);

/*******************************************************************************
 * Function implementation - global ('extern') and local ('static')
 ******************************************************************************/
/**
 * @brief  GPIO配置
 * @retval None
 */
static void GpioConfig(void)
{
    stc_gpio_init_t stcGpioInit;

    SYSCTRL_PeriphClockEnable(PeriphClockGpio);

    /* LED */
    GPIO_StcInit(&stcGpioInit);
    stcGpioInit.bOutputValue = TRUE;               // 默认输出高电平
    stcGpioInit.u32Mode      = GPIO_MD_OUTPUT_PP;  // 推挽输出
    stcGpioInit.u32Pin       = GPIO_PIN_00;        // 00口
    stcGpioInit.u32PullUp    = GPIO_PULL_NONE;     // 不上拉
    GPIOA_Init(&stcGpioInit);

    /* KEY */
    stcGpioInit.u32ExternInt = GPIO_EXTI_FALLING;  // 下降沿触发
    stcGpioInit.u32Mode      = GPIO_MD_INT_INPUT;  // 中断输入
    stcGpioInit.u32Pin       = GPIO_PIN_12;        // 12口
    GPIOA_Init(&stcGpioInit);

    /* Enable IRQ */
    EnableNvic(PORTA_IRQn, IrqPriorityLevel0, TRUE);
}

要想实现对 LED 亮灭的控制,我们可以使用一个变量 flag 标记小灯状态,当触发外部中断时翻转这个变量,TRUE 表示小灯亮,FALSE 表示小灯灭

添加一个布尔变量:

/*******************************************************************************
 * Local variable definitions ('static')
 ******************************************************************************/
static boolean_t flag = FALSE;

PortA 的中断服务函数:

/*******************************************************************************
 * Function implementation - global ('extern') and local ('static')
 ******************************************************************************/
/**
 * @brief  PortA中断服务函数
 * @retval None
 */
void PortA_IRQHandler(void)
{
    if (TRUE == GPIO_IntFlagGet(GPIOA, GPIO_PIN_12))
    {
        flag = !flag;

        GPIO_IntFlagClear(GPIOA, GPIO_PIN_12);
    }
}

在主函数 main() 中对 flag 进行判断,设置 PA00 的输出电平:

/*******************************************************************************
 * Function implementation - global ('extern') and local ('static')
 ******************************************************************************/
/**
 * @brief  Main function
 * @retval int32_t return value, if needed
 */
int32_t main(void)
{
    GpioConfig();

    while (1)
    {
        if (flag)
            GPIO_PA00_SET();
        else
            GPIO_PA00_RESET();

        DDL_Delay1ms(100);
    }
}

程序编写完成后可以使用右上角的按钮进行构建,构建输出 0 Error(s), 0 Warning(s) 表示构建成功:

pastedimage1773336569873webp

使用板载调试器调试/烧录程序

开发板板载了 CMSIS-DAP 调试器,直接使用 USB-A/C 转 USB-C 连接线连接到电脑就可调试/烧录程序

调试程序

在 Keil 对程序进行调试可以点击工具栏中的 Debug 按钮(或使用快捷键 Ctrl+F5

pastedimage1773336730516webp

例如要监看 flag 变量的变化,右键 flag,在 Add 'flag' to... 中选择 Watch 1,在终端服务函数中设置一个断点,按 F5 开始执行程序

当按下按键 K1 时,触发外部中断,程序执行到中断服务函数中的断点后会暂停,此时 flag 的值为默认的 0x00(即 0FALSE

https://files.seeusercontent.com/2026/03/12/d7Cy/pasted-image-1773338694553.webp

按下 F5 继续执行程序,可以看到 flag 的值变为了 0x01(即 1TRUE),此时 LED 灯点亮

pastedimage1773337371255webp

要退出调试模式,再次按 Ctrl+F5 即可(注意:退出调试界面时建议清除所有断点,部分 Keil 版本在退出调试界面时存在断点可能导致软件卡死崩溃

烧录程序

要烧录程序到开发板,只需要点击 Download 按钮即可,构建日志输出 Flash Load finished 即成功:

pastedimage1773337639950webp

注意:烧录完成后需要重新上电/按下复位按钮才可开始执行程序

程序运行展示

mJh3/bbb7ae35f8507d55971bc312887a7794gif

全部评论
暂无评论
0/144