CubeMax配置串口通讯

串口基础知识

问:什么是串口通讯?

答:
串口通讯(Serial Communication)是一种按位(bit)逐次发送和接收数据的通信方式,仅需少量信号线(如 TX、RX、GND)即可实现设备间数据传输。

特点:

  • 异步传输:无需共享时钟信号(CLK),依靠波特率(Baud Rate)同步。

  • 数据帧结构:由起始位(Start Bit)数据位(5-9 bit)校验位(可选)停止位(Stop Bit)组成。

  • 简单可靠:适合低速、长距离通信(如工业控制、传感器数据采集)。


问:串口通讯协议有哪些?

答:
串口通信协议可分为物理层标准(硬件接口+电平规范)协议层规范(数据帧格式+校验规则)两类。

1. 物理层标准(硬件接口+电平规范)
标准电平特性传输方式传输距离典型应用
TTL0V(逻辑0) / 3.3V或5V(逻辑1)单端信号<1m单片机、嵌入式设备
RS-232±3V~±15V(逻辑1:-3V~-15V,逻辑0:+3V~+15V)单端信号<15m旧电脑串口、工业设备
RS-485差分信号(A/B线电压差表示逻辑)差分信号≤1200m工业自动化(Modbus)
CAN差分信号(CAN_H/CAN_L)差分信号≤40m(1Mbps)汽车电子、工业控制
2. 协议层规范(数据帧格式+校验规则)
协议传输方式特点典型应用
UART异步无时钟信号,需约定波特率单片机调试、传感器
USART同步/异步比UART多同步模式(如SPI)高速通信(如STM32)
Modbus基于UART/RS-485主从架构,支持多设备工业自动化
CAN协议同步(带位仲裁)多主机、错误检测、高可靠汽车电子

问:RS232、USART、UART、CAN、RS485的区别?

答:

特性UARTUSARTRS-232RS-485CAN
传输方式异步同步/异步异步异步/同步同步
电平标准TTL(0V/3.3V/5V)TTL±3V~±15V差分(±1.5V~±5V)差分(±2V)
通信距离<1m(TTL)<1m(TTL)<15m≤1200m≤40m(1Mbps)
抗干扰极强
拓扑结构点对点点对点点对点多点(总线)多点(总线)
典型应用调试接口高速通信旧电脑外设工业Modbus汽车电子

总结:

  • UART/USART:协议层,定义数据格式(USART支持同步)。

  • RS-232/RS-485:物理层,定义电平与接口(RS-485更先进)。

  • CAN:高可靠总线协议,适用于复杂环境。


补充关键点

  1. 波特率(Baud Rate):每秒传输的符号数(如9600、115200bps),需收发双方一致。

  2. 校验方式:奇校验、偶校验、无校验,用于检测数据错误。

  3. 全双工 vs 半双工

    • 全双工(如UART):TX、RX可同时收发。

    • 半双工(如RS-485):同一时间只能发送或接收。

       

以STM32F103VGT6为例,用STM32CubeMX配置串口

基础配置:

       1. 高速时钟配置成外部晶振

        2.Debug模式选择Serial Wire

       3.时基资源选择 TIM5(如果使用Free RTOS,否则默认Systick即可)

其中RCC的三个操作的含义是

1. Master Clock Output 1/2 的含义

作用
Master Clock Output(MCO)引脚允许微控制器将内部时钟信号(如HSE、HSI、PLL等)输出到外部设备,例如:

                1.为其他芯片(如传感器、通信模块、音频编解码器)提供同步时钟。

                2.调试时监测内部时钟频率

2. Audio Clock Input (I2S_CKIN) 的含义

作用:这是用于音频接口(I2S协议)的外部时钟输入引脚,允许外部音频设备(如CODEC)提供主时钟信号,确保音频数据传输的同步性。

2. 何时选择 Master Clock Output?

需要选择的情况

        1.外部设备需要时钟同步:例如,连接外部ADC、DAC、FPGA或其他需要精确时钟的器件。

        2.多设备时钟共享:避免为每个设备单独设计时钟电路,简化硬件设计。

        3.调试或测试:通过输出内部时钟到示波器,验证时钟频率是否正确。

无需选择的情况

        1.外部设备自带振荡器(如晶振)或不需要主时钟同步。

        2.系统无时钟共享需求,或仅使用内部时钟。

