注:(1)ALIENTEK 精英 STM32 开发板所使用的 STM32F103ZET6 最多可提供 5 路串口
(2)串口设置的一般步骤可以总结为如下几个步骤:
1) 串口时钟使能, GPIO 时钟使能
2) 串口复位
3) GPIO 端口模式设置
4) 串口参数初始化
5) 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤)
6) 使能串口
7) 编写中断处理函数
一。波特率
1.波特率和比特率的区别
波特率:
在信息传输通道中,携带数据信息的信号单元叫码元,每秒钟通过信道传输的码元数称为码元传输速率,简称波特率,波特率是指数据信号对载波的调制速率,它用单位时间内载波调制状态改变的次数来表示,即是每秒调制的符号数,其单位是波特,波特率是传输通道频宽的指标。
比特率:
指单位时间内传输的比特数
注:(1)波特率越大,传输速率越快。 USART 的发送器和接收器使用相同的波特率。
(2)比特率=波特率*单个调制状态对应的二进制位数
2.计算公式
二。通信接口背景知识
1.处理器和外部设备通信的方式有两种(或者可以这么说通信双方一般有两种通信方法),分别是
(1)并行(xing)通信: (2)串行(xing)通信:
传输原理:数据各个位同时传输 传输原理:数据按位顺序传输
优点:速度快 优点:占用引脚资源少
缺点:占用的引脚资源多 缺点:速度相对比较慢
理解:
并行通信
就是,a和b是两个通信设备,a到b 进行并行通信,8个比特率,有八个引脚,一次性的把数据传到了对应的设备。
串行通信
就是只有一个引脚
2.串行通信:
按照数据传送方向,分为:
- 单工:
数据传输只支持数据在一个方向上传输
- 半双工:
允许数据在两个方向上传输,但是,在某一时刻,只允许数
据在一个方向上传输,它实际上是一种切换方向的单工通信;
- 全双工:
允许数据同时在两个方向上传输,因此,全双工通信是两个
单工通信方式的结合,它要求发送设备和接收设备都有独立
的接收和发送能力。
a是单工,b是半双工,c是全双工
3.串行通信的通信方式
- 同步通信:带时钟同步信号传输。
-SPI,IIC通信接口
- 异步通信:不带时钟同步信号。
-UART(通用异步收发器),单总线
注释:
1.
这个是串行通信,只有一条数据线。
2
这个是同步通信,除了数据线之外还有一条时钟线。
3
这个图中,时钟运行了一个周期,这个时钟具有上升沿和下降沿
4.
这个是异步通信,没有时钟信号,按比特来传输,没有时钟信号,对于异步通信,
它是有一个要求,约定A和B双方进行一个协议;比如用UART通信,A,B双方必须有一个波特率(传输的速度)
5.比如这个图是没有进行约定的
他就不知道你什么时候代表一个位传输完成了呢?这是没有办法,假设波特率确定了,A就用波特率来解析你的数据,一个数据只能发送1ms来传输,他就用1s来采集你的数据,我就知道你的数据是1还是0.
注意:上升沿和下降沿的概念问题
上升沿就是从0变成1中间的过程
下降沿就是从1变成0中间的过程
4。常见的串行通信接口
全双工:UART,SPI
半双工:1-wire,I2C
异步通信:UART,1-wire
同步通信:SPI,I2C
通信标准 | 引脚说明 | 通信方式 | 通信方向 |
UART (通用异步收发器) | TXD:发送端 RXD:接受端 GND:公共地 | 异步通信 | 全双工 |
单总线 (1-wire) | DQ:发送/接受端 | 异步通信 | 半双工 |
SPI | SCK:同步时常见的串行通信接口钟 MISO:主机输入,从机输出 MOSI:主机输出,从机输入 | 同步通信 | 全双工 |
I2C | SCL:同步时钟 SDA:数据输入/输出端 | 同步通信 | 半双工 |
注释:1.UART因为是异步通信,就没有同步时钟,又因为是全双工,所以是一条发送,一条接受。
2.单总线:因为是半双工,所以只需要一条线,一条线既能发送,也能接受的线。
3。SPI是同步通信,必须有同步时钟。又因为是全双工,所以有独立的输入和输出引脚。
4.I2C(这个叫做I方C),他是同步通信,所以有同步时钟,又因为是半双工,所以只有一根数据线,既可以输入,又可以输出 。
5.STM32的串口通信接口
- UART:通用异步收发器
- USART:通用同步异步收发器
注释:大容量STM32F10x系列芯片,包含3个USART和2个UART
6.UART异步通信方式引脚连接方法:
-RXD:数据输入引脚。数据接受。R是receive
-TXD:数据发送引脚。数据发送。T是transmit
简洁记忆:R来接受,T来发送
一个接收连接另一个发送,电脑上有一个串口DB9,
DB9怎么用芯片来连接,DB9进行电平转换
PC机通过电平转换,转换到DB9.
ARM芯片通过串口和电脑通讯的话,也需要RS232转换器,把他转换为232电平,这样它们两个才能连接在一起
ARM芯片的RxD不能直接连接PC机的TxD,因为芯片和电脑的电平是不兼容的。
TTL与232不兼容
7.UART异步通信方式引脚:
-RXD:数据输入引脚。数据接受。
-TXD:数据发送引脚。数据发送。
串口号 | RXD | TXD |
1 | PA10 | PA9 |
2 | PA3 | PA2 |
3 | PB11 | PB10 |
4 | PC11 | PC10 |
5 | PD2 | PC12 |
8.UART异步通信方式特点:
- 全双工异步通信。
- 分数波特率发生器系统,提供精确的波特率。
-发送和接受共用的可编程波特率,最高可达4.5Mbits/s
- 可编程的数据字长度(8位或者9位);
- 可配置的停止位(支持1或者2位停止位);
- 可配置的使用DMA多缓冲器通信。
- 单独的发送器和接收器使能位。
- 检测标志:① 接受缓冲器 ②发送缓冲器空 ③传输结束标志
- 多个带标志的中断源。触发中断。
- 其他:校验控制,四个错误检测标志。
- 注释:1.通信的双方必须先约定好波特率
9.
10.STM32串口异步通信需要定义的参数:
1.起始位
2.数据位(8位或者9位)
3.奇偶校验位(第9位)奇偶校验是接收验错的方法之一
4.停止位(1,15,2位)
5.波特率设置
例子:奇偶效验位是为了提高数据传输的准确率
比如说偶效验,1的数量不是偶数个,说明这个变量传输有问题
举例子:假设这里面有这几位数
偶数校验位
1,1,1,0,那最后那个奇偶效验位,我们假如是偶校验的话就要在那一个位补一个1;
假如1,1,1,1,0,我们在奇偶校验位补一个0;
奇数校验位
1,1,1,0,那最后那个奇偶效验位,我们假如是偶校验的话就要在那一个位补一个0;
假如1,1,1,1,0,我们在奇偶校验位补一个1;
USART框图
1.IrDA SIR这个是红外编辑码
2.TX和RX是接收和发送,
接收:直接到接收移位寄存器,又送到了RDR,之后CPU去读寄存器,去读到我们接收的数据
发送:写数据,TDR寄存器,又把数据送到了发送移位寄存器,又通过波特率一位一位的移出
3.它是由接收器的时钟和发送器的时钟来计算波特率的。
4。接收和发送的波特率是有一个单元来控制,共用波特率发生器
重点来了,就是这里
1.串口的时钟: fPCLKx(x=1,2)
在F103大容量芯片中,
串口1------x=2 串口2~4------x=1
2./usartdiv就是除以一个数(可以是整数或者小数),使用波特率寄存器来配置的。
3.
这里有个小数,还有一个整数
意思就是,这里既能够配置整数的分频,又能配置小数的分频。
4,先除以/usartdiv,配置时钟,再除以16,配置发送器时钟或者接收器时钟。
注意小数和整数都是需要符合是1/16的整数倍这个条件
1.SR寄存器就是传输过程中的状态标志位
2.CR1寄存器分两个部分
有箭头的这四个是连接中断控制,这是一些中断使能,在中断服务函数来判断相应位
没有箭头的这四个是使能位