STM32小项目总结1(部分基础知识+LED+蜂鸣器+按键控制LED+OLED显示屏+光敏传感器控制蜂鸣器)

简介: STM32小项目总结1(部分基础知识+LED+蜂鸣器+按键控制LED+OLED显示屏+光敏传感器控制蜂鸣器)

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.博主笔记:


字迹很丑,凑合看吧


e21f63db6c1d43e797728b3363a0dfd7.jpg


相关文章
|
7月前
|
传感器
【STM32】I2C练习,SHT3X温度传感器的数据读取
【STM32】I2C练习,SHT3X温度传感器的数据读取
117 0
|
5月前
|
传感器 数据安全/隐私保护 数据格式
STM32CubeMX DHT11温湿度传感器
STM32CubeMX DHT11温湿度传感器
393 11
|
5月前
STM32CubeMX OLED驱动
STM32CubeMX OLED驱动
80 10
|
5月前
STM32CubeMX 按键控制LED
STM32CubeMX 按键控制LED
79 0
|
5月前
stm32f407探索者开发板(八)——按键输入实验--GPIO做输入
stm32f407探索者开发板(八)——按键输入实验--GPIO做输入
|
5月前
|
数据安全/隐私保护
STM32F103C8T6实现简易密码锁(CubeMax配置)(一),Oled显示。
项目功能:实现设置密码,登陆密码,后期还可以通过E2PROM实现掉电不丢失数据。通过Oled的显示去判断我们是否设置或者登陆成功。
121 0
|
6月前
|
传感器 数据格式
【STM32】DHT11温湿度模块传感器详解&代码
【STM32】DHT11温湿度模块传感器详解&代码
|
6月前
|
芯片
【STM32】STM32简述中断的基础知识
【STM32】STM32简述中断的基础知识
|
7月前
|
C++ 内存技术