一,通信接口
1,目的:进行信息传递
2,双方约定规则:通信协议
3,USART串口:引脚TX(TXD):数据发送脚 ,引脚RX(RXD):数据接收脚
4,I2C通信:SCL:时钟,SDA:数据
5,SPI通信:引脚:SCLK:时钟,MOSI:主机输出数据脚,
MISO:主机输入数据脚,CS:片选:用于指定通信的对象
6,CAN通信:差分数据脚CAN_H , CAN_L,用两个引脚表示一个差分数据
7,USB通信:一对差分数据脚:DP(D+),DM(D-)
8,数据按照协议规定在引脚上进行输入和输出,从而实现通信
9,全双工:指通信双方能够同时进行双向通信,互不影响,一般来说全双工的通信都有两根通信线
10,半双工:CAN和USB两根差分线组合成一根数据线
11,单工:数据只能从一个设备到另一个设备,而不能反着来
12,时钟特性:同步:I2C和SPI有单独的时钟线
异步: USART串口,CAN,USB,没有时钟线,需要双方约定一个采样频率
还需要加帧头帧尾,进行采样位置对齐
13,电平特性:
单端信号:引脚的高低电平都是对GND的电压差,单端信号通信双方要共地,GND接一起
差分信号:可以极大地提高抗干扰特性,所以差分信号一般传输速度和距离都会非常高
14:设备特性: 点对点:直接传输数据,多设备:需要有一个寻址的过程,确定通信对象
二,串口通信
1,USB转串口模块,陀螺仪传感器模块,蓝牙串口模块
三,硬件电路
四,电平标准
五,串口参数及时序
1,串口中,每一个字节都装载在一个数据帧里
2,数据帧由起始位,数据位,停止位组成
3,数据位后面可以加一个奇偶校验位,这样数据位就是9位:有效载是前8位,代表一个字节
4, 不需要传输的时候高电平,需要时发送一个起始位,产生下降沿
结束时发送一个停止位,引脚恢复为高电平
5,数据位,低位先行,例:发送0xFF(0000 11111),波形如下图翻转
6,校验位:无校验(左图),奇校验,偶校验(右图)
例:奇校验:即包括校验位在内的9位数据会出现奇数个1
例:传输0000 1111,4个1,偶数个,则校验位就会补一个1
六,USART
1,常用串口参数:波特率:9600或115200,数据位8位,停止位1,无校验
2,寄存器程序上只表现一个寄存器,实际上硬件有发送寄存器(TDR只写)和接受寄存器
(RDR只读)
3,当硬件检测到你写入数据了USART,它就会检查,当前移位寄存器是不是有数据正在移位 如果没有这个数据就会全部移动到发送寄存器,准备发送 。
当数据移动到移位寄存器时会置一个标志位(TXE)发送寄存器空,
检查标志位,如果置1了,就可以在TDR写入下一个数据了
4,nRTS请求发送,nCTS清除发送,是输入脚。前面加个n是低电平有效
七,USART基本结构
1,波特率发生器,用于产生约定的通信速率。时钟来源是PCLK2/1
2,经过波特率发生器分频后,产生的时钟通过发送控制器和接收控制器
3,发送控制器和接收控制器,用来控制发送移位和接收移位
4,之后,由发送数据奇存器和发送移位寄存器这两个寄存器的配合,将数据一位一位地移出去
转移的同时会置一个TXE标志位
5,通过GPIO 口的复用输出,输出到TX引脚,产生串口协议规定的波形
6,接受部分:RX引脚的波形,通过GPIO输入。
在接收控制器的控制下,一位一位地移入接收移位寄存器
转移的同时置一个RXNE标志位(可以申请中断)
7,开关控制:配置完成后用cmd开启外设
八,串口发送
1,初始化串口
1.1 开钟,开YSART和GPIO
1.2 GPIO初始化,把TX配置成复用输出,RX配置成输入
1.3 配置USART,用结构体配置
1.4 如果需要接收功能,需要配置中断(加上TConfig和NVIC的代码)
1.5 cmd开启串口
1.6如果要发送数据,就调用发送的函数。如果要接收数据,就调用接收的函数
如果要获取发送和接收的状态,就调用获取标志位的函数。
2,库函数介绍
2.1 USART_ClockInit,USART_ClockStructInit 配置同步时钟输出的
2.2 USART_SendData发送数据,即写DR寄存器
2.3 USART_SendData接收数据,即读DR寄存器
3,一根线只能有一个输出,但可以有多个输入。所以输入脚GPIO和外设都可以同时输入。
一般RX配置是浮空输入或者上拉输入
4,串口配置应该与软件配置一致
HEX:原始数据,文本模式:字符串的形式显示
5,数据显示
5.1字符串结束标志位
7,printf重定向
serial的c和h文件要加头文件
main也要加main
sprintf(位置,内容);可以指定打印位置
8,分装sprintf
8.1Serial的c文件加#include<stdarg.h>
九,HEX数据包
HEX数据包:以FF为包头,FE为包尾,中间固定4个字节为数据
文本数据包:@为开头,中间为数据,最后要换行
HEX数据包
1,作用:把一个个单独的数据打包起来,方便我们进行多字节的数据通信