赞
踩
在用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()。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。