当前位置: 首页 > news >正文

STM32学习(六 )

串口初始化IO引脚

串口的引脚在哪里

串口可以利用GPIO_InitTypeDef结构体和GPIO_Init()函数进行初始化

    USART_InitTypeDef USART_InitStruct;//建立串口结构体USART_InitStruct.USART_BaudRate = 115200;//波特率115200USART_InitStruct.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;//双向传输模式USART_InitStruct.USART_WordLength = USART_WordLength_8b;//8位数据位USART_InitStruct.USART_Parity = USART_Parity_No;//无校验USART_InitStruct.USART_StopBits = USART_StopBits_1;//1位停止位USART_Init(USART1,&USART_InitStruct);

看芯片的引脚的情况没有明确标注了Tx、Rx引脚。

串口引脚有哪几种类型

串口通信(USART)的IO引脚主要包括TX(发送)、RX(接收)、CTS(清除发送)、RTS(请求发送)等类型。以下是对这些引脚类型及其功能和用途的详细解释:

  1. TX(发送)引脚‌:

    • 功能‌:用于发送数据。
    • 用途‌:将微控制器的数据通过串口发送到外部设备,如另一个微控制器、计算机或串口通信模块。
  2. RX(接收)引脚‌:

    • 功能‌:用于接收数据。
    • 用途‌:从外部设备接收数据到微控制器。
  3. CTS(清除发送)引脚‌(可选):

    • 功能‌:用于流量控制,当外部设备准备好接收数据时,通过CTS引脚通知微控制器可以发送数据。
    • 用途‌:在需要硬件流控制的应用中使用,以避免数据丢失或溢出。
  4. RTS(请求发送)引脚‌(可选):

    • 功能‌:用于流量控制,当微控制器准备好发送数据时,通过RTS引脚通知外部设备可以接收数据。
    • 用途‌:同样在需要硬件流控制的应用中使用。
  5. Ck  引脚‌(可选):

    • 功能‌:CK引脚在同步通信模式下用作时钟信号线,为数据传输提供时钟同步。通过与数据信号线(如TX和RX)的配合,CK引脚可以确保数据的准确传输。
    • 用途‌:在同步通信模式下,CK引脚用于提供时钟信号,使得发送方和接收方能够按照相同的时钟节奏进行数据传输,从而确保数据的准确性和同步性。

通用和复用功能

串口就是所谓的复用模式之一。我们查找芯片厂家文档中的重映射表可以得到Tx对应的是PA9,Rx对应的是PA10。重映射后Tx对应的是PB6,Rx对应的是PB7。

复用映射

重映射

复用和重映射引脚表示

如何设置引脚参数

模式和最大速度

当我们知道了复用的相关引脚,在编程中我们如何确定引脚的模式和最大速度

解决的方法是查找IO配置表

表中显示输出使用推挽复用模式,输入选用输入浮空或输入上拉,推荐使用输入上拉

全双工(Full Duplex)‌:全双工是指通信设备可以同时进行发送和接收数据的能力。

  • 支持同时进行双向数据传输。
  • 通常需要全双工通信的物理介质,如双绞线、光纤等。
  • 在STM32单片机中,USART模块可以配置为全双工模式,允许同时进行数据的发送和接收。

半双工(Half Duplex):半双工是指通信设备在同一时间内只能进行发送或接收数据,不能同时进行。

  • 数据传输是单向的,但在不同时间可以切换方向。
  • 常见的半双工通信设备有对讲机、某些无线通信模块等。
  • 在STM32单片机中,虽然USART模块本身支持全双工,但可以通过软件控制实现半双工通信。

同步(Synchronous)‌:同步通信是指发送方和接收方使用相同的时钟信号进行数据传输,以确保数据的准确性和同步性。

  • 需要时钟信号来同步数据传输。
  • 数据传输速度通常较快,且误码率较低。
  • 在STM32单片机中,USART模块可以配置为同步模式,使用CK引脚提供时钟信号。

硬件流控(Hardware Flow Control)‌:硬件流控是指通过硬件信号(如RTS/CTS)来控制数据传输的流量,以避免数据丢失或溢出。

  • 使用专门的硬件信号进行流量控制。
  • 可以有效地管理数据传输的速率和流量。
  • 在STM32单片机中,USART模块支持硬件流控功能,可以通过配置RTS和CTS引脚来实现。

编写代码(PA9\PA10)

	GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOA,&GPIO_InitStruct);

编写代码(PA6\PA7)

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//开启AFIO模块时钟GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);//设置重载映射GPIO_InitTypeDef GPIO_InitStruct;// 输出推挽GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);//输入浮空 输入上拉RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOA,&GPIO_InitStruct);

GPIO_PinRemapConfig函数是STM32单片机中用于配置GPIO引脚重映射的功能函数。通过该函数,可以将某些外设的功能引脚从默认的GPIO引脚重映射到其他可用的GPIO引脚上,从而提供更大的灵活性和方便性。

GPIO_PinRemapConfig函数允许用户根据特定的需求,将外设(如USART、SPI、I2C、TIM等)的功能引脚重映射到其他的GPIO引脚上。这在某些应用场景下非常有用,比如当默认的引脚被其他功能占用,或者为了优化布板和布线时。

GPIO_PinRemapConfig函数通常接受两个参数:

  1. 重映射选项‌:这是一个枚举或宏定义,指定了要进行的重映射操作。例如,可能有一个选项用于将USART1的TX引脚从默认的PA9重映射到PB6。

  2. 启用或禁用‌:这是一个布尔值(通常使用ENABLEDISABLE宏定义),指定是启用还是禁用该重映射。

http://www.lryc.cn/news/514623.html

相关文章:

  • 基于 GitHub API 的 Issue 和 PR 自动化解决方案
  • 56.在 Vue 3 中使用 OpenLayers 通过 moveend 事件获取地图左上和右下的坐标信息
  • 文件本地和OSS上传
  • elementui table 表格 分页多选,保持选中状态
  • MSE+Range案例
  • C# 设计模式(结构型模式):代理模式
  • YOLO——pytorch与paddle实现YOLO
  • 持续大额亏损,销量增幅有限,北汽蓝谷依旧黯然神伤
  • C# OpenCV机器视觉:背景减除与前景分离
  • C语言return与 ? :
  • 【论文阅读】SCGC : Self-supervised contrastive graph clustering
  • python pyqt5+designer的信号槽和动态显示
  • 版本控制系统Helix Core 2024.2增强功能:与OpenTelemetry协议集成、Delta同步和传输等
  • certificate verify failed: unable to get local issuer certificate (_ssl.c:10
  • 关于大一上的总结
  • JavaScript的基础知识
  • 数据结构之单链表(超详解)
  • 告别编程困惑:GDB、冯诺依曼、操作系统速通指南
  • 网络分析工具-tcpdump
  • 基于AI边缘计算盒子的智慧零售场景智能监控解决方案
  • STM32G431收发CAN
  • 如何得到深度学习模型的参数量和计算复杂度
  • 2025年股指期货每月什么时候交割?
  • 自从学会Git,感觉打开了一扇新大门
  • Ansys Discovery 中的网格划分方法:探索模式
  • 关于 AWTK 和 Weston 在旋转屏幕时的资源消耗问题
  • grouped.get_group((‘B‘, ‘A‘))选择分组
  • HTML——66.单选框
  • Couchbase 和数据湖技术的区别、联系和相关性分析
  • springboot3 性能优化