嵌入式开发板RS485协议串口编程——倾角传感器数据读取

之前分享过一篇嵌入式操作系统开发板中的串口编程——光敏电阻数据读取,是基于TTL协议的串口编程,本节主要讲述基于RS485协议的串口编程,掌握了这两种嵌入式开发板的串口编程方法,就基本掌握了嵌入式开发板中对于大多数传感器的数据读取。

RS485通信协议

RS485通信协议是一种串行通信协议,相比于RS232通信协议通信距离短、速率低的缺点,RS485传输距离更长,传输速率最高可达10Mbit/s。RS485通信协议采用的是半双工工作方式,只能有一点处于发送状态,因此,在程序中或者电路设计中要有一个切换发送状态与接收状态的标志位。关于在程序中的标志位待会在程序中我会介绍,电路中的标志位如下:

与RS232不同的还有,RS485的工作方式是差分工作方式,所谓差分工作方式,是指在一堆双绞线中,一条定义为A,一条定义为B。通常情况下,发送驱动器A、B之间的正电平在+2+6V,是一个逻辑状态,负电平在-2-6V,是另一个逻辑状态(和RS232是相反的),另有一个引脚信号接地。

倾角传感器RS485通信协议

我使用是维特智能的一款倾角传感器——SINDT-RS485。具体的描述可以参考它的使用说明书,我这里就不赘述了。

它的工作电压和线色的定义如下所示:

通过上面的已知条件就可以得到和嵌入式开发板上RS485串口的连接方式:

我们的目的是读取倾角传感器实时测得的X、Y、Z轴的角度信息。通过阅读使用说明书可以得到,我们需要先给倾角传感器发送角度信号指令,倾角传感器才会给我们发送它实时检测的数据。角度信号指令如下:

其中MODADDR为倾角传感器地址0x50。倾角传感器上传回来的数据格式如下:

有了以上的信息,我们就可以开始着手编程实现啦!!

嵌入式开发板RS485串口编程

首先就是打开RS485串口的设备节点:

int open_port(char *com)
{int fd;fd = open(com, O_RDWR|O_NOCTTY);if (-1 == fd){return(-1);}if(fcntl(fd, F_SETFL, 0)<0) /* 设置串口为阻塞状态*/{printf("fcntl failed!\n");return -1;}return fd;
}

之后要初始化串口,设置波特率、数据位、停止位、奇偶校验位等。初始化程序我之前已经贴在嵌入式操作系统开发板串口编程——光敏电阻数据读取里了,这里我就赘述了。

然后就是向倾角传感器发送角度信号指令,我把指令放在一个字符数组里:

static char byteSend[8];
byteSend[0] = 0x50;
byteSend[1] = 0x03;
byteSend[2] = 0x00;//寄存器高位
byteSend[3] = 0x3d;//寄存器低位 //角度寄存器
byteSend[4] = 0x00;//寄存器个数高位
byteSend[5] = 0x03;//寄存器个数低位
byteSend[6] = 0x99;//CRCH
byteSend[7] = 0x86;//CRC

在主程序里把指令发送出去,并设置标志位,发送之后读取角度信息:

