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

场景是用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.hqwc.cn/news/120552.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络协议】Http-下

HTTP常见Header Content-Type: 数据类型(text/html等) Content-Length: Body的长度 Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上; User-Agent: 声明用户的操作系统和浏览器版本信息; referer: 当前页面是从哪个页面跳转过来的; location: 搭配3xx状态…

【Pycharm/Anaconda配置环境记录】

文章目录 1、Pytorch配置2、mmcv配置 1、Pytorch配置 查看虚拟环境创建虚拟环境 conda env list:查看虚拟环境 conda create --name env_name python3.7:创建虚拟环境 conda activate env_name:激活/进入该虚拟环境 查看自己的CUDA版本以及P…

智慧公厕自动化保洁系统,让公共厕所实现7*24 持续整洁

随着科技的不断进步,越来越多的创新方案应用于各个领域,公共厕所的智慧化也不例外。本文重点介绍智慧公厕源头厂家广州中期科技有限公司,大量案例项目中所使用的智慧公厕自动化保洁系统,能有效地节省人力,并保持公共厕…

我的国庆回家之路

文章目录 回家的计划假期的礼物学习新技术与家人团聚遇到的趣事总结 🎉欢迎来到IT陈寒的博客空间~我的国庆回家之路 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客🎈该系列文章专栏:Java学习路线&#x1…

c/c++中如何输入pi

标准的 C/C 语言中没有π这个符号及常量,一般在开发过程中是通过开发人员自己定义这个常量的,最常见的方式是使用宏定义: 方法1:#define pi 3.1415926 方法2:使用反三角函数const double pi acos(-1.0);

OS 模拟进程状态转换

下面的这个博主写的很好 但是他给的代码print部分和语言风格python三识别不了 这个特别感谢辰同学帮我调好了代码 我放在主页上了 估计过两天就可以通过了 《操作系统导论》实验一:模拟进程状态转换_process-run.py-CSDN博客 这个补充一下他没有的:OS…

为什么我的Windows 10笔记本电脑明明什么软件都没开,风扇却一直在转?

2023年9月29日,周五上午 这两天我的笔记本电脑一开机,风扇就一直在转,而且还没停过,挺吵的 即使什么软件都没开,还在那转,莫名其妙的。 后来我去任务管理器按照CPU使用情况来排序,发现原来是W…

深入理解传输层协议:TCP与UDP的比较与应用

目录 前言什么是TCP/UDPTCP/UDP应用TCP和UDP的对比总结 前言 传输层是TCP/IP协议栈中的第四层,它为应用程序提供服务,定义了主机应用程序之间端到端的连通性。在本文章,我们将深入探讨传输层协议,特别是TCP和UDP协议的原理和区别…

路由器和路由到底啥区别?

在Vue中会有路由(Route)的概念,一些伙伴还不知道嘞,这就给大家讲解一下 我们日常出行都会碰到导航这个概念。 导航系统会给出从当前位置到目标位置的建议路径,这就是路由。 而 GPS 导航仪根据路由提供的路径,告诉我们每个路口是…

Tomcat多实例+Nginx动静分离、负载均衡

这里写目录标题 Tomcat多实例动静分离、负载均衡一、Tomcat多实例部署1、安装JDK2、安装启动tomcat 二、NginxTomcat负载均衡、动静分离1、Nginx负载均衡实现原理1.1 原理1.2 Nginx配置反向代理的主要参数 2、Nginx动静分离实现原理2.1 原理2.2 Nginx静态处理优势 3、动静分离配…

面向对象之旅:核心理念、设计方法与UML详解(软件设计师笔记)

😀前言 面向对象技术是现代软件工程的核心,为软件设计和开发带来了一种强大且有序的方法。通过将现实世界的实体和概念映射到可操作的代码结构,该技术使我们能够更高效、清晰和可靠地创建复杂的软件系统。在本章中,我们将详细介绍…

现场直击|亚数TrustAsia精彩亮相IOTE深圳物联网展,CSA联盟展台等你来!

2023年9月20日,IOTE 2023第二十届深圳国际物联网展在深圳国际会展中心(宝安)顺利开幕。作为物联网领域年度最重要的行业盛会之一,本次展会汇聚全球来自工业、物流、基建、智慧城市、智慧零售等领域的600企业、10万行业人士&#x…