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
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值