STM32学习总结之------串口通信USART

学习目标:

  • 掌握 STM32 基础知识

STM32单片机学习总结之------串口通信(USART)


学习内容:

1、利用串口可以帮助我们调试程序,本节介绍的为串口最基本、最常用的方法,全双工、异步通讯方式。

2、要配置串口通讯,至少要设置以下几个参数:字长(一次传送的数据长度)、波特率(每秒传输的数据位数)、奇偶校验位、还有停止位。
初始化串口的时候,必然有一个串口初始化结构体,这个结构体的几个成员就是有来存储这些控制参数的。

3、串口线主要分两种,直通线(平行线)和交叉线
假如PC与板子之间要实现全双工串口通讯,必然是PC的Tx针脚要连接到板子的Rx针脚,而PC的Rx针脚则要连接至板子的Tx针脚了。由于板子和pc的串口接法是相同的,就要使用交叉线来连接了。
直通线接法:开发板Tx连接至DB9的第2针脚,而Rx连接至第3针脚,这与PC接法是相反的,这样的板子与PC通讯就需要使用直通线了。在这里插入图片描述
要实现基本的全双工异步通讯,只要3条线,分别为Rx、Tx、和GND

4、串口架构图
在这里插入图片描述
从下至上,串口外设主要由三个部分组成,分别是波特率的控制部分、收发控制部分及数据存储转移部分。

5、发送接收数据过程:
当我们需要发送数据时,内核或DMA外设(一种数据传输方式)把数据从内存(变量)写入到发送数据寄存器TDR后,发送控制器将适时地自动把数据从TDR加载到发送移位寄存器,然后通过串口线Tx,把数据一位一位地发送出去,在数据从TDR转移到移位寄存器时,会产生发送寄存器TDR已空事件TXE,当数据从移位寄存器全部发送出去时,会产生数据发送完成事件TC,这些事件可以在状态寄存器中查询到。
而接收数据则是一个逆过程,数据从串口线Rx一位一位地输入到接收移位寄存器,然后自动地转移到接收数据寄存器RDR,最后用内核指令或DMA读取到内存(变量)中

6、函数运行过程
在这里插入图片描述
首先调用函数 USART1_Config(),函数USART1_Config()主要做了如下工

  1. 使能了串口1的时钟
  2. 配置好了usart1的I/O
  3. 配置好了usart1的工作模式,具体为波特率为 115200 、8个数据位、1个停止位、无硬件流控制。 即 115200 8-N-1。
    在这里插入图片描述
    具体的USART1_Config() 在usart1.c这个用户文件中。
    一般情况下,该外设的配置都在该外设的.C文件中

7、Tx为发送端,输出引脚,而且现在GPIO是使用复用功能,所以要把它配置为复用推挽输出(GPIO_Mode_AF_PP) ;而Rx引脚为接收端,输入引脚,所以配置为浮空输入模式GPIO_Mode_IN_FLOATING。GPIO的配置

在这里插入图片描述

8、通讯协议要求两个通讯器件之间的波特率、字长、停止位奇偶校验位都相同。
USART1_printf()便是一个完全自定义的格式输出函数,它的功能与重定向之后的printf类似。格式化输出,类似于C库中的printf,但这里没有用到C库

printf() 函数会受缓冲区大小的影响,有时候在用它打印的时候程序会发生莫名奇妙的错误,而实际上就是由于使用printf() 这个函数引起的,其优点就是这种情况很少见且支持的格式较多。
而USART1_printf()则不会受缓冲区的影响产生莫名的错误,但其支持的格式较少。


学习总结:

硬件流,在STM32的很多外设都具有硬件流的功能,其功能表现为:当外设硬件处于准备好的状态时,硬件启动自动控制,而不需要软件再进行干预。
main.c文件中要把 stdio.h 这个头文件包含进来,还要在编译器中设置一个选项 Use MicroLIB (使用微库)

实验结果可以把主函数main里面的 printf 的内容打印出来,可以用来显示程序运行位置。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jory&W

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值