六、库函数点亮LED灯
1. 配置流程
一般我们使用GPIO的端口,都需要有以下两个步骤。
- 配置GPIO的输出参数
- 配置GPIO的输出
注意在这里我们不需要进行GPIO端口时钟的使能。 时钟的初始化在 SystemInit 中被初始化,然后疑问又来了。SystemInit 在main函数中没找到,这个就要和单片机的启动有关系了,在 main 函数之前还有时钟初始化和 __main 函数的运行,这个我们要去启动文件中可以找到。如下图
从LED介绍那一章节我们了解到用户LED接的是单片机的PB2。下面我们就以用户LED接的PB2进行介绍,其它也是类似的。
在使用库函数之前,我们需要了解到,HC32官方帮我们做好了这一套库函数,很详细,很全面。我们使用的时候只需要到对应的函数中去查找即可。
1.1 配置GPIO的输出参数
我们使用GPIO配置相关的结构体,将参数存放在GPIO结构体中,然后直接调用初始化函数读取结构体中的参数进行初始化,要到hc32_ll_gpio.h去查找对应的函数或结构体。
- int32_t GPIO_Init(uint8_t u8Port, uint16_t u16Pin, const stc_gpio_init_t *pstcGpioInit)
这个函数 GPIO_Init
是用于初始化HC32系列微控制器的GPIO(通用输入输出)端口的。它根据提供的参数配置GPIO端口的工作模式、速度、输出类型等。 参数解释:
u8Port
: 这是一个表示 GPIO 端口的参数,通常使用GPIO_PORT_x
这样的宏定义来表示不同的 GPIO 端口,具体的值取决于不同的产品。通过这个参数,函数知道要初始化哪个 GPIO 端口。u16Pin
: 这是一个表示 GPIO 引脚的参数,通常使用GPIO_PIN_x
这样的宏定义来表示不同的 GPIO 引脚,具体的值也取决于不同的产品。通过这个参数,函数知道要初始化哪个具体的 GPIO 引脚。pstcGpioInit
: 这是一个指向stc_gpio_init_t
结构体的指针,包含了 GPIO 初始化的配置信息,即上面定义的结构体类型。函数将使用这个结构体中的信息来配置相应的 GPIO 端口和引脚。- 返回值
int32_t
: 函数的返回值是一个int32_t
类型的值,表示初始化操作的结果。可能的返回值包括:LL_OK
: 表示 GPIO 初始化成功。LL_ERR_INVD_PARAM
: 表示传入的参数指针为 NULL,即参数无效。
满足我们的功能。结构体具体成员:
要配置PB2为推挽输出,速度为100MHZ,只需要传入对应的参数即可。转换为代码为
stc_gpio_init_t stcGpioInit; // 定义GPIO结构体
stcGpioInit.u16PinState = PIN_STAT_RST; // 低电平
stcGpioInit.u16PinDir = PIN_DIR_OUT; // 输出模式
stcGpioInit.u16PinOutputType = PIN_OUT_TYPE_CMOS; // 推挽输出
stcGpioInit.u16PinDrv = PIN_HIGH_DRV; // 驱动能力高
stcGpioInit.u16PullUp = PIN_PU_OFF; // 上拉关闭
(void)GPIO_Init(GPIO_PORT_B, GPIO_PIN_02, &stcGpioInit);
2
3
4
5
6
7
8
9
到此,有关GPIO的配置就完成了。
1.2 配置LED输出高电平
配置好GPIO之后,我们就可以进行点灯了。其实也就是让GPIO引脚输出高低电平,到我们的开发板上就是让PB2输出高电平。
如何让PB2输出高电平呢?通过查阅库函数,这里为大家总结了几种操作的方式。
1.2.1 GPIO_SetPins
此函数用于将选定的GPIO引脚设置为高电平 函数原型为:
void GPIO_SetPins(uint8_t u8Port, uint16_t u16Pin)
u8Port
: 这是一个表示 GPIO 端口的参数,通常使用 GPIO_PORT_x 这样的宏定义来表示不同的 GPIO 端口。通过这个参数,函数知道要设置哪个 GPIO 端口的引脚。u16Pin
: 这是一个表示 GPIO 引脚的参数,通常使用 GPIO_PIN_x 这样的宏定义来表示不同的 GPIO 引脚。通过这个参数,函数知道要设置哪个具体的 GPIO 引脚的输出数据
// 配置PB2引脚转化代码为高电平
GPIO_SetPins(GPIO_PORT_B,GPIO_PIN_02);
2
1.2.2 GPIO_ResetPins
此函数用于将选定的GPIO引脚重置为低电平
函数原型为:
void GPIO_ResetPins(uint8_t u8Port, uint16_t u16Pin)
u8Port
: 这是一个表示 GPIO 端口的参数,通常使用GPIO_PORT_x
这样的宏定义来表示不同的 GPIO 端口。通过这个参数,函数知道要重置哪个 GPIO 端口的引脚。u16Pin
: 这是一个表示 GPIO 引脚的参数,通常使用GPIO_PIN_x
这样的宏定义来表示不同的 GPIO 引脚。通过这个参数,函数知道要重置哪个具体的 GPIO 引脚的输出数据。
// 配置PB2引脚输出低电平转化代码为
GPIO_ResetPins(GPIO_PORT_B,GPIO_PIN_02);
2
1.2.3 GPIO_WritePort
此函数用于同时写入整个GPIO端口的值。 函数原型为:
void GPIO_WritePort(uint8_t u8Port, uint16_t u16PortVal)
u8Port
: 这是一个表示 GPIO 端口的参数,通常使用GPIO_PORT_x
这样的宏定义来表示不同的 GPIO 端口。通过这个参数,函数知道要向哪个 GPIO 端口写入数据。u16PortVal
: 这是一个表示要写入的 GPIO 数据端口值的参数,通常使用一个uint16_t
类型的值来表示。该值包含了要写入到 GPIO 数据端口的具体数据 这个函数不建议使用,容易出错,出错了还不容易寻找问题。
1.2.4 GPIO_TogglePins
这个函数的作用是切换指定 GPIO 端口的指定引脚的输出状态,即如果该引脚当前是高电平,则切换为低电平;如果当前是低电平,则切换为高电平。通过传入的端口和引脚参数,函数能够准确地找到要切换状态的 GPIO 引脚,并执行状态切换操作。
函数原型为:
void GPIO_TogglePins(uint8_t u8Port, uint16_t u16Pin)
u8Port
: 这是一个表示 GPIO 端口的参数,通常使用GPIO_PORT_x
这样的宏定义来表示不同的 GPIO 端口。通过这个参数,函数知道要切换哪个 GPIO 端口的引脚状态。u16Pin
: 这是一个表示 GPIO 引脚的参数,通常使用GPIO_PIN_x
这样的宏定义来表示不同的 GPIO 引脚。通过这个参数,函数知道要切换哪个具体的 GPIO 引脚的输出状态。
2. 实验现象
烧写我们的代码之后,可以看到开发板的LED这个灯将被点亮。