STM32串口驱动

首先了解串口通信的一些基本原理:

⚫ 串口通信: 串口通信是指数据通过一条数据线(或者两条差分线)一位接着一位的传输出去。串口通信的优点是占用硬件资源少,且传输距离较远,缺点是传输速度慢(这些优缺点都是相对于并口通信而言,其实在平时应用中串口的通信速度完全能够满足绝大部分通信场景的要求)。

⚫ 并口通信 :并口通信是说通过多条数据线一次性的将数据传输出去,类似于多车道,其优点当然就是传输速度快,但是缺点也很明显,第一它占用更多的硬件资源,第二是它的传输距离短,对 PCB 布线有更高的要求,因为每条数据线如果不等长会导致寄生电容也不同,最终会在数据线之间产生传输延时,导致数据传输失败。并口一般应用在 LCD 显示和快速存储设备上面。 

⚫ 单工通信 :单工通信是指无论在何时数据的流向是单向的,接收端只负责接收不具备发送功能,发 送端只负责发送,不具备接收功能。

⚫ 半双工通信 :半双工通信是指数据传输方向是双向的,但是在同一时刻只允许数据单向传输,比如 UART 和 IIC

⚫ 全双工通信 :全双工通信则支持在同一时刻数据可以双向传输,比如 SPI

⚫ 同步通信方式: 同步通信方式是指收发双方之间通过一条时钟信号线来同步数据的传输,在发生传输时 必须在时钟线的同步下将数据一位一位的传输出去,这种方式传输速度较快,但是因为时钟和数据线是单独分开的,因此它的传输距离较近,典型的应用就是 IIC 和 SPI,他们都有一 条时钟线来同步数据线上的位传输。

⚫ 异步通信方式: 异步通信方式是指,收发双方没有数据线同步,要通过特定的起始以及停止标志位来判 断此时数据是否开始传输以及是否传输完成。另外异步通信的收发双发要保证通信速度的统 一,典型的就是 UART,RS485 等。 

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传 输器)属于异步串行通信,UART 是平时使用最多的一个串行通信方式,主要应用场景如 下:

1. 用于打印程序调试信息 (需要重定向)

2. 和上位机配套软件通信,使得我们可以通过上位机来查看或者设置下位机 (人机交互)

3. 用于 ISP 或者 IAP 程序下载(串口收发数据)

STM32F103RCT6 系统控制器有三个 USART 和两个 UART,其中 USART1 和时钟来源于 APB2 总线时钟,其最大频率为 72MHz,其他四个的时钟来源于 APB1 总线时钟,其最大频率为 36MHz。UART 只是异步传输功能,所以没有 SCLK、nCTS 和 nRTS 功能引脚。

STM32F103C8T6 单片机有三个 USART,USART 和 UART 的区别在于 USART 支持同步模式,在同步模式下有一个时钟信号线用于同步数据,但是我们平时使用的都是 UART 的异步通信,可以说 UART 是 USART 的一个子集,除此之外 STM32 的 USART 还支持 LIN(局部互连网),智能卡协议和 IrDA SIR ENDEC 规范,但是平时用的最多就是 UART,

那么要想使用 UART,就必须确保收发双方的通信约定要一致,这些约定包括:波特率(通信速度),数据位(8 位或 9 位),停止位个数(1 位,1.5 位,2 位),校验方式(奇校验, 偶校验,无校验)。波特率就是要制定双方通信的速度,我们经常使用的波特率有(1200,2400,4800,9600,115200),波特率越大,传输速度就越快。数据位就是我们想要传输的有效数据的部分,因为一 个字节是 8 位,因此经常使用的也是 8 位数据位,一般 9 位数据位的应用场合有以下几种:

1. 8 位数据的扩展(8 位可以表示 256 种可能,9 位可以表示 512 种可能)

2. 使用第 9 位来表示此时数据传输的模式,第九位为 1 代表此时是读模式,为 0 表示是写模式。

3. 使用第 9 位作为负数,例如第 9 位为 1 表示-,第 9 位为 0 表示+

另外停止位,停止位是双发通信的结束标志,常用的是1位停止位,最后是校验方式,校验可以保证数据传输的正确性、完整性,但是会增加数据帧的长度,通常我们使用无奇偶校验。(只能够知道错误,不能修改错误) 

