为了能使LED灯闪烁起来,通过查看原理图可知D7所连接的引脚为PA12,见图1闪烁。
图1 使用引脚
经修改,使D7闪烁起来的主程序为:
int main(void)
{
APM_MINI_Init();
GPIO_Config_T gpioConfig;
RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOA);
gpioConfig.pin = GPIO_PIN_12;
gpioConfig.mode = GPIO_MODE_OUT;
gpioConfig.outtype = GPIO_OUT_TYPE_PP;
gpioConfig.speed = GPIO_SPEED_50MHz;
gpioConfig.pupd = GPIO_PUPD_NO;
GPIO_Config(GPIOA, &gpioConfig);
while (1)
{
GPIO_ClearBit(GPIOA, GPIO_PIN_12);
APM_DelayMs(200);
GPIO_SetBit(GPIOA, GPIO_PIN_12);
APM_DelayMs(200);
}
}
经程序的编译和下载,D7终于闪烁起来。
如果点亮LED灯代表GPIO口输出的成功,那以按键来控制LED灯的亮灭就代表输入、输出功能的完美结合。
那从哪儿来获得按键的引脚呢?
那就是利用这2个开关,见图2所示。
图2 开关电路
由图3可知,其所占用的引脚为PC13和PB12。
图3 所用引脚
以所用Direction开关控制D7指示灯为例,将PC12设置为输入口的函数为:
void SW_Init(void)
{
GPIO_Config_T gpioConfig;
//PC13 & PB12
RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOC);
gpioConfig.pin = GPIO_PIN_13;
gpioConfig.mode = GPIO_MODE_IN;
gpioConfig.speed = GPIO_SPEED_50MHz;
gpioConfig.pupd = GPIO_PUPD_PU;
GPIO_Config(GPIOC, &gpioConfig);
RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOB);
gpioConfig.pin = GPIO_PIN_12;
GPIO_Config(GPIOB, &gpioConfig);
}
对LED的初始化函数为:
void LED_Init(void)
{
GPIO_Config_T gpioConfig;
gpioConfig.mode = GPIO_MODE_OUT;
gpioConfig.outtype = GPIO_OUT_TYPE_PP;
gpioConfig.speed = GPIO_SPEED_50MHz;
gpioConfig.pupd = GPIO_PUPD_NO;
RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOA);
gpioConfig.pin = GPIO_PIN_12;
GPIO_Config(GPIOA, &gpioConfig);
}
相应的系统最小初始化函数为:
void APM_MINI_Init(void)
{
/* Init delay function */
APM_DelayInit();
LED_Init();
SW_Init();
}
实现按键控制LED灯的主程序为:
int main(void)
{
APM_MINI_Init();
while (1)
{
if(GPIO_ReadInputBit(GPIOC, GPIO_PIN_13)==1)
{
GPIO_ClearBit(GPIOA, GPIO_PIN_12);
}
else
{
GPIO_SetBit(GPIOA, GPIO_PIN_12);
}
}
}
经程序的编译和下载,其执行效果如图4和图5所示。
图4 熄灭状态
图5 点亮状态
|