本帖最后由 jinglixixi 于 2025-2-4 00:13 编辑
为了能使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 点亮状态
开发板原理图:
|