上一篇我们讲解了如何通过数据手册和库函数手册开发STM32的LED驱动(也就是通用GPIO的输出功能),今天我们讲解其输入功能实现。接上篇寄存器介绍(STM32根据数据手册完成LED驱动开发(寄存器版和库函数版介绍),GPIO有关寄存器有7个,本节用到端口配置低寄存器(因为根据电路原理图设计,用到引脚PC5),端口输入数据寄存器。
就开发驱动流程讲,先要看硬件电路接口,定义错了接口,啥功能都实现不了。根据硬件连接情况,我们分析并使用KEY0进行设计。KEY0 的一端接地,一端接单片机PC5引脚,表示我们的按键是按下采集低电平信号,也就是读取的数据是0。好,那么我们按照上节课讲解的八种工作模式,我们肯定是输入模式,但是是哪一种呢?这里就需要有一个分析,我们的51单片机P1-P3接口设计的时候都内置了一个弱上拉电阻,所以设计时都是采集低电平信号。同样,我们32这里要配置为上拉输入, 上拉是将不确定信号(上电时极容易误导信号状态)通过一个电阻钳位在高电平,电阻同时限流作用,如果不,那输入口没有了高低电平对比,纵然按键按下接到了地,单片机读取到的是不确定信号,分析自然就会有问题。
我们了解了配置后,只需要再了解下数据输入寄存器。通过对低16位读出,就能了解对应PIN引脚的电平情况。
今天呢,我们还要讲解怎么分析库函数《stm32f10x_stdperiph_lib_um.chm》
开发stm32驱动,首先是开启相应的时钟,这要看RCC
中文参考手册的第六章,RCC控制,那么我们就去库函数中的module下找RCC模块,看其中各个函数的意义。
找到这个目录下打开加号,全是函数,其中RCC_APB2PeriphClockCmd就是今天要用的。你问我怎么知道,因为我把这些基本都了解了一下,大家只需要先跟着我学,做,后面自己熟练了,自己就去探索新功能了。
上面这个函数就是开启相应功能时钟的,再点击到函数中
参数介绍,就有我们按键需要的GPIOC时钟。
再然后,我们用到GPIO通用输入功能,那就找GPIO模块下的函数,有初始化配置(也就是前面说的输入输出模式配置寄存器)函数GPIO_Init和数据位读取GPIO_ReadInputDataBit函数
好,安排初始化代码
void KEY_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_Init(GPIOC,&GPIO_InitStructure);
}
主函数代码
int main()
{
delay_init();
LED_Init();
KEY_Init();
while(1)
{
if(KEY0==0)
{
delay_ms(10);
if(KEY0==0)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
delay_ms(500);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
delay_ms(500);
while(!KEY0);
}
}
}
}
延时函数我们下节课讲解,涉及时钟问题。