STM32实现光照强度传感器(BH1750)(标准库与HAL库实现)

Posted 小材大用

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32实现光照强度传感器(BH1750)(标准库与HAL库实现)相关的知识,希望对你有一定的参考价值。

目录

元器件类型选择

接线表设计

实现过程

 标准库实现

 HAL库实现

代码下载


元器件类型选择

单片机选择:STM32F103

光照度模块:维特智能出品的 BH1750

模块被企业封装过,将采集的光照度数据直接串口显示,显示效果如下:

 

 我们需要实现的就比较简单了,只需要将串口数据通过单片机采集出来即可。

接线表设计

序号光照度模块单片机STM32
1VCC3.3V/5V
2RXDPA2(USART2_TX)
3TXDPA3(USART2_RX)
4GNDGND
5-PA9(USART1_TX)
6-PA10(USART1_RX)

串口1是为了在电脑端显示串口2所采集的数据。

实现过程

我们将从标准库和HAL库两个方面实现

 标准库实现

核心代码如下:

void USART2_IRQHandler(void)                	//串口2中断服务程序

	int i = 0;	//	循环变量
	int n = 0;	//	循环变量
	int Ligth = 0;		//	距离
	char InStr[20]="";     //	存放整数字符串
	
	if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
	
		USART_ClearITPendingBit(USART2, USART_IT_RXNE);//清除标志位
		aRxBuffer =USART_ReceiveData(USART2);//(USART1->DR);	//读取接收到的数据
		RxBuffer[Uart1_Rx_Cnt++] = aRxBuffer;			//	接收数据
		
		if('L' != RxBuffer[0])			//	如果第一个数据接收的不是L,则数据接收错误
		
			Uart1_Rx_Cnt = 0;
			return;
			
		
		if( 0X0A == RxBuffer[Uart1_Rx_Cnt-1] && 0X0D == RxBuffer[Uart1_Rx_Cnt-2] && 'L' == RxBuffer[0] )
		
			USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);//关闭串口接受中断  为了处理数据
			if(NULL != strstr(RxBuffer, "Ligth"))			//	判断是否是有效数据
				
//				for(i=0;i<strlen(RxBuffer);i++)				///	调试代码 可删除
//				
//					USART_SendData(USART1, RxBuffer[i]);	
//					delay_ms(1);
//						
				
				for(i = 0;i<strlen(RxBuffer);i++)
				
					if(RxBuffer[i]<='9' && RxBuffer[i]>='0')
					
						InStr[n++] = RxBuffer[i];
					
				
				Ligth = atoi(InStr);					//	距离 一个整数 可以直接使用
				///****调试 串口1 输出**开始**********
				sprintf(TxBuffer,"%d\\r\\n",Ligth); 
				for(i=0;i<strlen(TxBuffer);i++)
				
					USART_SendData(USART1, TxBuffer[i]);	
					delay_ms(1);
				
				///****调试 串口1 输出**结束**********	
			
			memset(RxBuffer,0x00,sizeof(RxBuffer)); //清空数组
			memset(TxBuffer,0x00,sizeof(TxBuffer)); //清空数组
			memset(InStr,0x00,sizeof(InStr)); //清空数组
			Uart1_Rx_Cnt = 0;
			n = 0;
			
			USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启串口接受中断  为了处理数据
		
  		 
	

 实现效果:

 HAL库实现

核心代码如下:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

	int i = 0;	//	循环变量
	int n = 0;	//	循环变量
	int Dis = 0;		//	距离
	char InStr[20]="";     //	存放整数字符串
  /* Prevent unused argument(s) compilation warning */
  UNUSED(huart);
  /* NOTE: This function Should not be modified, when the callback is needed,
           the HAL_UART_TxCpltCallback could be implemented in the user file
   */
	if(aRxBuffer != 0)
	
		RxBuffer[Uart1_Rx_Cnt++] = aRxBuffer;			//	接收数据
		if('L' != RxBuffer[0])
		
			Uart1_Rx_Cnt = 0;
			while(HAL_OK != HAL_UART_Receive_IT(&huart2, (uint8_t *)&aRxBuffer, 1));   //开启接收中断,并保证开启成功
			return;
		
	
	
	if( 0X0A == RxBuffer[Uart1_Rx_Cnt-1] && 0X0D == RxBuffer[Uart1_Rx_Cnt-2]  && 'L' == RxBuffer[0] )
	
		if(NULL != strstr(RxBuffer, "Ligth"))			//	判断是否是有效数据
			
//			HAL_UART_Transmit(&huart1, (uint8_t *)RxBuffer, strlen(RxBuffer),0xFFFF); 	//将收到的信息发送出去
//			while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX);								//检测UART发送结束
//			HAL_UART_Transmit(&huart1, (uint8_t *)"\\r\\n", strlen("\\r\\n"),0xFFFF); 			//将收到的信息发送出去
//			while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX);								//检测UART发送结束		
			
			for(i = 0;i<strlen(RxBuffer);i++)
			
				if(RxBuffer[i]<='9' && RxBuffer[i]>='0')
				
					InStr[n++] = RxBuffer[i];
				
			
			Dis = atoi(InStr);					//	距离 一个整数 可以直接使用
			sprintf(TxBuffer,"%d\\r\\n",Dis); 
			HAL_UART_Transmit(&huart1, (uint8_t *)TxBuffer, strlen(TxBuffer),0xFFFF); //将收到的信息发送出去
			while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX);//检测UART发送结束
		
		memset(RxBuffer,0x00,sizeof(RxBuffer)); //清空数组
		memset(TxBuffer,0x00,sizeof(TxBuffer)); //清空数组
		memset(InStr,0x00,sizeof(InStr)); //清空数组
		Uart1_Rx_Cnt = 0;
		n = 0;
	
	
	while(HAL_OK != HAL_UART_Receive_IT(&huart2, (uint8_t *)&aRxBuffer, 1));   //开启接收中断,并保证开启成功
	

实现效果:

代码下载

如有问题或需求可私信交流

源码链接(标准库与HAL库)

(1条消息) STM32实现光照强度传感器(BH1750)(标准库与HAL库实现)-C文档类资源-CSDN文库

吾芯电子工作室

以上是关于STM32实现光照强度传感器(BH1750)(标准库与HAL库实现)的主要内容,如果未能解决你的问题,请参考以下文章

STM32+BH1750光敏传感器获取光照强度

STM32+BH1750光敏传感器获取光照强度

CC2530+BH1750光敏传感器获取光照强度

( zigbee)CC2530+BH1750光敏传感器获取光照强度

ESP 保姆级教程 疯狂传感器篇 —— 案例:ESP8266 + BH1750 + 串口输出(检测光照强度)

张高兴的 Windows 10 IoT 开发笔记:BH1750FVI 光照度传感器