ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Days 51 【嵌入式开发】IMX6ULL UART串口通信超详细解析

Days 51 【嵌入式开发】IMX6ULL UART串口通信超详细解析 一、前言串口通信是嵌入式开发中最基础、最常用的通信方式无论是设备日志打印、模块数据交互蓝牙、GPS、WiFi还是下位机与上位机通信都离不开UART串口。本文基于IMX6ULL MINI开发板从零梳理UART串口通信核心概念、硬件原理图、电源设计、底层寄存器配置搭配官方手册参数完整讲解嵌入式异步串口通信的底层实现原理适合嵌入式新手入门学习、项目复盘和面试备考。二、串口通信核心基础概念在嵌入式系统中通信本质是两个及以上设备/主机之间的数据交互串口通信作为最基础的通信方式包含多组核心分类概念下面逐一通俗解析。1. 同步通信 异步通信同步通信收发设备共用同一根时钟线依靠统一时钟信号同步数据收发双方时钟严格对齐传输速率快、精度高但硬件接线多、成本高。典型协议SPI、I2C。异步通信无需独立时钟线收发双方提前约定好波特率、数据位、停止位、校验位参数依靠帧格式起始位、停止位区分数据硬件接线简单、通用性强。UART属于典型的异步通信。2. 串行通信 并行通信串行通信数据逐位依次在单条信道传输接线少、抗干扰能力强传输距离远是串口通信的核心方式UART、RS485均为串行通信。并行通信多位数据同时并行传输传输速度快但接线多、长线干扰严重、传输距离短嵌入式串口场景极少使用。3. 单工、半双工、全双工单工数据传输方向固定仅支持单向收发一端只能发送、一端只能接收无法反向交互。半双工设备支持收发双向传输但同一时间只能单向传输收发切换需要时序控制典型RS485。全双工收发独立信道同一时间可同时发送和接收数据传输效率更高典型UART、RS232。4. TTL、RS232、RS485 区别三者均基于串口通信协议核心差异为电平标准、传输距离、抗干扰能力TTL电平单片机原生串口电平高电平3.3V/5V、低电平0V传输距离短板级通信抗干扰弱本文IMX6ULL串口为TTL电平。RS232正负电平逻辑高电平-12V、低电平12V抗干扰优于TTL传输距离中等常用于设备近距离串口调试。RS485差分传输模式抗干扰能力极强、传输距离远千米级支持多设备组网工业场景主流通信方式。5. 差分传输差分传输是一种抗干扰极强的传输方式通过两根电平相反的信号线A、B线传输数据通过两根线的电平差值判断数据0/1。外界干扰会同时作用于两根信号线差值保持不变极大提升长距离传输的稳定性RS485、高速串口、以太网均采用差分传输区别于TTL单端传输。三、IMX6ULL MINI 串口硬件原理图分析本文硬件基于IMX6ULL_MINI_V2.2 底板原理图核心分析USB USARTUSB POWER 模块是串口调试的核心硬件电路。1. 硬件模块整体说明该模块实现USB转TTL串口功能是我们电脑与开发板串口通信的桥梁同时集成USB供电电路。重要注意事项不建议使用USB作为开发板主供电会导致板子发热严重影响硬件稳定性。2. 核心硬件单元拆解1USB接口USB_TTL通用Micro USB接口核心作用是连接电脑USB口实现电脑与开发板的硬件链路对接既可以传输USB数据也可提供5V供电是串口调试的外部接口。2CH340 转换芯片U8整个串口模块的核心芯片核心功能USB协议转TTL串口协议。电脑USB口无原生串口协议无法直接和单片机TTL串口通信通过CH340芯片完成协议转换将电脑USB数据转为IMX6ULL可识别的TTL串口数据实现数据双向交互。3DCDC电源稳压模块U12、U13配套电源稳压电路主要作用是电压稳压、电路防抖、抗干扰。USB输入电压存在波动、杂波干扰经过DCDC稳压模块后输出稳定纯净的工作电压为CH340和串口电路供电保障串口数据传输不丢包、不乱码。四、IMX6ULL UART 底层代码与寄存器配置基于《IMX6ULL参考手册》完整梳理UART初始化配置流程包含时钟初始化、引脚复用配置、核心寄存器配置、波特率计算是裸机串口开发的核心代码逻辑。1. 时钟初始化配置串口工作依赖精准时钟本文配置标准参数UART基准时钟80MHz时钟预分频1分频不做分频保留原始基准时钟频率2. 引脚复用与电气配置IMX6ULL引脚为多功能复用引脚需要手动配置为UART收发功能同时设置引脚电气属性配置代码如下UART1为例// UART1 TX引脚复用配置为发送功能 IOMUXC_SetPinMux(IOMUXC_UART1_TX_DATA_UART1_TX, 0); // UART1 TX引脚电气配置 IOMUXC_SetPinConfig(IOMUXC_UART1_TX_DATA_UART1_TX,0x10B0); // UART1 RX引脚复用配置为接收功能 IOMUXC_SetPinMux(IOMUXC_UART1_RX_DATA_UART1_RX, 0); // UART1 RX引脚电气配置 IOMUXC_SetPinConfig(IOMUXC_UART1_RX_DATA_UART1_RX,0x10B0);配置说明0x10B0为标准串口电气配置配置引脚上下拉、速率、驱动能力适配串口通信时序。3. 核心寄存器详细配置重点IMX6ULL UART功能全部由寄存器控制下面逐一解析核心功能寄存器的位域作用对应手册标准定义。1UARTx_URXD 接收数据寄存器属性只读寄存器核心位域[RX_DATA] bit0~bit7功能存储UART接收到的一字节数据规则7位数据模式下最高位自动置08位数据模式下8位数据全部有效常用8位模式2UARTx_UTXD 发送数据寄存器属性只写寄存器核心位域[TX_DATA] bit0~bit7功能存放需要发送的一字节数据规则软件向该寄存器写入数据后UART硬件自动触发数据发送流程无需手动启动时序3UARTx_UCR1 控制寄存器1核心位域[UARTEN] bit0功能UART模块总开关说明该位置1开启UART整体功能置0关闭UART模块所有收发功能失效4UARTx_UCR2 控制寄存器2核心配置寄存器串口参数、收发使能、复位功能均由该寄存器配置[UARTEN] bit0软件复位位置1触发UART软件复位复位持续4个模块时钟周期[RXEN] bit1接收器使能位置1开启接收功能[TXEN] bit2发送器使能位置1开启发送功能[WS] bit5数据位宽配置位设置7位/8位数据模式[STPB] bit6停止位配置位设置1位/2位停止位[PREN] bit8奇偶校验使能位开启/关闭奇偶校验功能[IRTS] bit14忽略RTS硬件流控位一般串口调试无需流控该位置15UARTx_UCR3 控制寄存器3核心位域[RXDMUXSEL] bit2关键说明IMX6ULL的UART工作在多路复用模式该位必须固定置1否则串口无法正常工作6UARTx_UFCR FIFO控制寄存器核心位域[RFDIV] bit7~bit9功能UART参考时钟分频器本文配置1分频匹配80MHz基准时钟7UARTx_USR2 状态寄存器2用于查询串口收发状态实现非阻塞收发[TXDC] bit3发送完成标志位数据发送完毕后硬件自动置1[RDR] bit0接收数据就绪标志位收到新数据后硬件自动置14. 波特率寄存器配置与计算公式IMX6ULL串口波特率由两个寄存器共同配置UBIR增量寄存器、UBMR调制寄存器核心计算公式$$BaudRate Ref Freq/(16 \times ((UBMR 1) / (UBIR 1)))$$Ref FreqUART基准参考时钟本文80MHzUBIRUART BRM 增量寄存器bit0~bit15UBMRUART BRM 调制寄存器bit0~bit15通过修改两个寄存器的数值即可精准配置9600、115200等常用波特率。五、开发总结1、嵌入式UART串口通信核心为异步串行、全双工TTL通信依靠CH340实现USB与串口协议转换是嵌入式调试的核心工具2、硬件层面需注意供电规范禁止USB单独供电避免设备发热、传输不稳定3、裸机串口开发核心四步时钟初始化→引脚复用配置→寄存器参数配置→波特率配置4、所有串口收发、参数配置、状态查询均依托底层寄存器掌握寄存器位域功能即可自主实现任意波特率、任意帧格式的串口通信。
返回列表