OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10182|回复: 8

如何在stm32上实现以sdi-12的协议通信?

[复制链接]

7

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2014-10-14
在线时间
22 小时
发表于 2015-10-8 15:39:41 | 显示全部楼层 |阅读模式
5金钱
有什么方案么,最好有部分代码,谢谢

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-10-8 22:50:33 | 显示全部楼层
回复

使用道具 举报

22

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2014-4-7
在线时间
53 小时
发表于 2017-5-31 16:06:58 | 显示全部楼层
LZ  你的解决了没有,能否发给我看看代码qq:916208723,谢谢!!!!
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2013-10-15
在线时间
10 小时
发表于 2018-11-22 23:13:47 | 显示全部楼层
楼主 后面有解决吗?
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2018-12-10
在线时间
0 小时
发表于 2018-12-10 20:12:04 | 显示全部楼层
void ZMDQ()
{
  //唤醒传感器采集地址
  do{
   SDI_TX_Flag=0x31;   
   Break_SDI_Sensor();
   Find_add();
   SDI_addr_Flag=0x31;
   delay_ms(40);
   
   }while(SDI_addr_Flag==0x31);
    SID_12_Receive();
//开始测量
    SDI_TX_Flag=0x31;
    Begin_test_aM();
    delay_ms(80);
    SID_12_Receive();
//接收测量数据
    Getdata_Sensor=0x31;
    do{
      delay_ms(1000);
      wait_Gather=wait_Gather-500;
      }while(wait_Gather>0);
    delay_ms(100);//等待返回字符0
    SID_12_Receive();
    delay_ms(40);
    if(Getdata_Sensor==0x30)
    {
      SDI_TX_Flag=0x31;
      Gather_data();
      delay_ms(300);
      SID_12_Receive();
      delay_ms(140);
    }
}

/*************************************
SDI-12唤醒传感器
首先向总线上写高电平至少12MS
然后拉低8MS
于2017.2.21测试完成。
*************************************/
void Break_SDI_Sensor(void)
{

  P3SEL &= ~TXD0;
  P3DIR |= TXD0;           //设置TXD为输出
  P3OUT|=TXD0;
  P1OUT=0X00;
  delay_ms(10);
  P3OUT&=~TXD0;
  delay_ms(13);
  P3OUT|=TXD0;
  delay_ms(8);
  Delay1us(340);
}

/**************************
传感器地址查询
于2017.2.21测试完成。
***************************/
void Find_add()//查找传感器地址?! 这个命令只能用于下连一个传感器的情况
{

  P3SEL |=TXD0;  //设置发送为串口模式
  Send_Datas(F_add,2); // find adress
  delay_ms(5);
  P3SEL ^=TXD0;
  SDI_TX_Flag=0x30;
  P3OUT |= BIT4;
  delay_ms(1);
  P1OUT=0x20; // Tx disable
}

/**************************
测量命令
与2017.02.22测试完成
***************************/
void Begin_test_aM() //开始测量命令 aM!

{
  P1OUT=0x00; //Tx enable
  P3SEL |=TXD0;  //设置发送为串口模式
  if(AM_Flag==0x31)
    {
    B_test_aMx[0] = Sensor_Add; //传感器地址
    B_test_aMx[2] = RS_232_RX_BUF[2];
    Send_Datas(B_test_aMx,4); // 测量命令
    }
else
    {
    B_test_aM[0]= Sensor_Add;
    Send_Datas(B_test_aM,3);
    }
  delay_ms(5);
  delay_ms(1);
  P1OUT=0x20; // Tx disable
  SDI_TX_Flag=0x30;
  AM_Flag=0x30;
}

/**************************
发送采集
***************************/
void Gather_data() // 得到数据 0Dx!

{
  G_data[0] = Sensor_Add; //传感器地址
  G_data[2]=RS_232_RX_BUF[2];
  P1OUT=0x00; //Tx enable
  Delay1(500);
  Send_Datas(G_data,4); // 测量命令
  delay_ms(5);; //等待发送完成
  P1OUT=0x20; // Tx disable
  SDI_TX_Flag=0x30;

}

此为SDI-12顺序命令流畅,最基础部分。我个人开源贡献给大家。
需求源程序完整代码,请联系我百度账户。
源程序基本功RS232 TO SDI-12 命令识别转发,兼容维萨拉传感器。
仅供参考
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2018-12-10
在线时间
0 小时
发表于 2018-12-10 20:14:10 | 显示全部楼层
楼主你好我最近想用stm32做一份个sdi-12做一个数采有什么好的建议QQ:695486331
回复

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
177
金钱
177
注册时间
2019-7-23
在线时间
55 小时
发表于 2021-8-9 15:50:18 | 显示全部楼层
求分享一下,正为这个为难。
回复

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
177
金钱
177
注册时间
2019-7-23
在线时间
55 小时
发表于 2021-8-9 15:51:08 | 显示全部楼层
求分享啊,楼主
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2021-10-20
在线时间
1 小时
发表于 2022-2-20 15:28:06 | 显示全部楼层
junge1a520 发表于 2021-8-9 15:50
求分享一下,正为这个为难。

求分享下,我也遇到这个难题了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-20 08:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表