STM32F103xx学习笔记(2):串行与并行通讯——框架尚硅谷SEM32视频教程

部分基础概念

并行通讯和串行通讯

串行:按位传输,一次传输一位。适合远距离传输。
并行:一次传输多位数据。传输速度快,但是受距离限制大(并行的时序要求),布线更复杂。
在这里插入图片描述
高速串行通讯是趋势。
例如现在采用的PCIe:高速时钟频率的串行传输替代了以前的并行传输,本身亦可以拓展位宽。
类似的还有硬盘的SATA接口。
不过某些高速数据传输应用中(内部总线),并行通讯仍是必要的。

单工,半双工,全双工

定义从信息的传输方向来定义。
单工:只能A传输到B。
半双工:A传输B,B传输A,二者无法同时存在。
全双工:允许A,B同时互相传输。

同步,异步

同步传输过程需要时钟信号线,而异步传输只需要数据信号线。

通讯协议

串口通讯 Serial Communication支持大部分通讯方式,是一种常用的串行通讯,异步,全双工方式。
在这里插入图片描述

串口通讯协议

在这里插入图片描述
上面是一个数据帧,也称为一个数据流。
先从低位发送,起始位是0,停止位必须是1,默认是1,也就是空闲位。在232中,如果空闲位高电平保持一个数据帧的长度(空闲帧),便认为发送结束。
波特率:每秒传输的码元(位)数量,由于通讯中没有时钟,因此通讯双方要约定好波特率,即告知每个码元的长度。常见波特率有9600、115200等。

USART外设

Universal Synchronous Asynchronous Receiver and Transmitter
通用 串行 同步 收发。
去掉时钟的同步属性,即为UART。
在这里插入图片描述
IrDA红外信号传输,LIN本地网络传输,STM32中,USART1的速度最快。
在UART的基础上拓展更多协议,衍生出RS-232,RS-485电气标准,其中RS-485使用差分传输,但是双线半双工,RS-422使用4线差分做到全双工。在电脑上,微软定义了COM串口。

功能框图

在这里插入图片描述
SW_RX:只会在单线Single Line才会启用。
IrDA:红外模块
nRTS:requair to send 请求发送,低电平有效。nCTS:clear to send,低电平有效,通讯双方两个引脚对应连接。
SCLK控制:把时钟信号输出。
处理寄存器时,可以将RDR和TDR合二为一为DR。

波特率设置 USART_BRR

使能位TE,RE,在16位寄存器BRR中配置,高12位为整数,低四位为小数。规则:USARTDIV = DIV_Mantissa + (DIV_Fraction/16),最终的发送,接受器的时钟为 (外设总线)/(UAARTDIV * 16),因此,波特率公式为:
在这里插入图片描述
假设我们需要的波特率是115200,则对应的分频值应该是:39.0625,把这个值写入到BRR寄存器中。39.0625的小数部分:0.0625 * 16 = 1, 整数部分是:39(0x27)。

相关寄存器

USART_BRR

在这里插入图片描述
设置波特率,14位整数,4位小数,寄存器值为0x271时,设置波特率为115200.

收发使能和串口使能

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
RXNE=1:接受缓冲寄存器为满

M位默认八位字长。一般校验位和M位配合使用,数据位位9位时,配合打开校验位,使其中一为位校验位。

发送接受数据

状态寄存器
在这里插入图片描述
TXE:transmit data register empty,发送寄存器空
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

中断形式进行通讯

利用中断可以更好的实现接收字符串功能和IDEL位的判断。
另外USART1——Handler一个中断服务程序对应多个中断向量,需要在终端服务程序中用if…else if…判断中断来源。

C语言笔记

本次实验中加深了对C++中数组的理解:

uint8_t  buffer[100] = {0};
uint8_t  size  = 0;

// 定义了一个字符串打印函数
void usart_send_string(uint8_t *str, uint8_t size);
// 以下两中函数的调用均可
// 第一种
usart_send_string(&buffer[0],size);
// 第二种
usart_send_string(buffer,size);

其中,第一种比较好理解,取第一个数组元素的指针,可是第二种为什么也可以成功调用函数呢?因为C 语言中的数组名表现为指向数组第一个元素的指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值