1.基础知识点部分:
GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FL 浮空输入
GPIO_Mode_IPD 上拉输入
GPIO_Mode_IPU 下拉输入
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_AF_OD 复用开漏
GPIO_Mode_AF_FP 复用推挽
注:模拟输入对应GPIO无效,引脚接内部ADC。
浮空输入,上拉输入,下拉输入都是可读取引脚电平。下拉输入,上拉输入分别有下拉电阻和上拉电阻,所以悬空时为低电平和高电平。浮空输入悬空时,电平不确定。
开漏输出,推挽输出,复用开漏,复用推挽可交叉理解。带开漏的表示高电平高阻态,低电平接VSS.带推挽的表示高电平接VDD,低电平接VSS。复用的功能由友上篇外设决定。
注:添加文件时,注意填写:USE_PERIPH_DRIVER
2.LED篇:
包含点亮LED+流水灯+闪烁
使用到的库函数:GPIO_Init();注意对应的参数,此处选择的是GPIO_Mode_Out_PP
GPIO_SetBits; GPIO_ResetBits();等
注意事项:
GPIO_SetBits; 是指定端口置为高电平,熄灭(低电平点亮)
LED使用的一般是GPIOA的PA0~PA15引脚,且流水灯时,GPIO_PIN可直接写为GPIO_All。
流水灯时,思路是在while循环内,每次只有一个低电平(低电平点亮),其他均为高电平。例如,点亮最后一位的LED,需要为1111 1111 1111 1110(前十六位不能被使用),即为~0x0001,右侧第二位为1111 1111 1111 1101,即为~0x0002....
3.蜂鸣器篇:
使用的是GPIOB的Pin_12引脚
蜂鸣器分为有源蜂鸣器和无源蜂鸣器。区别是是否自带振荡源。有源蜂鸣器自带振荡源,连接电压即可发声。
原理是使GPIO的12引脚持续的置高电平,低电平....注意延时。
4.按键控制LED篇:
需要单独封装LED和按键控制函数,建议取名为led.c和Key.c。注意对应的头文件。
led.c:此处GPIO_Init,参数对应的是GPIO_PIN_1|GPIO_PIN_2 GPIO_Mode_Out_PP
打开灯使用GPIO_Reset,关闭灯使用GPIO_ResetBits。与实际逻辑相反,需要封装void LED1_ON(void)和void LED1_OFF(void)等。需要在主函数内完成按下按键,灯点亮的逻辑,需要重新封装,推荐函数名起名为void LED1_Turn(void)和LED2_Turn。里面执行的逻辑是查看某一位是否置为高电平,使用GPIO_ReadOutPutDataBit。
key.c:此处使用的仍为GPIO_Init,参数为GPIOB的GPIO_PIN_1|GPIO_PIN_11。
此处注意需要自定义完成按键按下,返回1,不被按下就不传递或传递0给主函数,主函数对1或0判定即可(对LED1的判断)。此外LED2按下返回2,不被按下就不传递或传递0给主函数。
需要自定义函数Key_GetNum,需要的库函数是GPIO_ReadInputDataBit。
main.c:只需要循环内判断返回值是1还是0,是1就执行LED1_Turn(均以封装,直接使用),是2就执行LED2_Turn
5.OLED显示屏篇:
没什么逻辑,只写库函数
OLED_Clear();清屏函数
OLED_ShowChar(1, 1, 'A');//在第一行一列显示A,字符需要用''
OLED_ShowString(1, 3, "HelloWorld!");//在第一行第三列开始显示HelloWorld!,
//注:此处要查找数字的长度,超过就会截断,无法显示
OLED_ShowNum(2, 1, 12345, 5);//在第二行一列显示12345,显示五个长度,
// 注:长度要适当
OLED_ShowSignedNum(2, 7, -66, 2);//显示-66,第一位显示符号位
OLED_ShowHexNum(3, 1, 0xAA55, 4);//显示AA55,十六进制
OLED_ShowBinNum(4, 1, 0xAA55, 16);//显示2进制的AA55,即10101010 01010101
OLED_Clear();//清屏。若只想清除某一位或某几位,使用OLED_ShowString();并添加空格.
6.光敏传感器控制蜂鸣器:
推荐封装光敏传感器为LightSensor,蜂鸣器封装为Buzzer,封装Buzzer_ON,内部通过置高电平完成蜂鸣器发声的操作。使用的是GPIO_Pin_12。
库函数使用GPIO_ReadInPutDataBit()==1,如果是就执行Buzzer_ON。
7.博主笔记:
字迹很丑,凑合看吧