前言
本次进入GPIO模块的第二阶段学习一、按键的使用
按键检测宏定义
#define KEY1 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_3) //读取按键1(上拉电阻)
#define KEY2 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) //读取按键2(上拉电阻)
GPIO引脚口初始化
void GPIO_Toggle_INIT(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);//小灯GPIO相关配置
/*………………………………………………………………………………………………………………………………*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);//按键GPIO相关配置
/*………………………………………………………………………………………………………………………………*/
}
主函数的相关实现,小灯随按键状态量灭
int main(void)
{
u8 i=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//配置
Delay_Init();
USART_Printf_Init(115200);//初始化外设
printf("SystemClk:%d\r\n",SystemCoreClock);
printf("GPIO Toggle TEST\r\n");
GPIO_Toggle_INIT();
/*………………………………………………………………………………………………………………………………*/
GPIO_WriteBit(GPIOB, GPIO_Pin_8, 1);//给小灯引脚写高电平,小灯不亮
GPIO_WriteBit(GPIOB, GPIO_Pin_9, 1);//给小灯引脚写高电平,小灯不亮
/*………………………………………………………………………………………………………………………………*/
while(1)
{
if(!KEY1){
GPIO_WriteBit(GPIOB, GPIO_Pin_8, 0);//检测按键1,若按下,(上拉),写低电平,小灯亮
}
else{
GPIO_WriteBit(GPIOB, GPIO_Pin_8, 1);//检测按键1,若未按下,(上拉),写高电平,小灯不亮
}
if(!KEY2){
GPIO_WriteBit(GPIOB, GPIO_Pin_9, 0);//检测按键2,若按下,(上拉),写低电平,另一小灯亮
}
else{
GPIO_WriteBit(GPIOB, GPIO_Pin_9, 1);//检测按键2,若未按下,(上拉),写高电平,另一小灯不亮
}
}
}
}
作为最简单的点灯程序,其编程语句简单易懂,初始化系统配置后进行GPIO口的配置,接着随着按键的状态对小灯引脚写高低电平就可,其中本例按键为上拉电阻。
二、串口的信息发送
1.初始化GPIO口
代码如下:
void GPIO_Toggle_INIT(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
2.通过串口助手输出数据
int main(void)
{
u8 i=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Delay_Init();
USART_Printf_Init(115200);
printf("SystemClk:%d\r\n",SystemCoreClock);
printf("GPIO Toggle TEST\r\n");
GPIO_Toggle_INIT();
while(1)
{
Delay_Ms(250);
GPIO_WriteBit(GPIOA, GPIO_Pin_0, 0xa);
}
}
总结
GPIO的学习就告一阶段,其主要包括初始化引脚接口及主函数中调用所需库函数,依据自身进行改写,其中引脚的模式定义等显得较为重要,下面开始对TIM定时器的学习。