一、hpm_sdk示例项目导入
hpm_sdk导入流程可以参考链接:https://1nfinite.ai/t/zstudio-ide-risc-v-mcu/81
本示例我们基于导入hpm_sdk 中的helloworld 例子做演示。
二、在ZStudio中使用HPM Pinmux Tool工具
-
点击上方菜单栏中的Tools → HPM Tools → Open HPM Web Tool
-
进入 HPM Pinmux Tool 页面,根据自己的目标开发平台选择SOC,package,以及填写项目名称。这里我们以hpm5361 soc,LQFP100 Package为示例进行演示。 (注意:我们在SDK导入的时候,导入的就是HPM5361的demo,这个是在SDK导入的时候,通过指定
-DBOARD=hpm5300evk ..
这个参数进行设置的,请尽量避免导入参数指定的平台,与我们实际的开发平台不一致这一情况,以免产生编译报错) 点击创建项目。
-
点击创建项目后会进入配置界面。在此可以进行引脚和外设配置以及时钟配置。
-
下面我们演示通过设置一个IO口输出高电平或者低电平来点亮或者熄灭一个LED灯。下面我们参考HPM5300EVK开发板原理图选择一个与芯片IO口相连的LED灯,开发板原理图链接:https://www.hpmicro.com/Public/Uploads/uploadfile/files/20240620/HPM5300EVKREVC.pdf
从原理图中可以看到,LED2的阳极连接3.3V,阴极连接PA23 IO口,所以当设置PA23输出低电平就可以点亮LED灯,当设置PA23输出高电平时,LED灯熄灭。
-
我们只需要在ZStudio集成的HPM Pinmux Tool中配置初始化PA23 IO口即可。下面我们来演示如何在ZStudio中配置hpm5361引脚的GPIO功能。
-
点击PA23引脚
-
会弹出该引脚可以复用的功能,如GPIO、I2C、PWM等,在这里我们选择GPIO.A[23]。
-
点击确认后,进入下一个步骤,设置GPIO的相关属性,设置方向为输出,以及设置初始输出电平,这里我们选择高电平,选择GPIO控制器,这里我们选择GPIO0,设置完这三个必要参数即可,点击确定
-
此外还可以根据自己的开发需求设置其他参数,如下图点击右下角
-
弹出引脚的其余设置,如设置上下拉,以及上下拉电阻的大小和驱动强度,输出速度等,这里我们只做介绍不用设置。
-
点击右上角的代码预览,可以查看HPM Pinmux Tool 生成的引脚配置初始化代码
-
点击右上角的下载图标可以将代码.c文件和.h文件下载到本地,对于代码量相对较少的功能配置代码可以将代码内容拷贝到自己的项目文件中。下载的源码文件可以在解决方案中的项目工程中,通过导入的方式将其加入到项目中。在这里我们直接将HPM Pinmux Tool生成的引脚配置代码复制到自己的功能函数中即可。
-
HPM Pinmux Tool生成的源码文件的文件名和函数名和SDK中的源码文件和函数名冲突,所以为了避免冲突本次演示只拷贝HPM Pinmux Tool提供的引脚配置初始化代码即可。在导入的helloworld demo项目中,将helloworld.c删除新建一个自己的main.c文件
-
main.c的代码如下:
/*
* Copyright (c) 2021 HPMicro
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
#include <stdio.h>
#include "board.h"
#include "hpm_debug_console.h"
#include "hpm_gpio_drv.h"
#include "hpm_gpiom_drv.h"
static void init_pins_led(void)
{
// HPM Pinmux Tool生成的引脚初始化代码
HPM_IOC->PAD[IOC_PAD_PA23].FUNC_CTL = IOC_PA23_FUNC_CTL_GPIO_A_23;
gpiom_set_pin_controller(HPM_GPIOM, GPIOM_ASSIGN_GPIOA, 23, gpiom_soc_gpio0);
gpio_set_pin_output(HPM_GPIO0, GPIO_OE_GPIOA, 23);
gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOA, 23, 1);
}
int main(void)
{
board_init(); //初始化开发板
init_pins_led(); //初始化LED灯对应的GPIO
while(1)
{
gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOA, 23, 0); // 设置引脚输出低电平点亮LED灯
board_delay_ms(500);
gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOA, 23, 1); // 设置引脚输出高电平熄灭LED灯
board_delay_ms(500);
}
return 0;
}
如上面的代码所示,main函数调用SDK里面的board_init函数完成对开发板的外设时钟和部分IO的初始化。随后调用init_pins_led函数,该函数内的GPIO的初始化代码就是HPM Pinmux Tool生成的。在while循环中使用gpio_write_pin函数设置GPIO PA23 IO口的电平状态,使用SDK内实现的board_delay_ms延时函数,实现LED灯的交替闪烁。
三、程序编译烧录运行
关于程序的编译烧录和运行,可以参考文章 https://1nfinite.ai/t/zstudio-ide-risc-v-mcu/81
程序运行展示如下:
在这里我们以引脚配置为例子主要是介绍了ZStudio结合集成的HPM Pinmux Tool 工具实现一站式riscv平台嵌入式开发,更多关于HPM Pinmux Tool 的用法可以参考如下链接:
https://mp.weixin.qq.com/s/6iNe4teDe6f17AcUpgmGTg
https://mp.weixin.qq.com/s/Hh0GGEHmnSSXwFrEMFnvyA?poc_token=HKDl82aj9y2UytTyEwHThZ2cKm8z3PyYAa9H61Fa
如有疑问欢迎留言评论。