SDI-12协议与STM32 进行uart通信

news/2024/6/3 17:36:26 标签: stm32, 嵌入式硬件, 单片机

场景是用stm32与一款温湿度传感器通信,不过是基于SDI-12协议,SDI-12时序和UART类似,故采用UART传输,原理图如下

其中DIR_OUT_SDI是一个IO引脚,控制UART_TX_SDI是否使能,U10是三态门IC,即拉低DIR_OUT_SDI使能stm32输出,拉高DIR_OUT_SDI失能输出,串口配置8位数据位,偶校验,1位停止位,1200波特率。

下面给出发送一个激活命令的示例:

#define SDI_BREAK_TIME 13
#define SDI_BREAK_QUIET_TIME 20

//@brief 发送确认激活命令  
//@param addr 传感器地址 ascii码 低7位有效
void sdi12SendAckActive(uint8_t addr)
{
	uint8_t cmd[]={'0'+addr,'!'};
	switchToIoConfig();
	HAL_GPIO_WritePin(SDI_DIR_GPIO_Port,SDI_DIR_Pin,GPIO_PIN_RESET);   //使能 SDI_OUT_PIN 输出
	sdi12SendBreak();
	switchToUartConfig();
	//HAL_UART_AbortReceive(&huart3);
	HAL_UART_Transmit(&huart3,cmd,2,0xFFFF);
	HAL_GPIO_WritePin(SDI_DIR_GPIO_Port,SDI_DIR_Pin,GPIO_PIN_SET);   //失能 SDI_OUT_PIN 输出

	g_SdiReceiveMessage.receiveFlag=0;
	g_SdiReceiveMessage.messageTop =0;
	HAL_UART_Receive_IT(&huart3, g_SdiReceiveMessage.message, 1);
	return;
}

//@brief 将tx引脚配置为输出模式,作输出唤醒信号使用
void switchToIoConfig()
{
	GPIO_InitTypeDef GPIO_InitStruct={0};
	/*Configure GPIO pin Output Level */
	HAL_GPIO_WritePin(SDI_OUT_PORT, SDI_OUT_PIN, GPIO_PIN_SET);

	/*Configure GPIO pin : SPI_DIR_Pin */
	GPIO_InitStruct.Pin = SDI_OUT_PIN;
	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
	GPIO_InitStruct.Pull = GPIO_NOPULL;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
	HAL_GPIO_Init(SDI_OUT_PORT, &GPIO_InitStruct);
	return;
}

//@brief 发送唤醒信号
void sdi12SendBreak()
{
	HAL_GPIO_WritePin(SDI_OUT_PORT,SDI_OUT_PIN,GPIO_PIN_RESET);
	HAL_Delay(SDI_BREAK_TIME);
	HAL_GPIO_WritePin(SDI_OUT_PORT,SDI_OUT_PIN,GPIO_PIN_SET);
	HAL_Delay(SDI_BREAK_QUIET_TIME);
}

//@brief 将tx引脚配置为复用模式,作串口输出使用
void switchToUartConfig()
{
	GPIO_InitTypeDef GPIO_InitStruct={0};
	/*Configure GPIO pin Output Level */
	HAL_GPIO_WritePin(SDI_OUT_PORT, SDI_OUT_PIN, GPIO_PIN_SET);

	GPIO_InitStruct.Pin = SDI_OUT_PIN;
	GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
	GPIO_InitStruct.Pull = GPIO_NOPULL;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
	GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
	HAL_GPIO_Init(SDI_OUT_PORT, &GPIO_InitStruct);
	return;
}

示波器测试得到传感器的应答信号如下:第一个是唤醒信号,拉高电平13毫秒,之后保持20毫秒低电平,第二个数据帧是激活信号,即ascii码:  "0!",第三个是传感器的应答信号:"0\r\n"


http://www.niftyadmin.cn/n/5056889.html

相关文章

深入探讨 Presto 中的缓存

【squids.cn】 全网zui低价RDS,免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 Presto是一种流行的开源分布式SQL引擎,使组织能够在多个数据源上大规模运行交互式分析查询。缓存是一种典型的提高 Presto 查询性能的优化技术。它为 Prest…

VIBRO-METER SIM-275D-24 200-582-200-011 控制主板模块产品特点

VIBRO-METER SIM-275D-24 200-582-200-011 控制主板模块是用于振动监测和控制系统的重要组成部分,其主要功能是接收和处理振动传感器的数据,以监测旋转设备的状态并执行必要的控制操作。以下是这个控制主板模块的一些可能特点和功能: 振动数据…

Facebook耐用号养成攻略!如何实现自动化高效养号

在跨境电商领域,Facebook 已经成为一个不可或缺的推广和营销平台。然而,想要在 Facebook 上取得成功,有一批耐用的 Facebook 账号是必不可少的。养出一批 Facebook 耐用号可以不仅可以大幅度提高推广效率,更能有效降低营销成本&am…

快速将iPhone大量照片快速传输到电脑的办法!

很多使用iPhone 的朋友要将照片传到电脑时,第一时间都只想到用iTunes 或iCloud,但这2个工具真的都非常难用,今天小编分享牛学长苹果数据管理工具的照片传输功能,他可以快速的将iPhone照片传输到电脑上,并且支持最新的i…

AI免费写作工具,怎么选择AI免费写作工具

现代生活中,写作无处不在。从商业广告到学术研究,从社交媒体到新闻报道,每个领域都需要高质量的文字内容。对于许多人来说,写作可能是一项耗时耗力的任务。创造性的思维、优秀的写作技巧以及足够的时间都是写作的关键要素&#xf…

箱讯科技成功闯入第八届“创客中国”全国总决赛—在国际物流领域一枝独秀

添加图片注释,不超过 140 字(可选) 2023年9月26日,第八届“创客中国”数字化转型中小企业创新创业大赛决赛在贵州圆满收官。 经过初赛、复赛、决赛的激烈角逐,箱讯科技与众多强劲对手同台竞技,最终凭借出…

Elasticsearch:使用 Elasticsearch 进行语义搜索

在数字时代,搜索引擎在通过浏览互联网上的大量可用信息来检索数据方面发挥着重要作用。 此方法涉及用户在搜索栏中输入特定术语或短语,期望搜索引擎返回与这些确切关键字匹配的结果。 虽然关键字搜索对于简化信息检索非常有价值,但它也有其局…

讲讲项目里的仪表盘编辑器(二)

应用场景 正常来说,编辑器应用场景应该包括: 编辑器-预览 编辑器 最终运行时 怎么去设计 上一篇推文,我们已经大概了解了编辑器场景。接下来,我们来看预览时的设计 编辑器-预览 点击预览按钮,执行以…