嵌入式硬件第七弹——ARM(4)

(续接上篇)

5. UART

5.1 基本概念

通信:

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

异步、同步:

  • 异步:通信双方不共享一根时钟线规定的传输频率传输数据;
  • 同步:通信双方共享一根时钟线规定的传输频率传输数据。

串行、并行:

  • 串行:通过一根信号线逐字节传输数据;
  • 并行:通过多跟信号线多个字节同时发送。

单工、半双工、全双工:

  • 单工:接收方和发送方固定,通过1根信号线单向传输数据;
  • 半双工:通信双方既可以当接收方也可以当发送方,通过1根信号线,同时刻一方只能发送,另一方只能接收;
  • 全双工:通信双方既可以是接收方也可以是发送方,双方通过2根信号线可同时接收和发送数据。

TTL、RS232、RS485:电器标准

差分传输:

  • 差分传输是一种信号传输方式,通过一对反向平行导线传输幅度相等、极性相反的同源信号,接收端通过检测两信号的差值还原原始信息,可有效抑制共模干扰、提升抗干扰能力与传输距离。

5.2 原理图分析

USB USART&USB POWER模块

注意:不建议USB作为电源供电,板子发热

  1. USB接口(USB_TTL)
  2. CH340(U8)
    CH340 的核心功能是 USB 转串口(TTL)
  3. DCDC电源稳压模块(U12 U13)
  4. 防抖、抗干扰

5.3 代码编写

5.3.1 时钟初始化

基准80MHz预分频: 1分频

5.3.2 引脚初始化

IOMUXC_SetPinMux(IOMUXC_UART1_TX_DATA_UART1_TX, 0);

IOMUXC_SetPinConfig(IOMUXC_UART1_TX_DATA_UART1_TX,0x10B0);

IOMUXC_SetPinMux(IOMUXC_UART1_RX_DATA_UART1_RX, 0);

IOMUXC_SetPinConfig(IOMUXC_UART1_RX_DATA_UART1_RX,0x10B0);

5.3.3 寄存器配置

UART Receiver Register (Uart 接收寄存器)

  • UARTx_URXD: 只读寄存器
  • RX_DATA b0-7: 已接收数据。保存接收到的字符。在7位模式下,最高有效位(MSB)被强制为0。在8位模式下,所有位都处于活动状态。

UART Receiver Register (Uart 发送寄存器)

  • UARTx_UTXD:
  • TX_DATA b0-7:需要发送的数据,当软件向 TX_DATA 字段执行写入操作时,UART 硬件会自动开始一个新字符的发送过程。

UART Control Register 1 (Uart 控制寄存器1)

  • UARTx_UCR1:
  • UARTEN b0:UARTEN 位是整个 UART(通用异步收发传输器)模块的总开关。它控制着 UART 模块的核心功能是开启还是关闭。

UART Control Register 2 (Uart 控制寄存器2)

UARTx_UCR2:

  • UARTENb0:软件复位 软件复位将保持有效 4 个模块时钟周期;
  • RXENb1:接收器使能;
  • TXEN b2:发送器使能;
  • WS b5:字长(数据位宽度)。控制字符的数据位长度;
  • STPB b6:停止位数量。控制每个字符后发送的停止位数量;
  • PREN b8:奇偶校验使能;
  • IRTS b14:忽略 RTS 引脚流控;

UART Control Register 3 (Uart 控制寄存器3)

UARTx_UCR3:

  • RXDMUXSEL b2:注意: 在此芯片中,UART 工作于多路复用 (MUXED) 模式,因此此位应始终设置为 1

UART FIFO Control Register (FIFO控制寄存器)

UARTx_UFCR:

  • RFDIV b7-b9:参考时钟分频器。控制参考时钟的分频比 1分频;

UART Status Register 2 (UARTx_USR2)

UARTx_USR2:

  • TXDC b3:发送完成;
  • RDR b0:接收数据就绪;

波特率配置寄存器

UART BRM Incremental Register (UARTx_UBIR)

  • INC b0-b15:UBIR;

UART BRM Modulator Register (UARTx_UBMR)

  • MOD b0-b15:UBMR;

5.4 putc

输出

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');

}

输入

unsigned char getc(void)

{

while ((UART1->USR2 & (1 << 0)) == 0);

return (unsigned char)UART1->URXD & 0XFF;

}

5.5 移植stdio

  1. 需要在uart.c中添加一个函数:void raise(int n);函数体为空即可,否则会报错;
  2. 如果之前编写的project/start.s文件扩展名为小写s,则需改成大写。即start.S。对于汇编文
  3. 件来说,扩展名S和s说不一样的,S会先做预处理,在进行编译而s则省略预处理步骤;
  4. 由于增加了新的源码和头文件,所以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

相关推荐
mftang1 小时前
CAN总线控制段:位级结构、DLC编码、代际扩展与错误处理的系统性分析
单片机·嵌入式硬件·can总线·控制段·数据长度代码
Jason_zhao_MR10 小时前
Linux与实时控制如何兼得
linux·嵌入式硬件·机器人·工业控制
BSD_CGQ10 小时前
FSR传感器STM32 DMA高速采样工程实现(高精度、低CPU占用)
stm32·单片机·嵌入式硬件·压力传感器·源头工厂·柔性薄膜压力传感器·可变电阻压力传感器
芯岭技术郦13 小时前
32 位 ARM® Cortex®-M0+ 内核MCU普冉MS32C001-C
单片机·嵌入式硬件
骑着毛驴数星星13 小时前
STM32 CAN波特率与采样点计算,基于HAL库
stm32·单片机·嵌入式硬件
zhangrelay14 小时前
Arduino-MEGA-ESP单片机理论课笔记02-硬件-2026
笔记·单片机·嵌入式硬件
艾芯微科技15 小时前
钰泰 ETA5055V330DD1E|SOT-223 3.3V LDO,低压差、大电流线性稳压选型分享
网络·单片机·嵌入式硬件·集成测试·51单片机
新晨单片机设计16 小时前
S023A-基于STM32单片机智能插座【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus·单片机智能插座
ACP广源盛1392462567316 小时前
USB3.0 高速信号切换方案评估,LH3412 @ACP双通道差分开关硬件选型笔记
笔记·硬件架构·硬件工程·国产芯片·开关
威嵌神州16 小时前
恩智浦 T1022 性能怎么样?QorIQ 架构中端工业嵌入式优势解析
嵌入式硬件