完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32F407ZE使用温湿度传感器 (广州奥松) ,读取温湿度数据并显示到PC端串口助手实例 输出结果: 具体代码及解析如下: main.c部分: #include #include "dht11.h" #include "ustart.h" #include DHT11_Data_TypeDef DHT11_Data; int main() { Systick_Init(); USART1_Init(); DHT11_Init(GPIO_Mode_OUT); USART_SendString(USART1, "Hello world!rn"); while(1) { //调用Read_DHT11读取温湿度,若成功则输出该信息*/ if( Read_DHT11 ( & DHT11_Data ) == SUCCESS) { printf("rn 湿度:%d RH ,温度:%d.%d Crn",DHT11_Data.humi_int, //湿度精度为整数 DHT11_Data.temp_int,DHT11_Data.temp_deci); //温度精度为小数 delay_s(1); //延时1us } } } ustart.h部分 #ifndef USTART_H #define USTART_H #include #include #include #include "sys.h" #include "delay.h" extern char USART1_ReceiveData[50]; //接收PC端发送过来的字符 extern int Receive_Flag; void USART1_Init(); void USART_SendString(USART_TypeDef* USARTx, char *DataString); #endif ustart.c部分 #include "ustart.h" #include int fputc(int ch, FILE *f) { /* 发送一个字节数据到串口 */ USART_SendData(USART1, (uint8_t) ch); //程序开始时,会发送一次数据,ch是系统分配的(可能是0),串口会显示大概两个空格的内容 /* 等待发送完毕 */ while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); return (ch); } void USART1_Init() { GPIO_InitTypeDef GPIOInit_Struct; USART_InitTypeDef USARTInit_Struct; NVIC_InitTypeDef USARTNVIC_Struct; //1、使能时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //2、初始化对应的IO引脚复用为USART1功能 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); GPIOInit_Struct.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; GPIOInit_Struct.GPIO_Mode = GPIO_Mode_AF; GPIOInit_Struct.GPIO_OType = GPIO_OType_PP; GPIOInit_Struct.GPIO_Speed = GPIO_Fast_Speed; GPIOInit_Struct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA,&GPIOInit_Struct); //将PA9 PA10复用为USART1功能 GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //3、USART1初始化 USARTInit_Struct.USART_BaudRate = 115200; //波特率 USARTInit_Struct.USART_Parity = USART_Parity_No; //无校验位 USARTInit_Struct.USART_StopBits = USART_StopBits_1; //1位停止位 USARTInit_Struct.USART_WordLength = USART_WordLength_8b; //8位数据位 USARTInit_Struct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式 USARTInit_Struct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件控制流 USART_Init(USART1,&USARTInit_Struct); //开启串口终端 USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); USARTNVIC_Struct.NVIC_IRQChannel = USART1_IRQn;//stm32f4xx.h USARTNVIC_Struct.NVIC_IRQChannelPreemptionPriority = 0; USARTNVIC_Struct.NVIC_IRQChannelSubPriority = 0; USARTNVIC_Struct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&USARTNVIC_Struct); //4、开启串口 USART_Cmd(USART1,ENABLE); } void USART_SendString(USART_TypeDef* USARTx, char *DataString) { int i = 0; USART_ClearFlag(USARTx,USART_FLAG_TC); //发送字符前清空标志位(否则缺失字符串的第一个字符) while(DataString != ' |