在用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()。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/38287.html