4.何时选择 Audio Clock Input (I2S_CKIN)

        1.使用外部音频设备(如数字麦克风、音频编解码器)且需由外部提供时钟时启用。

        2.内部时钟无法满足音频精度要求(如高保真音频需低抖动时钟)

串口配置

UART和USART有区别,所以在CubeMX上配置时,UART相较USART的模式选项,少了一个SmartCard,同时少了一个RS232硬件协议的选择.

通信模式(Mode)选项介绍:

1、Asynchronous(异步模式)

        含义:数据以不定时的方式传输,依赖起始位和停止位同步,无需共享时钟信号(如UART)。

        作用:简化硬件设计,适应不同速率的设备通信。

        何时使用:

                常见的串口通信(如调试日志、传感器数据读取)。

                设备间时钟不同步或距离较远(如GPS模块与MCU)。

2、Synchronous(同步模式)

        含义:数据通过共享时钟信号(如SCLK)严格同步传输(如SPI、I2C)。

        作用:提高传输速率和可靠性。

        何时使用:

                高速或实时性要求高的场景(如显示屏刷新、高速ADC采样)。

                主从设备需严格同步(如EEPROM读写)。

3、Single Wire (Half-Duplex)(单线半双工)

        含义:单根线分时双向传输数据,同一时间只能发送或接收。

        作用:节省引脚资源。

        何时使用:

                引脚有限的场景(如单总线协议DS18B20温度传感器)。

4、Multiprocessor Communication(多处理器通信)

        含义:支持多个设备共享总线,通过地址识别目标设备。

        作用:实现一主多从的通信架构。

        何时使用:

                多个MCU或外设需共用同一总线(如工业控制网络)。

5、IrDA(红外通信)

        含义:通过红外光传输数据,需编解码模块。

        作用:无线短距离通信。

        何时使用:

                红外遥控、医疗设备(如血氧仪)。

6、LIN(局域互联网络)

        含义:低成本车载通信协议,单线传输。

        作用:替代复杂CAN总线用于简单控制。

        何时使用:

                汽车电子中的次级网络(如车窗控制、座椅调节)。

7、SmartCard(智能卡模式)

        含义:支持ISO7816标准的智能卡接口。

        作用:安全身份验证或支付。

        何时使用:

                SIM卡、银行卡读卡器。

硬件流控(Hardware Flow Control)

1、Disable(禁用流控)

        含义:不启用硬件流控信号(CTS/RTS)。

        作用:简化接线,适用于低速率或可靠环境。

        何时使用:

                短距离通信或波特率较低(如9600bps以下)。

                设备间缓存足够(如MCU与PC串口调试)。

2、CTS Only(仅清除发送)

        含义:仅使用CTS信号,接收方控制发送方数据流。

        作用:防止接收方缓冲区溢出。

        何时使用:

                单向大数据量传输(如GPS模块持续输出数据)。

3、RTS Only(仅请求发送)

        含义:仅使用RTS信号,发送方请求接收方准备。

        作用:确保接收方就绪后再发送数据。

        何时使用:

                接收方处理能力有限(如低速MCU接收高速数据)。

4、CTS/RTS(全硬件流控)

        含义:同时启用CTS和RTS信号,双向控制数据流。

        作用:避免数据丢失,提高高波特率下的可靠性。

        何时使用:

                高速通信(如115200bps以上)或噪声环境(如工业现场)。

                设备间处理速度差异大(如MCU与4G模块通信)。

总结

①通信模式选择:

        根据协议要求(如UART/SPI)、设备数量(单设备/多设备)、传输方向(全双工/半双工)决定。

②硬件流控选择:

        根据波特率、传输距离、设备缓存能力决定是否启用CTS/RTS。

典型场景:

        异步+禁用流控:普通串口调试。

        同步+全流控:高速SPI连接ADC。

        LIN模式:汽车电子控制。

选择USART3的Asynchronous(异步模式)模式

一、参数配置

1.波特率的数值是自己输入

2.字长是选择的,8字长或9字长

3.奇偶校验处可以选择 无 、Even(奇)、Odd(偶)

4.停止位可以选择1、2位停止位

5.数据方向则是三个选项:收发、仅收、仅发

6.过样率(采样率):16 Samples 或者 8 Samples。其功能是选择每bit的采样次数,8就是每bit采样8次,16同理。高采样则数据准,但是传输数据会慢。

        在CubeMX中,选择 16x Oversampling 可显著降低115200bps下的误码率。

用户常量则是自定义宏

