news 2026/1/29 2:21:58

学习笔记——嵌入式系统通信基础及串口开发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
学习笔记——嵌入式系统通信基础及串口开发

嵌入式系统通信基础及i.MX6ULL串口开发笔记

一、通信基本概念

1.1 通信定义

嵌入式系统中的通信是指两个或两个以上的主机之间的数据交互过程。

1.2 通信分类

异步通信 vs 同步通信
类型特点示例
异步通信无需时钟信号同步,依靠起始位、停止位、校验位等标志位UART、RS-232
同步通信需要时钟信号同步,发送和接收方使用同一时钟SPI、I2C、USB
串行通信 vs 并行通信
类型特点优缺点示例
串行通信逐位顺序传输优点:节省引脚、抗干扰
缺点:速度相对慢
UART、I2C、SPI
并行通信多位同时传输优点:速度快
缺点:引脚多、干扰大
8086总线、打印机接口
单工/半双工/全双工
类型特点示意图示例
单工单向传输A → B广播、电视
半双工双向但不同时A ↔ B(分时)对讲机、RS-485
全双工双向同时传输A ⇄ B电话、UART

1.3 电气标准

TTL电平
  • 逻辑0:0V

  • 逻辑1:3.3V/5V

  • 传输距离短(<1m)

RS-232
  • 逻辑0:+3V ~ +15V

  • 逻辑1:-3V ~ -15V

  • 传输距离:15米

  • 点对点通信

RS-485
  • 差分信号传输

  • 逻辑0:A-B < -0.2V

  • 逻辑1:A-B > +0.2V

  • 传输距离:1200米

  • 支持多点通信

差分传输
  • 使用两根信号线传输相位相反的信号

  • 优点:抗干扰能力强,传输距离远

  • 缺点:需要两根线传输一位数据

二、原理图分析

2.1 参考文档

2.2 USB转串口模块

┌─────────────────────┐ │ USB接口 │ │ (USB Type-B) │ └─────────┬───────────┘ │ ▼ ┌─────────────────────┐ │ CH340G │ │ (USB转TTL芯片) │ └─────────┬───────────┘ │ ▼ ┌─────────────────────┐ │ UART1_TX/RX │ │ (TTL电平) │ └─────────┬───────────┘ │ ▼ ┌─────────────────────┐ │ i.MX6ULL SOC │ └─────────────────────┘

2.3 关键组件说明

(1)USB接口(USB_TTL)
  • 用于PC与开发板通信

  • 注意:不建议使用USB作为电源供电,会导致板子发热

(2)CH340芯片(U8)
  • 功能:USB转串口(TTL电平)

  • 将USB信号转换为UART信号

(3)DCDC电源稳压模块(U12 U13)
  • 功能:电源稳压

  • 特点:防抖、抗干扰设计

三、代码编写

3.1 参考文档

IMX6ULL参考手册.pdf

3.2 初始化步骤

