在用keil5配置完了HT32开发环境之后,点灯工程师开始点灯。
1.函数介绍
(1)CKCU_Configuration();
这是CKCU的初始化函数。CKCU相当于STM32的RCC时钟管理,用于控制整个芯片的时钟。
void CKCU_Configuration(void)
{
//CKCU的初始化函数
#if 1
//定义一个用于初始化CKCU的结构体,后面是赋初值,不用管
CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
//这里对原始语句进行了封装
/*
*原始语句:CKCUClock.Bit.PC=1
*结构体内的Bit成员就是用来控制每个模块的时钟开关的
*比如我要打开一个BFTM(基本定时器)的能源,那就是CKCUClock.Bit.BFTM0=1,等于1为使能,0为除能
*/
HTCFG_OUTPUT_LED1_CLK(CKCUClock) = 1;
HTCFG_OUTPUT_LED2_CLK(CKCUClock) = 1;
/*
*AFIO是端口复用时钟,这个正常都要开
*HT32的端口复用是通过一个AFIO的配置函数来实现的,每个IO都有十多种复用模式
*具体每种复用模式是干啥的,详见HT32F52342-52_Datasheetv130.pdf的第27页
*/
CKCUClock.Bit.AFIO = 1;
//CKCU配置函数
CKCU_PeripClockConfig(CKCUClock, ENABLE);
#endif
}
(2)GPIO_OUT_Configuration();
配置GPIO为输出函数。
void GPIO_OUT_Configuration(void)
{
/*
*/
/* Configure LED1, LED2, LED3 pins as output function */
/* Configure AFIO mode of output pins
*这个就是上面提到的AFIO配置函数
*形参1:GPIO_Px,比如你是PC,那就是GPIO_PC
*形参2:AFIO_PIN_n,指定哪一根引脚需要复用,比如是PC14,就传入AFIO_PIN_14,这里注意区别GPIO_PIN_14,这个是其他地方用的
*形参3:AFIO_MODE_n,设定该引脚的复用模式。默认复用(作为GPIO普通管脚)是AFIO_FUN_DEFAULT,其他的只要改后面的单词就行 */
AFIO_GPxConfig(HTCFG_OUTPUT_LED1_ID, HTCFG_OUTPUT_LED1_AFIO_PIN, AFIO_FUN_GPIO);
AFIO_GPxConfig(HTCFG_OUTPUT_LED2_ID, HTCFG_OUTPUT_LED2_AFIO_PIN, AFIO_FUN_GPIO);
/* Configure GPIO direction of output pins
*这是配置GPIO方向的函数
*形参1:HT_GPIOx,比如是PC,那就传入HT_GPIOC
*形参2:GPIO_PIN_nBITMAP,比如是PC14,那就传入GPIO_PIN_14,其他的以此类推
*形参3:GPIO_DIR_INorOUT,用于指定输出方向。
输入:GPIO_DIR_IN
输出:GPIO_DIR_OUT */
GPIO_DirectionConfig(HTCFG_LED1, HTCFG_OUTPUT_LED1_GPIO_PIN, GPIO_DIR_OUT);
GPIO_DirectionConfig(HTCFG_LED2, HTCFG_OUTPUT_LED2_GPIO_PIN, GPIO_DIR_OUT);
}
到此就可以点亮一个LED了下面放上主函数。
int main(void)
{
CKCU_Configuration();
GPIO_OUT_Configuration();
while (1)
{
}
}
2.硬件引脚及宏定义
原来官方example,有LED0,LED1,LED2,但HT52352只有LED1和LED2,所以这里修改了宏定义。
其中D7即LED1的引脚为PC14,D8即LED2的引脚为PC15。
/*@file GPIO/InputOutput/ht32_board_config.h*/
#define HTCFG_OUTPUT_LED0_GPIO_PIN (GPIO_PIN_14)
#define HTCFG_OUTPUT_LED1_GPIO_PIN (GPIO_PIN_14)
#define HTCFG_OUTPUT_LED2_GPIO_PIN (GPIO_PIN_15)
#define HTCFG_LED0 (HT_GPIOC)
#define HTCFG_LED1 (HT_GPIOC)
#define HTCFG_LED2 (HT_GPIOC)
#define HTCFG_OUTPUT_LED0_AFIO_PIN (AFIO_PIN_14)
#define HTCFG_OUTPUT_LED1_AFIO_PIN (AFIO_PIN_14)
#define HTCFG_OUTPUT_LED2_AFIO_PIN (AFIO_PIN_15)
#define HTCFG_OUTPUT_LED0_ID (GPIO_PC)
#define HTCFG_OUTPUT_LED1_ID (GPIO_PC)
#define HTCFG_OUTPUT_LED2_ID (GPIO_PC)
#define AFIO_FUN_GPIO AFIO_MODE_1
PS:每次烧入按一下复位键更好,不然有的时候没有现象。
又试了一下,点亮LED没有使用复用功能,不配置复用也能点亮LED,即不用使用AFIO_GPxConfig()。