stm32之通信
本文提到的内容有以下几个方面:
- 通信概述
- 串口通信
- I2C通信
- CAN通信
- SPI通信
- I2S通信
- USB通信
- 其他通信
一、通信概述
按照数据传送方式分:
- 串行通信(一条数据线、适合远距离传输、控制较复杂)
- 并行通信(多条数据线、成本高、抗干扰性差)
按照通信的数据同步方式分:
- 异步通信(以1个字符为1帧、发送与接收时钟不一致)
- 同步通信(位同步、时钟一致)
按照数据的传输方向分:
- 单工(只能往一个方向传播)
- 半双工(数据传输可以沿两个方向,但是需要分时)
- 全双工(同时双向传输)
通信速率通常以比特率来表示,单位是:位/秒(bps),即每秒传输二进制代码的位数。之后会遇到一个波特率
的概念,它表示每秒传输多少个码元。一般情况下,码元都是表示两种状态,即比特率=波特率。
二、串口通信
串口通信属于串行通信方式,它规定了接口的电气标准,没有规定接口插件电缆以及使用的协议。在此基础上用
户可以建立自己的高层通信协议。
串口通信的接口标准有很多,有RS-232、RS-232C、RS-422A、RS-485等。比较常用的就是RS-232和RS-485。
RS-232有两种接口:25针(DB25、标准)、9针(DB9、非标准),其逻辑电平如下:
在TxD和RxD上:
- 逻辑1(MARK)=-3V~-15V
- 逻辑0(SPACE)=+3~+15V
在RTS、CTS、DSR、DTR和DCD等控制线上:
- 信号有效(接通,ON状态,正电压)=+3V~+15V
- 信号无效(断开,OFF状态,负电压)=-3V~-15V
当stm32与计算机串口通信时,需要用电平转换芯片MAX232,进行TTL电平和RS-232电平的转换。
RS-232的通信协议比较简单,通常遵循96-N-8-1格式。其是全双工的,且是异步通讯。
RS485没有规定或推荐任何数据协议,用户根据需要自己建立高层通信协议。
区别于RS232, RS485的特性包括:
1. RS-485的电气特性:采用“2线制”,半双工通信,逻辑“1”以两线间的电压差为+(2—6) V表示;逻辑“0”以两
线间的电压差为-(2—6)V表示。接口信号电平比RS -232-C降低了,就不易损坏接口电路的芯片,且该电平与TTL电平兼容,
可方便与TTL 电路连接,其收发器芯片一般采用SP3485。
2. RS-485的数据最高传输速率为10Mbps
3. RS-485接口是采用平衡驱动器和差分接收器的组合,抗共模干能力增强,即抗噪声干扰性好。
4. RS-485接口的最大传输距离标准值为4000英尺,实际上可达 3000米,另外RS-232-C接口在总线上只允许连接1个收
发器,即单站能力。而 RS-485接口在总线上是允许连接多达128个收发器。即具有多站能力,这样用户可以利用单一的RS-485
接口方便地建立起设备网络。 因RS-485接口具有良好的抗噪声干扰性,长的传输距离和多站能力等上述优点就使其成为首选
的串行接口。因为RS485接口组成的半双工网络 ,一般只需二根连线,所以RS485接口均采用屏蔽双绞线传输。 RS485接口
连接器采用DB-9的9芯插头座,与智能终端RS485接口采用DB-9(孔) ,与键盘连接的键盘接口RS485采用DB-9(针)。
在stm32中,我们会接触到USART的概念,即通用同步异步收发器,同步和异步主要看其时钟是否需要对外提供。
其能够满足外部设备对串行通信的要求,只不过其是TTL电平,需要进行电平转换。
注:stm32的奇偶校验位是算在数据位中的(8位-9位),与PC不同。
注:串口用于传输ASCII码字符,我们进行数据传送时,要转换为对应ASCII码的16进制数或字符串。
注:TXE是指弹仓满,TC是指枪膛满。
三、I2C通信
I2C是两线式串行总线,接口少、控制简单、通信速率较高。I2C总线只有两根双向信号线,一根是数据线SDA,另一根是时钟线SCL。
支持多主控多从控,不过同一时间点只能一个主控,连接节点数受地址限制。通过地址访问从控设备,通过仲裁决定主控设备优先级。因
其采用时钟线,所以是同步传输。I2C还是半双工的。具体通信采用I2C的通信协议(寻址、起始/停止、应答等)。I2C用硬件实现起来较
复杂,一般采用软件模拟I2C,移植方便。
四、CAN通信
CAN(Controller Area Network)是ISO国际标准化的串行通信协议。广泛应用于汽车、船舶等分布式控制系统。具有已经被大家
认可的高性能和可靠性。CAN控制器通过组成总线的2根线(CAN-H和CAN-L)的电位差来确定总线的电平,在任一时刻,总线上有2种
电平:显性电平和隐性电平。“显性”具有“优先”的意味,只要有一个单元输出显性电平,总线上即为显性电平,并且,“隐性”具有
“包容”的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平。(显性电平比隐性电平更强)。
总线上执行逻辑上的线“与”时,显性电平的逻辑值为“0”,隐性电平为“1”。
CAN总线是半双工的,虽然没有单独的时钟线,但是其采用位时序的方法进行同步传输。
CAN总线协议具有以下特点:
- 多主控制(ID仲裁)
- 系统的柔软性(没有地址信息)
- 通信速度快、距离远
- 具有错误检测、错误通知和错误恢复功能
- 故障封闭功能
- 连接节点多(理论上无限制,但是受总线时间延迟、电气负载影响,太多会降低速度)
CAN总线有两种标准如下图所示:
CAN总线具有多节点可组网特性,如下图所示:
从上面可以看出,CAN控制器(stm32芯片中带有)和CAN总线直接需要一个CAN收发器,可以采用TJA1040芯片。
当一个站要向其它站发送数据时,该站的CPU将要发送的数据和自己的标识符传送给本站的CAN芯片,并处于准备状态;
五、SPI通信
SPI 是Serial Peripheral Interface的缩写,直译为串行外围设备接口,SPI是Motorola公司推出的一种同步串行通讯方式,
是一种四线同步总线,因其硬件功能很强,与SPI有关的软件就相当简单,使MCU有更多的时间处理其他事务。SPI内部结构简
易图如下图所示:
SPI接口一般使用4条线通信,分别如下:
- MISO:主设备输入/从设备输出
- MOSI:主设备输出/从设备输入
- SCLK:时钟信号线
- CS:从设备选择信号线
SPI一般用于一主多从,其结构示意图如下图所示:
此外,SPI通信有4种不同的模式。下图是一种模式下的时序图:
六、I2S通信
I2S是数字音频总线,在嵌入式音频系统设计中,并不是所有的MCU都支持I2S总线格式,再加上I2S还没有统一的接口标准,不同的
厂家生产的设备接口也是五花八门,采用软件模拟实现I2S总线可有效解决在不支持其的MCU和设备之间通过I2S总线实现数据传输时出现
的问题。
I2S为三线总线,3个信号分别为:
(1)串行时钟SCK,也叫位时钟(BCK)。即每发送1位数字音频数据,SCK上都有1个脉冲。SCK的频率=2×采样频率×采样位数。
在数据传输过程中,I2S总线的发送器和接收器都可以作为系统的主机来提供系统的时钟频率。
(2)帧时钟WS,即命令(声道)选择,用于切换左右声道的数据。WS的频率等于采样频率,由系统主机提供。WS为“1”表示
传输的是左声道的数据,WS为“0”表示传输的是右声道的数据。
(3)串行数据信号SD,用于传输二进制补码表示的音频数据。
I2S格式的信号无论有多少位有效数据,数据位的最高位(MSB)总是被最先传输,1次能够发送的数据决定于I2S格式的有效位数。
如下图所示为典型的时序图:
七、USB通信
USB(Universal Serial Bus)是一种新的PC串行通信协议。是PC体系中的一套较新的工业标准,它支持单个主机与多个外设同时进行
数据交换,大大满足了当今计算机外设追求高速度和高通用性的要求。
PC上的USB主机包括3个部分:USB主控制器/根Hub,USB系统软件和用户软件。下图是完整的USB系统组成。
USB主机与设备之间的传输过程是这样的:在PC上,设备驱动程序通过调用USB驱动程序USBD,发出输入输出请求包IRP;这样,
在USB驱动程序接到请求之后,调用主控制器驱动程序HCD,将IRP转化为USB的传输。当然,一个IRP可以包含一个或多个USB传输;
接着,主控制器驱动程序将USB传输分解为总线事务,主控制器以包的形式发送给设备。
USB设备类协议(USB DevICe Class Specification)与USB协议是互为补充的。针对USB的每一种设备类,都有一套特殊的设备类协
议。正是USB采用了设备类的方式来对各种设备进行分类,才使USB总线能够有效的控制和管理各种设备,也使得各种设备的开发变的
规范、简便。
此外,USB OTG既可以充当主机,也可以充当设备。
八、其他通信
stm32之通信的更多相关文章
- Stm32串口通信(USART)
Stm32串口通信(UART) 串口通信的分类 串口通信三种传递方式 串口通信的通信方式 串行通信的方式: 异步通信:它用一个起始位表示字符的开始,用停止位表示字符的结束.其每帧的格式如下: 在一帧格 ...
- STM32 串口通信使用奇偶校验
STM32串口通信如果使用奇偶校验,需要设置数据位长度为9bit USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USAR ...
- STM32串口通信UART使用
STM32串口通信UART使用 uart使用的过程为: 1. 使能GPIO口和UART对应的总线时钟 2. 配置GPIO口的输出模式 3. 配置uart口相关的基本信息 4. 使能uart口的相关的中 ...
- STM32 USB-HID通信移植步骤
大家可以使用压缩包中的UsbApp.exe调试本软件idVendor为:0483 idProduct为5750. 今天太晚了,明天还要上半天班,上位机软件找个时间在写一篇文章.请关注我的博客.压缩包 ...
- stm32串口通信实验,一点笔记
第一次深入学习stm32,花了好长时间才看懂代码(主要是C语言学习不够深入),又花了段时间自己敲了一遍,然后比对教程,了解了利用中断来串口通信的设置方法. 板子是探索版f407,本实验工程把正点原子库 ...
- STM32 CAN通信
最近在STM32上开发CAN通信相关内容,转载一篇个人认为不错的文章,看完了基本算明白了,能够实际操作了. 原文地址: https://blog.csdn.net/ludaoyi88/article ...
- STM32串口通信配置(USART1+USART2+USART3+UART4) (转)
一.串口一的配置(初始化+中断配置+中断接收函数) 1 /*====================================================================== ...
- STM32串口通信USART1转USART2问题解决
使用的是STM32f103ZET6. 1.把文件main.c和usart.c中的所有usart1换成usart2 2.查看手册得知USART2的引脚是Tx->PA2,Rx->PA3,改变u ...
- 半吊子的STM32 — SPI通信
全双工,同步串行通信. 一般需要三条线通信: MOSI 主设备发送,从设备接收 MISO 主设备接收,从设备发送 SCLK 时钟线 多设备时,多线选取从机: 传输过程中,主从机中的移位寄存器中数据相互 ...
随机推荐
- Spring cloud微服务实战——基于OAUTH2.0统一认证授权的微服务基础架构
https://blog.csdn.net/w1054993544/article/details/78932614
- PHP、AJAX综合练习(增、删、改、查、分页、模糊查询)
先来几张效果图 主页面分页显示: 关键字查询,关键字描红 添加数组,弹出窗口,点击保存,再不刷新页面的同时添加到网页数据 修改界面:弹出窗口,文本框中保留点击的车辆的原始信息 主页面代码 <me ...
- 【BZOJ1222】[HNOI2001]产品加工 DP
[BZOJ1222][HNOI2001]产品加工 Description 某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同 ...
- C#的默认访问权限(转)
1.在namespace中的类.接口默认是internal类型的,也可以显示的定义为public类型,不允许是其他访问类型.2.在一个类里面,属性和方法默认是private的,可以显示的定义为publ ...
- 九度OJ 1168:字符串的查找删除 (查找)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4276 解决:1699 题目描述: 给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串. 输入: 输入只有1 ...
- Linux内核的编译安装
前言 Linux内核是Linux操作2347系统的核心,也是整个Linux功能体现的核心,就如同发动机在汽车中的重要性.内核主要功能包括进程管理.内存管理.文件管理.设备管理.网络管理等.Linux内 ...
- Linux入门基础(一)——ls、mkdir命令
- Pentaho BIServer Community Edtion 6.1 使用教程 第一篇 软件安装
一.简介: Pentaho BI Server 分为企业版和社区版两个版本.其中 社区版 CE(community edtion) 为免费版本. 二.下载CE版(CentOS): 后台下载命令: no ...
- dojo 官方翻译 dojo/string 版本1.10
官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/string.html#dojo-string require(["dojo/st ...
- BZOJ 4868-4873 题解
BZOJ4868 每个结束位置的最优值很显然具有单调性,三分,再讨论一下就好了. #include<bits/stdc++.h> using namespace std; #define ...