首页 > 代码库 > 嵌入式第三次课
嵌入式第三次课
嵌入式软件设计第3次实验报告
学号:140201225 姓名:刘曦洋
组别:第1组 实验地点:D19
一、实验目的:
1、掌握STM32固件库函数驱动串口的方法。
2、掌握温湿度一体化数字传感器DHT11的驱动方法。
二、实验内容:
1.编写STM32F407串口驱动程序,完成串口与电脑RS232的通信实验。
2.编写DHT11驱动程序采集温度和湿度,从串口发送给电脑。
三、实验过程描述及结果展示:
串口1硬件连接图
STM32串口配置的方法:
1.串口时钟使能, GPIO 时钟使能 。
2.设置引脚复用器映射:调GPIO_PinAFConfig函数。
3.GPIO 初始化 设置 :要设置 模式 为复用功能。
4.串口参数初始化 :设置波特率,字长奇偶校验等参数 。
5.使能串口 。
DHT11硬件连接图
DHT11数据格式
1.DHT11数字湿温度传感器采用单总线据格式。即,单个引脚端口完成输入输出双向传输,其数据包由 5Byte (40Bit)组成。
2.数据分小数部分和整数部分,一次完整的数据传输为
40bit,高位先出。
DHT11的数据格式为:
8bit 湿度整数数据 + 8bit湿度小数 +8bit 温度整数数据 + 8bit 温度小数数据 +8bit 校验和。
实验代码:
u8 temperature;
u8 humidity;
delay_init(168);
//初始化I/0串口1
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//使能GPIOA
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能串口
//串口1对应引脚复用映射
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIO9复用为USART1
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIO10复用为USART1
//GPIO配置
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_9 |GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //配置为复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//USART1的配置
USART_InitStructure.USART_BaudRate = 115200;//配置波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //长度 为8位
USART_InitStructure.USART_StopBits = USART_StopBits_1; //一个停止位
USART_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验
USART_InitStructure.USART_HardwareFlowControl= USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode= USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1,ENABLE);
}
/* while(1)
{
USART_SendData(USART1,0x61);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET) //等待发送
delay_ms(300);
} */
{
GPIO_InitTypeDef GPIO_InitStructure1;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG,ENABLE);//使能GPIOA
GPIO_InitStructure1.GPIO_Pin =GPIO_Pin_9;
GPIO_InitStructure1.GPIO_Mode = GPIO_Mode_OUT; //配置为复用功能
GPIO_InitStructure1.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure1.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure1.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOG,&GPIO_InitStructure1);
DHT11_Rst();
while(DHT11_Check()); //等待复位
}
while(1)
{
DHT11_Read_Data(&temperature,&humidity);//读取温度和湿度
USART_SendData(USART1,(temperature/10)+0x30);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
USART_SendData(USART1,(temperature%10)+0x30);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
delay_ms(300);
}
}
四、总结及实验心得:
此次课是完成利用串口进行通信,将嵌入式设备上的数据传送到PC机上。
这次课分为两个内容,第一个是完成串口的通信。第二个是打开嵌入式板子上的温湿度传感器,将实时的信息传输到PC机上。
这次课是老师带着大家做,只要跟上就不困难。
配置串口首先要使能串口,再设置引脚复用映射,再配置串口,最后初始化。
嵌入式第三次课