int main(int argc, char **argv)
{int fd;int iRet;fd = open_port(argv[1]);serial_uart_init(fd);char context;int i = 0;int j = 0;int flag = 0;char r_buf[10];char readtext;while (1){while(flag == 0){if(i > 7){flag = 1;i = 0;break;}context = byteSend[i];iRet = write(fd, &context, sizeof(context));i++;}usleep(50000);bzero(r_buf, 10);while(flag == 1){//读传感器发送过来的数据,并解析处理if(j > 9){flag = 0;j = 0;break;}iRet = read(fd, &readtext, sizeof(readtext));r_buf[j] = readtext;//printf("read:%02x\n", r_buf[j]);j++;}usleep(50000);if(r_buf[0] == 0x50 && r_buf[1] == 0x03){printf("AngleX:%7.3f, AngleY:%7.3f, AngleZ:%7.3f\n", ((float)((r_buf[3]<<8) | r_buf[4])/32768.0*180),((float)((r_buf[5]<<8) | r_buf[6])/32768.0*180),((float)((r_buf[7]<<8) | r_buf[8])/32768.0*180));      }}return 0;
}

到这里程序就已经完成了。

在Ubuntu中用交叉编译工具编译程序:

将倾角传感器按照前面介绍的连接方式连接到开发板上,就可以运行程序了,结果如下:

到这里就成功实现了读取倾角传感器的角度信息啦,还可以读取加速度,磁场等等信息。

在嵌入式开发过程中,光掌握串口编程还是不够的。下一节我将介绍嵌入式开发板中CAN通信编程实例,用CAN通信来驱动伺服电机。掌握了串口编程和CAN通信编程,你就可以完成一些具体的嵌入式开发的项目啦。

完整代码我会贴在公众号中,需要完整代码的关注公众号回复RS485串口编程获取。有什么问题也可以在下方留言,我看到之后会回复你。

我是河边小乌龟爬,学习嵌入式软件开发路上的一名小学生,欢迎大家相互交流哇。公众号:河边小乌龟爬。

(群名称:嵌入式软件开发交流群;群 号:1004953094)

嵌入式开发板RS485协议串口编程——角度传感器数据读取相关推荐

  1. 嵌入式开发板CAN通信编程——伺服电机驱动

    嵌入式开发板CAN通信编程--伺服电机驱动 在实际的嵌入式项目开发过程中,若不涉及上位机与开发板的通信传输数据,那最关键的无非就是两个内容,读取传感器的数据并处理,驱动硬件设备工作.传感器数据的读取内 ...

  2. 【转载】嵌入式开发板通过串口与PC互相传送文件

    嵌入式开发板通过串口与PC互相传送文件 2017年03月24日 15:55:17 缘客_ql 阅读数:6961 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn ...

  3. 树莓派Pico W无线开发板MQTT协议通信MicroPython编程实践

    本博文介绍采用Thonny+MicroPython和umqtt.simple库MQTTClient类的对象方法编制树莓派Pico W无线开发板MQTT协议通信程序,将Pico W无线开发板.电脑或An ...

  4. 配置eclipse为ARM嵌入式开发板编程

    配置eclipse为ARM嵌入式开发板编程 1-计算机环境 操作系统:window10 编程软件:Eclipse IDE for C and C++ Developers - 2022-09 Wind ...

  5. Express Pi 嵌入式开发板

    Express Pi 由物一世推出的一款面向工业控制,医疗电子,车载设备等领域官方嵌入式开发板.Express Pi搭载ExpOS操作系统,用户可通过配套的组态开发工具Studio,"低代码 ...

  6. iTOP-4418嵌入式开发板接口基本介绍

    iTOP-4418嵌入式开发板是迅为电子设计研发的一款四核Cortex-A9开发板,可广泛适用于工控.智能家居.医疗.多媒体.安防.车载.金融.消费电子.手持设备.显示控制.教学.电力.通讯等领域. ...

  7. 友善之臂NanoPC-T4嵌入式开发板 开箱

    前言:由于对底层编程.硬件感兴趣,购买了友善之臂nanopct4开发板,准备好好玩玩.由于之前玩过树莓派3b,对嵌入式开发板有些了解,但总感觉不够深刻.树莓派3b性能有限,跑raspbian系统有点卡 ...

  8. 韦东山嵌入式开发板小结1

    韦东山嵌入式开发板小结1 一.连接[开发板-win10-虚拟机] 1.播放虚拟机VMware的ubuntu 16.04,设置win10和 虚拟机处于同一网段 >>>ipconfig ...

  9. 驱动开发基础知识必修-(一)嵌入式开发板的启动过程

    驱动开发必修-嵌入式开发板的启动过程 简介 从打印日志入手 熟悉启动过程 1.执行u-boot程序 2.加载linux内核 3.挂载rootfs 4.加载完后 进入终端(命令输入行) UBOOT 1. ...

  10. 嵌入式开发板硬件操作入门学习9——集成电路芯片手册术语词汇表(中英文对照)

    原创链接:集成电路芯片半导体中英文对照术语词汇表 英语 中文 1-9 10 gigabit 10 Gb 1st Nyquist zone 第一奈奎斯特区域 3D full‑wave electroma ...

最新文章

  1. shell脚本 - 快速到达目录
  2. 软件开发中的几种数据交换协议
  3. 许耀武:有趣有挑战的二十年
  4. Django中的路由分发
  5. 软件工程复习提纲——第七章
  6. PHP curl传输文件的版本兼容性
  7. 复杂脑网络之图论参数计算(BCT工具包)
  8. 基于偏微分方程的图像分割(二)Snake模型 Matlab实现
  9. C语言——链表简单介绍
  10. Tree Walk(二叉树的遍历)
  11. RecyclerView的横向展示、item滑动居中
  12. GoogleStyle编程代码规范
  13. nagiosxi 监控Linux系统
  14. 快来智影:微电影的拍摄技巧
  15. 从当前日期,获取下一年的日期
  16. Win10任务栏应用图标为空白页
  17. Flash鼠绘入门第五课:绘制可口的樱桃-Flash鼠绘可口的樱桃(1)
  18. linux arena参数设置,从零开始的Linux堆利用(三)
  19. Codeforces Round #702 (Div. 3)D. Permutation Transformation
  20. 查看 CPU架构类型

热门文章

  1. 第三章 PCB 封装库绘制
  2. 免费模板 | 高颜值超实用,这套财务分析模版自带BUFF加成
  3. LaTeX报告用模板
  4. fluent瞬态计算终止条件在哪里设置_workbench 热传导及热应力计算
  5. 科技云报道:深信服桌面云,“大”不一样
  6. 基于Spark的电影推荐系统实现
  7. java 代码走查_java代码走查计划书
  8. MATLAB 多元多项式的除法
  9. 江苏专转本计算机大类(计算机理论基础A)知识点
  10. 协议森林1——小喇叭开始广播:以太网与WiFi