bsp_gpio.h
#ifndef __BSP_GPIO_H
#define __BSP_GPIO_H
#include "gd32e10x.h"
/*绿灯*/
#define LED_GREEN_GPIO_PORT GPIOC
#define LED_GREEN_GPIO_CLK RCU_GPIOC
#define LED_GREEN_GPIO_PIN GPIO_PIN_15
/*红灯*/
#define LED_RED_GPIO_PORT GPIOB
#define LED_RED_GPIO_CLK RCU_GPIOB
#define LED_RED_GPIO_PIN GPIO_PIN_9
/*SW1*/
#define SW1_GPIO_CLK RCU_GPIOC
#define SW1_GPIO_PORT GPIOC
#define SW1_GPIO_PIN GPIO_PIN_11
/*定义控制绿灯的宏*/
#define LED_GREEN_ON gpio_bit_reset(LED_GREEN_GPIO_PORT,LED_GREEN_GPIO_PIN)
#define LED_GREEN_OFF gpio_bit_set(LED_GREEN_GPIO_PORT,LED_GREEN_GPIO_PIN)
#define LED_GREEN_TOGGLE GPIO_OCTL(LED_GREEN_GPIO_PORT)^=LED_GREEN_GPIO_PIN
/*定义控制红灯的宏*/
#define LED_RED_ON gpio_bit_reset(LED_RED_GPIO_PORT,LED_RED_GPIO_PIN)
#define LED_RED_OFF gpio_bit_set(LED_RED_GPIO_PORT,LED_RED_GPIO_PIN)
#define LED_RED_TOGGLE GPIO_OCTL(LED_RED_GPIO_PORT)^=LED_RED_GPIO_PIN
void LED_GREEN_GPIO_Config(void);
void LED_RED_GPIO_Config(void);
void Delay(uint32_t nCount);
void SW1_GPIO_Config(void);
#endif
bsp_gpio.c
#include "bsp_gpio.h"
/**
* 对绿灯所在的GPIO的参数进行初始化
*/
void LED_GREEN_GPIO_Config(void)
{
rcu_periph_clock_enable(LED_GREEN_GPIO_CLK);
gpio_init(LED_GREEN_GPIO_PORT, GPIO_MODE_OUT_OD, GPIO_OSPEED_50MHZ, LED_GREEN_GPIO_PIN);
}
/**
* 对红灯所在的GPIO的参数进行初始化
*/
void LED_RED_GPIO_Config(void)
{
rcu_periph_clock_enable(LED_RED_GPIO_CLK);
gpio_init(LED_RED_GPIO_PORT, GPIO_MODE_OUT_OD, GPIO_OSPEED_50MHZ, LED_RED_GPIO_PIN);
}
/**
* 简陋的软件延时函数
*/
void Delay(uint32_t nCount)
{
for(;nCount!=0;nCount--);
}
/**
* 对SW1所在的GPIO的参数进行初始化
*/
void SW1_GPIO_Config(void)
{
rcu_periph_clock_enable(SW1_GPIO_CLK);
gpio_init(SW1_GPIO_PORT, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, SW1_GPIO_PIN);
}
main.c
void test_gpio(void)
{
LED_GREEN_GPIO_Config();
LED_GREEN_ON;
LED_RED_GPIO_Config();
LED_RED_ON;
SW1_GPIO_Config();
while(1)
{
while(gpio_input_bit_get(SW1_GPIO_PORT,SW1_GPIO_PIN)!=SET)
{
LED_GREEN_TOGGLE;
LED_RED_TOGGLE;
Delay(0x0FFFFF);
}
}
}