| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> Arduino(十)——串口通讯与IIC -> 正文阅读 |
|
[嵌入式]Arduino(十)——串口通讯与IIC |
目录1.串口通信2.IIC单片机的第五大功能——串口通讯,它可以建立起你的电脑和单片机直接的连接,也可以是其他模块的连接,比如蓝牙,WIFI等,接口都是串口,另一部分的模块,接口时IIC或者SPI,比如陀螺仪一般都是IIC,OLED显示,接口也是IIC 在物理上,串口通信需要三根线 TX RX GND,TX是发送,RX是接受 GND是接地,看看原理图 我们看到,RX RT经过一个USB芯片,把串口转换成了USB口,所以插到我们的USB线就是个串口和供电的功能(注意使用的是数据线还是电源线,电源线是无法出现COM口的),我们的电脑会出现一个虚拟的COM口 串口有两个功能,第一个功能是将数据发送出去,第二个功能是接收外面来的数据,而发送进来的数据是一串16进制的数组,比如 55 77 03 05 9A B4 FF FF,这串数组的意思,我们有个学名,叫做协议,也叫做通信协议?,所谓通讯协议就是通讯双方所约定的数值的含义,也就是说发这串数据,每个16进制数所代表的含义,一般情况下,我们制定协议的时候是这样的,以上一个例子为例,5577代表开始,03 05 78 9A B4,这五个数据代表五个参数,当然了,具体什么参数是根据具体的需要来定的,最后两个ff ff是表示结束,那么如果我们双方约定好了这样一个协议,那么我发什么你接收到之后,你也知道每一个字段所代表的含义了,如果我不知道双方的协议呢,我就很难介入到你们的通信当中去,比如说我要维修一个设备,这两个设备之间呢是用串口进行通讯的, 那么我能监听到他们通讯的内容,也能把他们通讯的16进制数都写出来,但是我不知道他们所表示的含义,这个只有设备的生产商才知道,这种协议的我们称之为私有协议。 有些协议是公开的,为了方便各个厂家的设备进行对接,只要大家都遵循同样一个协议,那么我们的设备就可以互相通讯,所以大公司的产品一般都遵循一个标准协议。 那么讲到串口通讯,我们还需要讲一个概念,就是通讯的波特率,所谓的波特率,就是一秒钟发送数据的位数,通讯是两个设备之间的事情,那么他们的频率必须保持一致。一般我们用的波特率是9600,波特率越低发送的速度越慢,波特率越高发送的数据越快,有可能会出问题
我们来介绍一下上面的这些函数 · Serial.begin(speed) 定义我们的波特率 `int Serial.available() 判断缓冲器状态,返回接受到字节数 `int Serial.read() 读取串口并且返回收到数据(也就是我们要我们所设置的东西,给他赋值赋这个) `Serial.flush() 清空缓冲器 `Serial.print(data) 串口输出数据,data可以是任何数据类型 `Serial.println(data) 串口输出数据并且带回车符(空行) 我们再来梳理一下整个过程,单片机一开始什么事情也不做,就在那等待,当我的电脑发送一个数据给单片机的时候,单片机来接收并判断这个数据,如果是我想要的数据,那么我就做选择分支去做一件事情。我们这里做的事情是反馈一个字符串出去,如果不是,我们也可以让他去做另一个事情,利用这个特性,我们就可以进行我们的远程点灯 比如我们在我们的判断语句里加入点灯,这样我们接受到我们想要的数据后就可以,点亮灯了 接下来是我们的IIC通信代码来源于? ? huanghaoAudio
?而这个就是我们的接线图,现在我们只要在主机和从机上的D13管脚都接上我们的led灯就可以了 因为这是个循环的操作,所以并不需要我们做些什么,电脑自己就会进行(稍微修改修改代码,可以换成 Serial.prinln,可以让我们看的更清楚点打印出了什么,注意我们的波特率!!!!) 主机发出字符串“ON”,从机灯亮;发出“OFF”,从机灯灭。 接下来介绍介绍我们的函数 ·begin()? 主机使用,初始化Wire.h库 `begin(adress)? 从机使用,设置本机地址 `requestFrom(adress,count)? 启动IIC总线后,向从机要count个自己数据 `beginTransmission() 对address地址的从机发起IIC通信 `write() 发送数据的形式? ? ? Wire.write(value) 发送数值 Wire.write(string) 字符组的指针 Wire.write(data,length) data:一个字节数组,length:传输数量 `byte available() 返回接收到的字节数 `byte read() 接收数据 `onReceive(handler) 从机使用,注册一个处理接受数据的函数 `onRequest(handler) 从机使用,注册一个处理请求主机的函数 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/9 1:04:55- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |