嵌入式硬件第七弹——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

相关推荐
少年、潜行2 分钟前
IAR FOR ARM 历史版本安装包、安装、注册流程【百度网盘资源】
arm开发·iar·iar历史版本·iar安装
XS0301063 分钟前
计算机系统层次结构笔记
笔记·硬件工程
hoiii18715 分钟前
基于 STM32 的标准遥控器架构与源码
stm32·嵌入式硬件·架构
少年、潜行16 分钟前
STM32 ISP 升级体验
stm32·嵌入式硬件·isp升级·系统编程区域
杨连江26 分钟前
一种三模式可调气隙式双侧定子滑移可变磁通轴向永磁电机
单片机·嵌入式硬件
Aaron158810 小时前
无人机反制中AOA+TDOA联合定位技术与雷达探测定位技术的应用对比分析
arm开发·嵌入式硬件·fpga开发·硬件工程·无人机·信息与通信·信号处理
foundbug99910 小时前
STM32 睡眠模式测试程序
stm32·单片机·嵌入式硬件
wxmtwfx12 小时前
littlefs 源码分析
单片机·littlefs·嵌入式文件系统
m0_7471245312 小时前
ARM架构基础知识扫盲
arm开发·架构
嵌入式小站13 小时前
STM32 零基础可移植教程 18:I2C 入门,先用扫描器找一找总线上有没有设备
chrome·stm32·嵌入式硬件