添加常量

        在界面点击 add → 输入 NAME 和 VALUE(如 PWM_FREQUENCY 1000)。

生成代码

工具会在 main.h 或 stm32xxxx_hal_conf.h 中生成:

        #define PWM_FREQUENCY 1000

NVIC设置(嵌套 向量 中断 控制 设置)

勾选上Enabled,也就是使能中断,而具体参数需要看到System Core中的NVIC进行配置抢占优先级(Preemption Priority)和响应优先级(Sub Priority)

NVIC配置

点到System Core的NVIC,可以看到

在NVIC参数界面,左上角的Priority Group是优先级分组

这个是4bit划分抢占和响应的数量。抢占优先级(Preemption Priority)和响应优先级(Sub Priority)。

而其右侧的两个选项则是排序

Sort by Preemption Priority and Sub Priority:按中断的 抢占优先级(Preemption Priority) 和 子优先级(Sub Priority) 对中断表进行排序。

Sort by interrupts names:按中断的 名称(字母顺序) 对中断表进行排序。

Show则是显示各种中断

Available interrupts

        显示当前硬件支持的所有中断源(无论是否启用)。

        用途:查看芯片支持的中断列表(如USART、TIMER、DMA等)。

Enabled interrupts

        仅显示已在代码中启用(Enabled)的中断(即NVIC中已配置的中断)。

        用途:快速检查当前激活的中断,避免遗漏或冲突。

All interrupts

        显示全部中断(包括未启用、不可用或保留的中断)。

        用途:完整查看所有可能的中断(通常用于调试或底层开发)。

Force DMA Channels Interrupts:

        "Force DMA Channels Interrupts"(强制启用DMA通道中断)是一个配置选项,通常在嵌入式开发工具(如STM32CubeMX、IAR或Keil的NVIC配置界面)中出现,用于强制显示或启用DMA相关的中断,即使这些中断默认未在NVIC表中列出或未被代码显式启用。

        显示隐藏的DMA中断

        DMA(直接内存访问)控制器通常有多个通道(如DMA1_Channel1、DMA2_Channel3等),每个通道可能对应不同的外设(如USART、SPI、ADC)。默认情况下,某些工具可能不会在NVIC中断表中列出所有DMA通道中断(尤其是未使用的通道)。

        勾选此选项会强制显示所有DMA通道中断,方便开发者查看或配置。

Code generation

Code Generation 选项用于控制 如何自动生成中断相关的初始化代码。它决定了:

  1. 是否生成中断使能代码HAL_NVIC_EnableIRQ())。

  2. 是否生成中断服务函数(ISR)的框架(如 USART3_IRQHandler)。

  3. 是否自动调用HAL库的中断处理函数(如 HAL_UART_IRQHandler)。

列名作用推荐配置
Enabled interrupt table显示已使能的中断列表(如USART3、TIM5)。自动生成,无需修改
Select for intl sequence ordering调整中断初始化代码的顺序(影响启动时的中断使能时机)。默认即可
Generate Enable in intl是否在初始化代码中生成 HAL_NVIC_EnableIRQ()(使能中断)。✅ 勾选(必须)
Generate IRQ handler是否生成中断服务函数(ISR)的框架代码(如 USART3_IRQHandler)。✅ 勾选(需自定义逻辑时)
Call HAL handler是否在ISR中自动调用HAL库的中断处理函数(如 HAL_UART_IRQHandler)。✅ 勾选(简化开发)
(1) Generate Enable in intl

作用

        生成 HAL_NVIC_EnableIRQ(IRQn) 代码,使能中断。如果不勾选,即使配置了中断也不会生效。

示例代码

// 在生成的初始化代码中(如 main.c)
HAL_NVIC_EnableIRQ(USART3_IRQn);  // 使能USART3中断
(2) Generate IRQ handler

作用
        在 stm32xxxx_it.c 文件中生成中断服务函数(ISR)的空框架,供用户填充自定义逻辑。

示例代码

// stm32xxxx_it.c
void USART3_IRQHandler(void) {
    // 用户在此添加处理代码(如读取接收到的数据)
}
(3) Call HAL handler

作用
        在ISR中自动调用HAL库的通用中断处理函数(如 HAL_UART_IRQHandler),由HAL库处理底层逻辑(如清除中断标志、调用回调函数)。

示例代码

void USART3_IRQHandler(void){
        HAL_UART_IRQHandler(&huart3); // 自动处理UART中断
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值