(1)时钟初始化
// 基准时钟80MHz,预分频1分频 void uart_clk_init(void) { // UART1时钟配置 CCM->CSCDR1 &= ~(0x3F << 0); // 清空中断 CCM->CSCDR1 |= (1 << 0); // 1分频 }
(2)引脚初始化
void uart_pin_init(void) { // UART1_TX引脚配置 IOMUXC_SetPinMux(IOMUXC_UART1_TX_DATA_UART1_TX, 0); IOMUXC_SetPinConfig(IOMUXC_UART1_TX_DATA_UART1_TX, 0x10B0); // UART1_RX引脚配置 IOMUXC_SetPinMux(IOMUXC_UART1_RX_DATA_UART1_RX, 0); IOMUXC_SetPinConfig(IOMUXC_UART1_RX_DATA_UART1_RX, 0x10B0); }

3.3 寄存器配置

(1)接收寄存器(UARTx_URXD)
  • 地址:只读寄存器

  • 功能:保存接收到的字符

  • 位说明

    • RX_DATA[7:0]:已接收数据

    • 7位模式:MSB强制为0

    • 8位模式:所有位都有效

(2)发送寄存器(UARTx_UTXD)
  • 地址:可写寄存器

  • 功能:写入需要发送的数据

  • 特性:写入后自动开始发送

(3)控制寄存器1(UARTx_UCR1)
// 重要位说明 UARTx_UCR1: [UARTEN] b0:UART模块总使能位(1=使能,0=关闭)
(4)控制寄存器2(UARTx_UCR2)
// 位说明 [UARTEN] b0:软件复位(写1复位,持续4个时钟周期) [RXEN] b1:接收器使能 [TXEN] b2:发送器使能 [WS] b5:字长选择(0=8位,1=7位) [STPB] b6:停止位数量(0=1位,1=2位) [PREN] b8:奇偶校验使能 [IRTS] b14:忽略RTS流控(设置为1)
(5)控制寄存器3(UARTx_UCR3)
[RXDMUXSEL] b2:必须设置为1(MUXED模式)
(6)FIFO控制寄存器(UARTx_UFCR)
[RFDIV] b7-b9:参考时钟分频器 // 000 = 6分频,001 = 5分频,010 = 4分频 // 011 = 3分频,100 = 2分频,101 = 1分频
(7)状态寄存器2(UARTx_USR2)
[TXDC] b3:发送完成标志位(1=完成) [RDR] b0:接收数据就绪标志位(1=有数据)
(8)波特率配置
// 波特率计算公式 BaudRate = Ref_Freq / (16 × ((UBMR + 1) / (UBIR + 1))) // 寄存器配置 UARTx_UBIR:增量寄存器 UARTx_UBMR:模数寄存器

3.4 UART驱动函数实现

(1)发送函数
// 发送单个字符 void putc(unsigned char d) { // 等待发送完成标志 while ((UART1->USR2 & (1 << 3)) == 0); // 写入发送寄存器 UART1->UTXD = d; } // 发送字符串 void puts(const char *pStr) { while (*pStr) { putc(*pStr++); } putc('\n'); // 添加换行 }
(2)接收函数
// 接收单个字符 unsigned char getc(void) { // 等待接收数据就绪 while ((UART1->USR2 & (1 << 0)) == 0); // 读取数据 return (unsigned char)UART1->URXD & 0xFF; }

3.5 移植标准输入输出(stdio)

步骤说明
  1. 添加空函数(解决编译错误)

    void raise(int n) { // 空函数体 }
  2. 修改汇编文件扩展名

    • start.s改为start.S

    • 注意:大写S会进行预处理,小写s则不会

  3. 修改Makefile

    # 库路径配置 libpath = -lgcc -L/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib/gcc/arm-linux-gnueabihf/4.9.4 # 包含目录 incdirs = bsp imx6ull stdio/include # 源码目录 srcdirs = bsp project stdio/lib # 链接选项 $(ld) -Timx6ull.lds -o$(target).elf $^ $(libpath) # 编译选项 $(cc) -Wall -Wa,-mimplicit-it=thumb -nostdlib -fno-builtin -c $(include) -o $@ $<
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/28 3:46:34

电商客服机器人实战:SGLang+DeepSeek快速落地

电商客服机器人实战&#xff1a;SGLangDeepSeek快速落地 1. 为什么电商客服需要SGLang这样的推理框架&#xff1f; 你有没有遇到过这样的场景&#xff1a;大促期间&#xff0c;客服咨询量暴增3倍&#xff0c;人工坐席全在线仍排队200&#xff0c;用户等5分钟没回复直接关页面…

作者头像 李华
网站建设 2026/1/28 10:44:46

VOFA+与STM32串行通信协议解析:全面讲解

以下是对您原始博文内容的 深度润色与结构化重构版本 。本次优化严格遵循您的全部要求&#xff1a; ✅ 彻底去除AI痕迹&#xff0c;语言自然、专业、有“人味”&#xff0c;像一位资深嵌入式工程师在技术博客中娓娓道来&#xff1b; ✅ 打破模板化标题&#xff08;如“引言…

作者头像 李华
网站建设 2026/1/28 10:50:02

视频本地化全攻略:DownKyi多场景应用指南

视频本地化全攻略&#xff1a;DownKyi多场景应用指南 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xff09;。 项…

作者头像 李华
网站建设 2026/1/27 19:33:10

零基础学YOLOv13:跟着官方镜像一步步动手实践

零基础学YOLOv13&#xff1a;跟着官方镜像一步步动手实践 你是否曾为部署一个目标检测模型反复折腾环境——CUDA版本不匹配、PyTorch编译失败、Flash Attention安装报错、依赖冲突到凌晨三点&#xff1f;你是否看过YOLOv13论文里那些惊艳的指标&#xff0c;却卡在第一步“连模…

作者头像 李华
网站建设 2026/1/28 7:00:12

全平台高效无损视频下载工具:DownKyi全场景应用指南

全平台高效无损视频下载工具&#xff1a;DownKyi全场景应用指南 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xf…

作者头像 李华