实验目的
利用温湿度传感器DHT11模块,获取温湿度值,通过OLED液晶屏显示,设计人机交互界面,通过上位机设置三挡温湿度状态,超限led报警,并显示在lcd屏幕上。
- 了解DHT11驱动原理和方法(GPIO输出初始化与配置)
- STM32的UART模块的配置和使用
- OLED显示模块的驱动和使用
- 继续学习用中断的方法实现按键采集
实验内容
编写代码,配置按键和LED对应引脚GPIO所需要的模式,实验LED不同的闪烁模式和亮度变化。
实验要点
LED对应GPIO的配置
开始学习 GPIO 控制 LED 之前先了解两个概念:端口复用和重映射。
复用的概念解决了外设数量与单片机引脚数量不一致所导致的问题。重映射功能的外设由 A 引脚映射到 B 引脚(假设此时 B 引脚没有用到),通过这种机制就解决了多种外设同时使用同一引脚时所引起的冲突问题。
void initLED(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIO时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //设置对应引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //工作速度50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //设置生效
GPIO_ResetBits(GPIOB, GPIO_Pin_5); //默认低电平,LED不亮
}
另外还用到了如下两个函数来点亮或者熄灭 LED:GPIO_SetBits(GPIOB, GPIO_Pin_5);
GPIO_ResetBits(GPIOB, GPIO_Pin_5);
在IDE中打开定义可以查看其内容。
按键对应GPIO的配置
void initKey(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIO时钟
GPIO_InitStructure.GPIO_Pin = KEY_UP_PIN|KEY_DOWN_PIN; //设置按键对应引脚 UP->PA0, DOWN->PA1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure); //设置生效
}
Systick的配置
/**
* 功能:初始化Systick定时器
* 参数:None
* 返回值:None
*/
void initSysTick(void)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //设置时钟源8分频
SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk; //使能中断
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; //开定时器
SysTick->LOAD = 9; //随意设置一个重装载值
}