来源STM32F10XXX参考手册:

        串口规定每次只发送一个字节,因为我们知道串口是通过bps时间差从而得到的高低电平(0,1)的切换的,每次发送一个字节就可以避免形如11111111情况下的累计误差的出现。并且在空闲的时候都是高电平1的,发送数据的时候都是先发低位,再发高位。

下面看一下 STM32中USART 的结构框图:

        UART 由三大部分组成:第一部分就是用于设置和标记传输模式的控制寄存器和标志寄存器部分(黄色高亮区域),第二部分是引脚通信(绿色高亮),该部分和发送/接收移位 寄存器进行连接,第三部分是数据转换部分(蓝色高亮),该部分将发送数据寄存器内的数据通过移位寄存器传输到 TXD 引脚,接收同理。

要想使用 UART,需要先进行配置:

1. 配置 GPIO,TXD 引脚要设置为复用推挽输出,RXD 要设置为浮空输入

2. 配置 UART,包括波特率、数据位、停止位、奇偶校验位以及是否使用硬件流控,硬 件流控通过 RTS 和 CTS 作为流控引脚,我们一般应用是不需要的。

3. 如果想实现串口的发送或接受中断,那么还要设置 NVIC。

串口驱动程序:

         在初始化函数中,依次初始化了用于通信的 TXD 和 RXD 引脚,然后设置了串口的波特率 为 9600,8 位数据位,1 位停止位,无奇偶校验位,无硬件流控,USART_Init()函数用于将 各个设置写到对应寄存器当中,生效设置, USART_ITConfig(USART1, USART_IT_RXNE, ENABLE)函数用于开启 USART 中的某个中断,USART 的中断非常多,有发送数据寄存器空中断,发送完成中断,接收寄存器非空中断等等,这里选择接收寄存器非空中断,它的意思是说当接收数据寄存器中接收到数据后它会产生中断,跳转到对应串口的中断服务函数中,添加这条语句是为下一个串口实验准备的。

 编写中断服务函数发送接收数据:

发送函数:

接收函数:

         USART_SendData()函数用于将参数 byte 填入到发送数据寄存器当中,byte 是 16 位的 原因是 byte 要支持 9 位数据位的情况。 while 循环用于等待这一字节发送完成才结束该函数。USART_FLAG_TC 就是发送完成的标志,如果把该条语句注释掉,就会导致发送不出数据,因为在本次数据还没发送完成时第二次发送任务就又来了(假设是连续发送的场 合),导致数据不停的被刷新。 

串口接发中断服务程序:

注意:正如前面所讲,可以利用串口打印调试的信息,但是前提要对打印函数重定向,有关printf函数的重定向可以看我另一篇文章。 

更多优质文章博客:STM32之串口相关配置_Swiler的博客-CSDN博客_stm32串口配置

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,STM32串口驱动VL53L0X模块的具体步骤如下: 1. 首先,需要连接VL53L0X模块的引脚。VL53L0X模块的引脚说明如下: - VCC正极:连接到3.3-5V的电源供电 - GND负极:连接到GND - CT串口:连接到STM32的USART_TX或IIC_SCL引脚 - DR串口:连接到STM32的USART_RX或IIC_SDA引脚 - SET:用于设置上下限距离报警值(电压范围为0~3.3V) - OUT:报警值状态输出 2. 在驱动程序中,可以使用UART对应的程序或IIC对应的程序来进行通信。其中,UART对应程序可以使用以下代码进行单次读取距离长度: ``` uint8_t VL6180X_Read_ID(uint8_t add) { return VL6180X_ReadByte(add, VL6180X_REG_IDENTIFICATION_MODEL_ID); } ``` 3. 在编写驱动程序时,可以参考资源说明、基本参数、参数引脚说明等相关资料,以确保正确配置和使用VL53L0X模块。 请注意,以上是一个简要的概述,具体的驱动程序实现可能需要根据具体的硬件和软件环境进行调整。建议参考提供的资料和相关代码进行详细的开发和调试。 #### 引用[.reference_title] - *1* *3* [K_A12_022 基于STM32单片机驱动VL53L0X模块 串口与OLED0.96双显示](https://blog.csdn.net/lfmnlxx79691557/article/details/128976783)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [基于STM32CUBEMX驱动TOF模块VL6180与VL6180X(1)----单模块距离获取的最佳实践](https://blog.csdn.net/qq_24312945/article/details/128457505)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值