看看原理图,确定板子上LED灯对应的引脚 开发板有两个LED,分别连接芯片的PB0和PA8引脚。 3 学习参考样例的核心代码,main.ckeil的工程路径:官网提供的驱动库及样例的压缩包解压后 xxx\hc32f072_ddl_Rev1.1.1\example\gpio\gpio_output\MDK\ gpio_output.uvprojx #include "gpio.h"static void App_LedInit(void);int32_t main(void){ ///< LED端口初始化 App_LedInit(); while(1) { ///< LED点亮 Gpio_SetIO(EVB_LEDR_PORT, EVB_LEDR_PIN); delay1ms(1000); ///< LED关闭 Gpio_ClrIO(EVB_LEDR_PORT, EVB_LEDR_PIN); delay1ms(1000); }}static void App_LedInit(void){ stc_gpio_cfg_t stcGpioCfg; ///< 打开GPIO外设时钟门控 Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); ///< 端口方向配置->输出(其它参数与以上(输入)配置参数一致) stcGpioCfg.enDir = GpioDirOut; ///< 端口上下拉配置->下拉 stcGpioCfg.enPu = GpioPuDisable; stcGpioCfg.enPd = GpioPdEnable; ///< LED关闭 Gpio_ClrIO(EVB_LEDR_PORT, EVB_LEDR_PIN); ///< GPIO IO LED端口初始化 Gpio_Init(EVB_LEDR_PORT, EVB_LEDR_PIN, &stcGpioCfg); }4 我们自己的代码参考样例给予我们的思路: 首先需要对LED对应引脚的端口进行配置,比如输出方向,上拉下拉的使能。 然后在while(1)里面延迟1s对端口的输出电平来回修改,造成闪烁。 main.c #include "ddl.h"#include "gpio.h"#include "user_gpio.h"int32_t main(void){ user_ledinit(); while (1){ Gpio_SetIO(LED1_PORT, LED1_PIN); Gpio_SetIO(LED2_PORT, LED2_PIN); delay1ms(500); Gpio_ClrIO(LED1_PORT, LED1_PIN); Gpio_ClrIO(LED2_PORT, LED2_PIN); delay1ms(500); }}user_gpio.c 我们专门添加一个文件,来写我们自己对gpio的配置,以便于后续其他功能的添加 #include "user_gpio.h"#include "gpio.h"void user_ledinit(void){ stc_gpio_cfg_t stcGpioCfg; // GPIO 端口配置结构体定义 stcGpioCfg.enDir = GpioDirOut; // 输出方向 stcGpioCfg.enPu = GpioPuDisable; // 上拉 stcGpioCfg.enPd = GpioPdEnable; // 下拉 // 打开GPIO外设时钟门控 Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); Gpio_ClrIO(LED1_PORT, LED1_PIN); // GPIO IO清零 注意: Clr是Clear的简写 Gpio_ClrIO(LED2_PORT, LED2_PIN); Gpio_Init(LED1_PORT, LED1_PIN, &stcGpioCfg); // 把配置写入 Gpio_Init(LED2_PORT, LED2_PIN, &stcGpioCfg); } user_gpio.h, 一个.c自然就要对应一个.h文件 #ifndef _USER_GPIO_H_#define _USER_GPIO_H_#define LED1_PORT GpioPortA#define LED1_PIN GpioPin8#define LED2_PORT GpioPortB#define LED2_PIN GpioPin0void user_ledinit(void); #endif
|