控制/MCU
利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。这是第二部分针对单总线通信的一个典型例子——DHT11温湿度传感器,主要用于对STM32中GPIO模块和单总线通信的理解。
STM32F103R4
DHT11
LCD1602
74HC373
CubMX
Proteus
KEIL
STM32F103R4
DHT11
LCD1602
首先还是先利用CubMX创建一个KEIL工程设置PA0位DHT11的数据口,这里之所以选用PA0,主要是有些版本的Proteus会有一些BUG,就是只有PA0端口有输入的功能,换句话说,就是只有PA0能够作为输入被单片机读取到数据。我一开始用的是8.6版本的Proteus,会有这个问题,后来下载更高版本的Proteus也可以解决这个问题,即其余端口也可作为输入口。
时钟根据自己习惯保持默认即可。
其余也是一样保持默认
然后,在生成的KEIL工程里编写相应程序即可。程序主要代码部分在“程序代码” 标题里。
最后,在Proteus中仿真验证。结果如下图所示。
mian.c
unsignedcharbuff[10];unsignedchartemp,humi;/* USER CODE END 0 *//** * @brief The application entry point. * @retval int */intmain(void) {/* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */LCD_INIT();DHT11_Init();while(1) {/**********功能1:显示温湿度数据******************/DHT11_Read_Data(&temp,&humi);//读取DHT11的温湿度数据sprintf((char *)buff,"%.2d %.2d",temp,humi);LCD_WRITE_StrDATA(buff,0,0);/* USER CODE BEGIN 3 */}/* USER CODE END 3 */}
DHT11.c
//从DHT11读取一次数据//temp:温度值(范围:0~50°)//humi:湿度值(范围:20%~90%)//返回值:0,正常;1,读取失败unsignedcharDHT11_Read_Data(unsignedchar*temp,unsignedchar*humi){unsignedcharbuf[5];unsignedchari;DHT11_Rst();if(DHT11_Check()==0) {//HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);for(i=0;i<5;i++)//读取40位数据{ buf[i]=DHT11_Read_Byte(); }if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]) { *humi=buf[0]; *temp=buf[2]; } }elsereturn1;return0; }
全部0条评论
快来发表一下你的评论吧 !