我是靠谱客的博主 成就小蚂蚁,最近开发中收集的这篇文章主要介绍SDI12协议---单线GPIO一、唤醒二、发送,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

SDI12协议:SDI-12 Serial Digital Interface 即串行数字接口,是一种基于微处理器的智能化传感器系统。 SDI-12通讯标准是由美国水文组织提出的的一种串行数据通讯接口协议,在SDI-12协会支持下,近年来欧美国家在环境监测中加以推广使用。 此技术广泛应用在工农业多参数测控、江河湖海的水文和气象等地球环境监测、养殖和食品生产中,可以远距离传送数据。

关键词三根线、发送负逻辑。

注意点:如果用单总线协议,需要确认串口是否支持电平反转。

一、唤醒

1、拉高12ms

 2、send_break,8.3ms

二、发送

        如果你的单总线不支持时钟反极性,(即起始位和数据、停止位都要反着来那请用单总线来模拟吧),如果是RTOS没法精确定时,则需要电路上调整。

        这里以截取0D! 命令下的回复为例子

2.1串口接收和回复

发送0D!,回复”0+1680“,其他命令可自行看手册        SDI-12_version-1_4-Jan-10-2019

 发送的数据如下

 发送的单字节代码如下(其他的按One-Wire协议自行调整):

起始位跟库函数的是相反的极性。

void SDI_ByteSend(uint8_t val)
{
    uint8_t i= 0;
    GPIO_SetBits(GPIOB, GPIO_PIN_10);	//一个起始位
    delay_us(delayTime);//0.83ms			
    for(i = 0; i < 8; i++)	//八个数据位
    {
    	if(val & 0x01)
    	GPIO_ResetBits(GPIOB, GPIO_PIN_10);//0.83ms
	    else
	    GPIO_SetBits(GPIOB, GPIO_PIN_10);
	    delay_us(delayTime);//0.83ms
	    val >>= 1;
    }
	GPIO_ResetBits(GPIOB, GPIO_PIN_10);	//一个停止位
	delay_us(delayTime);//0.83ms
}

最后

以上就是成就小蚂蚁为你收集整理的SDI12协议---单线GPIO一、唤醒二、发送的全部内容,希望文章能够帮你解决SDI12协议---单线GPIO一、唤醒二、发送所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(90)

评论列表共有 0 条评论

立即
投稿
返回
顶部