ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

TEMTOP 细颗粒物传感器调试

2022-01-06 17:00:43  阅读:174  来源: 互联网

标签:TEMTOP UART RX 颗粒物 UART2 Handler GPIO USART2 调试


细颗粒物调试

引脚定义

在这里插入图片描述
TEMTOP ------> STM32 USART2
1.VCC ------> 5V
2.GND ------> GND
4.RX ------> PD6
5.TX ------> PD7

通讯协议

在这里插入图片描述

串口配置及中断

void UART2_Init(u32 bound)
{	
	//UART 初始化设置
	UART2_Handler.Instance=USART2;					    //USART2
	UART2_Handler.Init.BaudRate=bound;				    //波特率
	UART2_Handler.Init.WordLength=UART_WORDLENGTH_8B;   //字长为8位数据格式
	UART2_Handler.Init.StopBits=UART_STOPBITS_1;	    //一个停止位
	UART2_Handler.Init.Parity=UART_PARITY_NONE;		    //无奇偶校验位
	UART2_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   //无硬件流控
	UART2_Handler.Init.Mode=UART_MODE_TX_RX;		    //收发模式
	UART2_Handler.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  UART2_Handler.Init.OverSampling = UART_OVERSAMPLING_16;
	HAL_UART_Init(&UART2_Handler); //HAL_UART_Init()会使能UART2
	
	HAL_UART_Receive_IT(&UART2_Handler, (uint8_t *)uartBuffer, RXBUFFERSIZE);
}
/**USART2 GPIO Configuration    
    PD6     ------> USART2_TX
    PD7     ------> USART2_RX 
    */
	if(huart->Instance==USART2)//如果是串口1,进行串口1 MSP初始化
	{
		__HAL_RCC_GPIOD_CLK_ENABLE();			//使能GPIOA时钟
		__HAL_RCC_USART2_CLK_ENABLE();			//使能USART2时钟
	
		GPIO_Initure.Pin=GPIO_PIN_6 | GPIO_PIN_7;			//PD5\6
		GPIO_Initure.Mode=GPIO_MODE_AF_PP;		//复用推挽输出
		GPIO_Initure.Pull=GPIO_PULLUP;			//上拉
		GPIO_Initure.Speed=GPIO_SPEED_FAST;		//高速
		GPIO_Initure.Alternate=GPIO_AF7_USART2;	//复用为USART2
		HAL_GPIO_Init(GPIOD,&GPIO_Initure);	   	//初始化PD9
		
		#if EN_USART2_RX
			HAL_NVIC_EnableIRQ(USART2_IRQn);				//使能USART1中断通道
			HAL_NVIC_SetPriority(USART2_IRQn,3,3);			//抢占优先级3,子优先级3
		#endif	
	}
/*+-----------------细颗粒物中断函数-----------------+*/

uint8_t PM_RX_BUF[32];
uint8_t pmPoint = 0;
int PM1Data, PM25Data, PM10Data;

void USART2_IRQHandler(void)
{
	uint32_t tmp1 = 0U, tmp2 = 0U;
	tmp1 = __HAL_UART_GET_FLAG(&UART2_Handler, UART_FLAG_RXNE);
  tmp2 = __HAL_UART_GET_IT_SOURCE(&UART2_Handler, UART_IT_RXNE);
	
	if(tmp1 != RESET && tmp2 != RESET)
	{
		PM_RX_BUF[pmPoint] = (uint8_t)(UART2_Handler.Instance->DR & (uint8_t)0x00FFU);
		pmPoint ++;
		if(pmPoint == 2)
		{
			if(PM_RX_BUF[0] != 0x42 || PM_RX_BUF[1] != 0x4D)
			{
				pmPoint = 0;
			}
		}
		
		if(pmPoint == 32)
		{
			if(PM_RX_BUF[0] == 0x42 && PM_RX_BUF[1] == 0x4D)
			{
				PM1Data = PM_RX_BUF[4] * 256 + PM_RX_BUF[5];
				PM25Data = PM_RX_BUF[6] * 256 + PM_RX_BUF[7];
				PM10Data = PM_RX_BUF[8] * 256 + PM_RX_BUF[9];
				pmPoint = 0;
				//调试语句
				//HAL_UART_Transmit(&UART1_Handler,(uint8_t*)PM_RX_BUF,32,1000);
			}
			else
			{
				pmPoint = 0;
			}
		}
	}
	HAL_UART_IRQHandler(&UART2_Handler);
}

之前使用的是sensorion的颗粒物传感器,比此传感器更轻薄。

标签:TEMTOP,UART,RX,颗粒物,UART2,Handler,GPIO,USART2,调试
来源: https://blog.csdn.net/qq_39486659/article/details/121694574

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有