好的上一期我们讲了GPIO的设置(初始化),这一期我们来讲一下GPIO怎么使用。
就根据上一期代码接着来。但是具体使用前我们先看一下固件库函数手册:
蓝色是读取,红色是输出
上一期我们已经初始化了GPIOA的Pin0、1号脚为推挽输出,GPIOB的Pin0、1号脚为上拉输入,现在就先让GPIOA_Pin_0和1输出高低电平。(单片机点灯工程师QvQ)
输出
这里我们看到GPIO输出函数是四条我们可以分为三种方式。
方式一:GPIO_SetBit置位指定端口和GPIO_ResetBits复位/清除指定端口,函数使用时所用的两个参数是那组端口和具体的端口号;
方式二:GPIO_WriteBit置位或复位具体端口
方式三:GPIO_Write对整组端口进行操作
/**
参数1:那组GPIOx端口;
参数2:具体的端口号GPIO_Pin_x;
**/
GPIO_SetBits(GPIOA, GPIO_Pin_0); //使A组0号端口输出高电平
GPIO_ResetBits(GPIOA, GPIO_Pin_0); //使A组0号端口输出低电平
/**
参数1:那组GPIOx端口;
参数2:具体的端口号GPIO_Pin_x;
参数3:是置位Bit_SET还是Bit_RESET复位,还可以用(BitAction)(0或1)这种方式
**/
GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET); //使A组0号端口输出高电平
GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET); //使A组0号端口输出低电平
/**
参数1:那组GPIOx端口;
参数2:写入整组端口的值
我们初始化了0、1端口所以对整组端口操作时候0、1都会被操作
**/
GPIO_Write(GPIOA, 0x0001); //直接数值操作将变量值写入GPIOA,0口置位,1口复位
GPIO_Write(GPIOA, 0x0000); //直接数值操作将变量值写入GPIOA
读取
读取我分为两种:读取输入和读取输出,同时这两种还分为读取整组端口和读取具体端口
/**
读取端口的输出值
**/
GPIO_ReadOutputData(GPIOA); //读取整组端口的输出,返回值是四位16进制
GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0); //读取GPIOA的0号端口的输出值,返回值是0、1
/**
读取端口的输入值
**/
GPIO_ReadInputData(GPIOB); //读取整组端口的输入,返回值是四位16进制
GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0); //读取GPIOB的0号端口的输入值,返回值是0、1
好的你现在已经了解了GPIO端口基本的读取和输出,可以去写个根据KEY点亮LED和代码了
当然这里还有个骚操作,大家可以看看这个代码是什么意思,实现了什么操作:
GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)(! GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_0)));
delay_ms(500);