串口函数配置表

张开发
2026/4/19 9:08:08 15 分钟阅读

分享文章

串口函数配置表
串口的初始化思路可以概括为“先硬件后参数再功能”。这就像建立一条通信电话线先铺设物理线路硬件再约定通话规则参数最后决定是单向通知还是双向对讲功能。遵循这个思路可以确保串口稳定、可靠地工作。️ 第一步配置硬件资源这一步是为串口通信搭建物理基础确保“路”是通的。使能时钟这是所有操作的前提。MCU为了省电默认会关闭大部分外设的时钟。你必须先开启串口外设时钟例如使用USART1就要使能USART1的时钟。GPIO端口时钟串口的TX/RX引脚是复用在GPIO上的所以也要开启对应GPIO端口如GPIOA的时钟。特别注意对于STM32F103USART1挂载在APB2总线上而USART2/3等挂载在APB1总线上使能时钟时要使用不同的函数。配置GPIO引脚将用于通信的物理引脚配置到正确的工作模式TX (发送) 引脚配置为复用推挽输出 (GPIO_Mode_AF_PP)模式。因为数据是由串口外设控制发出的所以是“复用”功能。RX (接收) 引脚配置为浮空输入 (GPIO_Mode_IN_FLOATING)或上拉输入 (GPIO_Mode_IPU)模式。⚙️ 第二步设置通信参数这一步是通信双方必须遵守的“通话协议”任何一方不匹配都会导致通信失败或出现乱码。需要配置一个核心参数结构体主要包括波特率 (Baud Rate)通信速率单位是bps比特每秒。通信双方必须设置成完全一样的值常见的有9600、115200等。数据位 (Word Length)每个数据包包含的有效数据位数最常用的是8位。停止位 (Stop Bits)表示一个数据包传输结束的标志最常用的是1位。校验位 (Parity)用于简单的错误检测最常用的是无校验 (None)。硬件流控制 (Hardware Flow Control)用于高速通信时防止数据丢失一般低速通信选择无 (None)。配置好这些参数后调用初始化函数将其写入串口寄存器并使能串口外设让它开始工作。 第三步选择工作模式这是最后一步决定了你如何使用这个串口主要有三种模式灵活性和复杂度依次递增。模式一查询模式 (Polling)CPU主动、持续地询问串口状态。实现简单但会严重占用CPU资源。模式二中断模式 (Interrupt)串口在收到数据或发送完成时主动触发中断通知CPU。实时性好CPU利用率高。需要额外配置NVIC中断控制器。模式三DMA模式 (DMA)配置DMA作为“自动搬运工”在串口和内存之间自动传输数据无需CPU干预。极大解放CPU适合大数据量传输。 标准库代码函数配置表下面以配置USART1为例展示使用标准库进行初始化的核心代码和函数。硬件配置代码void USART1_HardwareInit(void) { GPIO_InitTypeDef GPIO_InitStructure; // 1. 使能时钟 // USART1在APB2总线GPIOA也在APB2总线 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); // 2. 配置GPIO引脚 // TX引脚 (PA9) - 复用推挽输出 GPIO_InitStructure.GPIO_Pin GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); // RX引脚 (PA10) - 浮空输入 GPIO_InitStructure.GPIO_Pin GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, GPIO_InitStructure); }参数配置代码void USART1_ParameterInit(void) { USART_InitTypeDef USART_InitStructure; // 3. 配置串口参数 USART_InitStructure.USART_BaudRate 115200; // 波特率 USART_InitStructure.USART_WordLength USART_WordLength_8b; // 8位数据位 USART_InitStructure.USART_StopBits USART_StopBits_1; // 1位停止位 USART_InitStructure.USART_Parity USART_Parity_No; // 无校验位 USART_InitStructure.USART_HardwareFlowControl USART_HardwareFlowControl_None; // 无流控 USART_InitStructure.USART_Mode USART_Mode_Tx | USART_Mode_Rx; // 同时使能发送和接收 // 4. 初始化USART1并使其工作 USART_Init(USART1, USART_InitStructure); USART_Cmd(USART1, ENABLE); }功能模式配置代码 (以中断接收为例)void USART1_InterruptConfig(void) { NVIC_InitTypeDef NVIC_InitStructure; // 5. 配置NVIC中断优先级 NVIC_InitStructure.NVIC_IRQChannel USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority 1; NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE; NVIC_Init(NVIC_InitStructure); // 6. 使能串口接收中断 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); }标准库核心函数速查表#星禾科技# #我在成都玩科技# #星禾星穗# #具身智能机器人# #编程#

更多文章