GD32固件库学习(三)-GPIO口使用
1 背景
关于GPIO口的使用是各类教程的入门经典例子——流水灯QAQ,连夜买了一个简单的开发板学习(好贵我焯,时间够的画建议不如自己画一个),参考官方的例子和网上的教程编写程序;
2 关于GPIO
手册解释如下:
各片上设备用其来实现逻辑输入/输出功能。每个 GPIO 端口有相关的控制和配置寄存器以满足特定应用的需求。GPIO 引脚上的外部中断在中断/事件控制器(EXTI)中有相关的控制和配置寄存器。
GPIO 端口和其他的备用功能(AFs)共用引脚,在特定的封装下获得最大的灵活性。GPIO 引脚通过配置相关的寄存器可以用作备用功能引脚,备用功能输入/输出都可以。
这个备用功能以前没怎么注意,用HAL库习惯了,stm32标准库开发中也有相关知识,这里强烈建议结合野火或者正点原子的标准库例子进行学习,可以理解很多代码;
3 编程要点
要点如下:
(1)使能GPIO端口时钟;
(2)初始化GPIO,包括引脚设置和输出模式
(3)使用固件库提供的函数控制GPIO口输出高低电平
4 代码部分
int main(void)
{
/* configure systick */
systick_config();
/* enable the LEDs GPIO clock */
rcu_periph_clock_enable(RCU_GPIOC);
/* configure LED1 GPIO port */
gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_6);
gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
/* reset LED1 GPIO pin */
gpio_bit_reset(GPIOC, GPIO_PIN_6);
while(1) {
/* turn on LED1 */
gpio_bit_set(GPIOC, GPIO_PIN_6);
delay_1ms(1000);
/* turn off LED1 */
gpio_bit_reset(GPIOC, GPIO_PIN_6);
delay_1ms(1000);
}
}
*一些建议
所有的官方示例代码都是直接在main函数里写,个人开发的时候可以采取gpio.c等形式。