在开发板上板载的外设有LED、KEY及蜂鸣器等,其电路如图1至图3所示,通过GPIO口使用可对它们加以控制。
图1 LED原理图
由图1可知,亮度LED时,需要所连接的引脚来输出低电平。
图2 KEY原理图
由图2可知,当按键按下时,会向所连接的引脚提供低电平,但为了可靠地识别相应引脚的电平状态,应将引脚配置上拉输入模式。
图3 蜂鸣器原理图
由图3可知,要使蜂鸣器发生必须使Q1导通,而要使Q1导通,则需要PB3提供高电平。
为使用KEY对LED和KEY进行控制,对KEY所用引脚的配置函数为:
void key(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_HSI_Enable(RCC_HSIOSC_DIV6);
__RCC_GPIOB_CLK_ENABLE();
GPIO_InitStruct.IT = GPIO_IT_NONE;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT_PULLUP;
GPIO_InitStruct.Pins = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_Init(CW_GPIOB, &GPIO_InitStruct);
}
要使用3个KEY对3个LED实现一对一的状态控制,并以KEY2同时控制蜂鸣器,其主程序如下:
int32_t main(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_HSI_Enable(RCC_HSIOSC_DIV6);
__RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.IT = GPIO_IT_NONE;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pins = LED_GPIO_PINS;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct); __RCC_GPIOC_CLK_ENABLE();
GPIO_InitStruct.IT= GPIO_IT_NONE;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pins = GPIO_PIN_13;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_Init(CW_GPIOC, &GPIO_InitStruct); GPIO_InitStruct.IT= GPIO_IT_NONE;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pins = GPIO_PIN_3;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_Init(CW_GPIOB, &GPIO_InitStruct);
key();
while(1)
{
if(GPIO_ReadPin(CW_GPIOB,GPIO_PIN_13)==GPIO_Pin_RESET)
{
GPIO_WritePin(CW_GPIOA,
GPIO_PIN_7,GPIO_Pin_RESET);
}
else
{
GPIO_WritePin(CW_GPIOA, GPIO_PIN_7,GPIO_Pin_SET);
}
if(GPIO_ReadPin(CW_GPIOB,GPIO_PIN_14)==GPIO_Pin_RESET)
{
GPIO_WritePin(CW_GPIOA,GPIO_PIN_8,GPIO_Pin_RESET);
GPIO_WritePin(CW_GPIOB,GPIO_PIN_3,GPIO_Pin_SET);
}
else
{
GPIO_WritePin(CW_GPIOA,GPIO_PIN_8,GPIO_Pin_SET); GPIO_WritePin(CW_GPIOB,GPIO_PIN_3,GPIO_Pin_RESET);
}
if(GPIO_ReadPin(CW_GPIOB,GPIO_PIN_15)==GPIO_Pin_RESET)
{
GPIO_WritePin(CW_GPIOC,GPIO_PIN_13,GPIO_Pin_RESET);
}
else
{
GPIO_WritePin(CW_GPIOC,GPIO_PIN_13,GPIO_Pin_SET);
}
}
}
经程序的编译和下载,其控制效果符合设计要求。其中KEY1对应LED2,KEY2对应LED3,KEY3对应LED4;当按下相应按键时,则对应的LED会点亮;释放时,则LED会熄灭。此外,KEY2还对应着蜂鸣器,在按下KEY2时,则蜂鸣器会发出声响。
在掌握了GPIO口的使用后,就可充分发挥其作用来实现更多的功能,例如以GPIO口来模拟I2C以控制I2C器件等,例如驱动OLED屏的显示;以GPIO口来模拟SPI以控制SPI器件等,例如驱动TFT屏的显示。
后续会利用板载的I2C接口及TFT接口来解决OLED屏及TFT屏的显示问题,进而实现电子时钟及数字电压表的功能等。