目录
(1)在项目文件中添加serial_port.c以及serial_port.h,位置分别为Core_Src以及Core_Inc。
(3)在Drivers/CMSIS下修改stm32f1xx_hal_conf.h文件,开启usart
(4)在Drivers/stm32f1xx_HAL_Driver中添加usart以及uart驱动文件
一、实验目的
本次实验涉及传感器:BH1750光强传感器模块、MPU6050陀螺仪、Dht11温湿度模块。学习如何获取传感器的数据,并转化对应的数据,并做出对应的反应。学习如何调用已经写成模块的代码。
二、实验原理
利用 STM32F103ZET6 开发板与 STM32CubeMX 开放平台和BH1750光强传感器模块、MPU6050陀螺仪、Dht11温湿度模块进行嵌入式系统开发。
代码1-usart模块化代码
serial_port.c
#include "serial_port.h"
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
UART_HandleTypeDef huart1;
/* USART1 init function */
void MX_USART1_UART_Init(void)
{
/* USER CODE BEGIN USART1_Init 0 */
/* USER CODE END USART1_Init 0 */
/* USER CODE BEGIN USART1_Init 1 */
/* USER CODE END USART1_Init 1 */
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN USART1_Init 2 */
/* USER CODE END USART1_Init 2 */
}
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(uartHandle->Instance==USART1)
{
/* USER CODE BEGIN USART1_MspInit 0 */
/* USER CODE END USART1_MspInit 0 */
/* USART1 clock enable */
__HAL_RCC_USART1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
/**USART1 GPIO Configuration
PA9 ------> USART1_TX
PA10 ------> USART1_RX
*/
GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USART1 interrupt Init */
HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspInit 1 */
/* USER CODE END USART1_MspInit 1 */
}
}
void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
{
if(uartHandle->Instance==USART1)
{
/* USER CODE BEGIN USART1_MspDeInit 0 */
/* USER CODE END USART1_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_USART1_CLK_DISABLE();
/**USART1 GPIO Configuration
PA9 ------> USART1_TX
PA10 ------> USART1_RX
*/
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);
/* USART1 interrupt Deinit */
HAL_NVIC_DisableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspDeInit 1 */
/* USER CODE END USART1_MspDeInit 1 */
}
}
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
void serial_init(void){
MX_USART1_UART_Init();
}
serial_port.h
#ifndef __serial_port_H__
#define __serial_port_H__
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "main.h"
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
extern UART_HandleTypeDef huart1;
/* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */
void MX_USART1_UART_Init(void);
void serial_init(void);
/* USER CODE BEGIN Prototypes */
/* USER CODE END Prototypes */
#ifdef __cplusplus
}
#endif
#endif /* __USART_H__ */
三、实验步骤,代码与结果
1.添加USART串口
(1)在项目文件中添加serial_port.c以及serial_port.h,位置分别为Core_Src以及Core_Inc。
图1 放置serial_port.c和serial_port.h
(2)在keil中添加.c代码
图2 在keil中添加.c代码
(3)在Drivers/CMSIS下修改stm32f1xx_hal_conf.h文件,开启usart
图3 修改stm32f1xx_hal_conf.h文件
(4)在Drivers/stm32f1xx_HAL_Driver中添加usart以及uart驱动文件
图4 添加驱动文件
图5 驱动文件所在位置
(5)在main函数中添加新的头文件
图6 添加头文件
2.实验1,bh1750代码理解
图7 主设备(Master)模式下的数据接收
图8 代码分析
3.实验2:MPU6050代码理解
图9 代码分析
4.实验3:Dht11温湿度代码理解
dht11模块规格手册:下面的图片与代码图片中的代码按顺序一一对应
配置好引脚模式后,开始建立连接
图10 dht11模块规格手册
dht11数据发送代码实现的原理:
图11 dht11数据发送代码
5.实验结果
(1)实验1,bh1750
图12 oled显示光强
图13 电脑串口获取的光强数据
(2)实验2:MPU6050
图14 lcd显示mpu6050获取转化后的数据
图15 上位机程序获取mpu6050数据并联动
如果要把bh1750传感器加入并进行显示在屏幕上,硬件该如何连接?在mpu6050软件基础上实现要做哪些修改?
图16 bh1750引脚图
硬件连接:根据上图和软件配置的scl和sda所对应的引脚进行连接
在mpu6050软件基础上实现要做哪些修改:因为mpu6050软件是基于标准库的,所以我们需要在网上找到bh1750驱动的.h和.c文件,然后加入到项目工程中,并且设置bh1750的i2c对应的引脚。然后将bh1750读取转化的数据的数据在下图所示的代码中进行赋值并且在液晶屏中显示。
图17 软件修改位置
(3)实验3:Dht11温湿度代码理解
图18 lcd温湿度显示
四、心得体会与总结
通过本次实验,我深入学习了如何移植代码块和基于标准库和基于HAL库的代码如何相互融合移植,认识了BH1750光强传感器模块、MPU6050陀螺仪、Dht11温湿度模块,学习了通过模块的数据手册去分析它们是如何接收和发送消息的,通过模块的规则去配置对应的代码,收获颇丰。
标签:BH1750,HAL,温湿度,Init,CODE,USER,模块,GPIO,USART1 From: https://blog.csdn.net/weixin_73690807/article/details/145137246