当前位置: 首页 > news >正文

基于IMX6ULL 芯片 UART1

  1. 单工、半双工、全双工通信
    • 单工通信:数据只能沿一个固定方向传输,比如广播电台向收音机发送信号,收音机不能向电台发信号。
    • 半双工通信:数据能双向传输,但同一时间只能沿一个方向传,像对讲机,一方说话时另一方只能听,不能同时说。
    • 全双工通信:数据可同时双向传输,例如打电话,双方能同时说话和听。
  2. 串行通信与并行通信
    • 串行通信:数据一位一位依次传输,只需要一条或很少的传输线,比如电脑 USB 接口传输数据。
    • 并行通信:数据的多位同时传输,需要多条传输线,像电脑内部的总线传输数据,能提高传输速度,但成本高。
  3. 异步通信与同步通信
    • 异步通信:收发双方不用统一的时钟信号,通过起始位、停止位等方式同步数据,每次传输的是一个字符或字节,比如串口通信。
    • 同步通信:收发双方用统一的时钟信号来同步,一次传输大量数据,比如 I2C、SPI 总线通信。
  4. 串口通信的类别串口通信属于串行通信异步通信,通常为全双工通信(也可配置为半双工)
  5. 串口通信常见电气表达标准有 RS - 232、RS - 485、RS - 422,各有特点:
  • RS - 232:采用负逻辑电平,与 TTL 电平不兼容,需电平转换;通信距离短(≤15 米)、速率低(最高约 20kbps),适用于计算机与打印机、Modem 等短距连接。
  • RS - 485:差分信号传输,抗干扰强;通信距离远(100kbps 下达 1200 米),支持多节点(一主多从),广泛用于工业控制领域。
  • RS - 422:差分传输,抗干扰强;通信性能好(10Mbps 时达 120 米,100kbps 时达 1200 米),支持全双工、一对多通信,多用于工业自动化、测量仪器等场景。

以下是对这段 IMX6ULL 芯片 UART1 初始化及基本操作代码的详细标注:

#include "uart.h"                  // 包含UART相关函数声明
#include "../imx6ull/MCIMX6Y2.h"   // 包含IMX6ULL芯片寄存器定义
#include "../imx6ull/fsl_iomuxc.h" // 包含IOMUXC引脚复用配置函数/*** @brief 初始化UART1通信接口* 配置UART1的引脚复用、波特率、数据格式等参数*/
void uart1_init(void)
{// 配置UART1_TX引脚复用为UART1发送功能,第二个参数0表示默认配置IOMUXC_SetPinMux(IOMUXC_UART1_TX_DATA_UART1_TX, 0);// 配置UART1_RX引脚电气属性:0x10B0包含下拉、100K上拉、速度等级等配置IOMUXC_SetPinConfig(IOMUXC_UART1_RX_DATA_UART1_RX, 0x10B0);// 配置UART1_TX引脚电气属性:同上IOMUXC_SetPinConfig(IOMUXC_UART1_TX_DATA_UART1_TX, 0x10B0);// 配置UART1_RX引脚复用为UART1接收功能IOMUXC_SetPinMux(IOMUXC_UART1_RX_DATA_UART1_RX, 0);// 关闭UART1(UCR2寄存器的第0位为UART使能位,清零关闭)UART1->UCR2 &= ~(1 << 0);unsigned int t;t = UART1->UCR2;               // 读取当前UCR2寄存器值t |= (1 << 14);                // 使能忽略RTS引脚(硬件流控)t &= ~(1 << 8);                // 禁用奇偶校验t &= ~(1 << 6);                // 选择1个停止位t |= (1 << 5);                 // 使能接收功能t |= (1 << 2);                 // 使能发送功能t |= (1 << 1);                 // 数据位长度设置为8位UART1->UCR2 = t;               // 写入配置后的UCR2值UART1->UCR3 |= (1 << 2);       // 配置UART在停止模式下保持时钟(低功耗相关)UART1->UFCR &= ~(7 << 7);      // 清除原有分频器配置UART1->UFCR |= (5 << 7);       // 设置分频系数,用于波特率计算UART1->UBIR = 999;             // 波特率整数部分配置(根据外部时钟计算)UART1->UBMR = 43402;           // 波特率小数部分配置(9600波特率对应值)UART1->UCR1 |= (1 << 0);       // 使能UART1(启动UART功能)
}/*** @brief 发送一个字节数据* @param ch 要发送的字节*/
void putc(unsigned char ch)
{// 等待发送缓冲区为空(USR2寄存器第3位为1表示可发送)while ((UART1->USR2 & (1 << 3)) == 0);UART1->UTXD = (ch & 0xFF);     // 写入发送寄存器,发送数据
}/*** @brief 发送字符串* @param pStr 要发送的字符串指针(以'\0'结尾)*/
void puts(const char *pStr)
{while (*pStr)                  // 循环发送每个字符直到字符串结束{putc(*pStr++);             // 发送当前字符并移动指针}putc('\n');                    // 发送换行符,完成一行输出
}/*** @brief 接收一个字节数据* @return 接收到的字节*/
unsigned char getc(void)
{// 等待接收缓冲区有数据(USR2寄存器第0位为1表示有数据)while ((UART1->USR2 & (1 << 0)) == 0);return (unsigned char)(UART1->URXD & 0xFF); // 读取接收寄存器并返回
}/*** @brief 异常处理函数(标准库需要,此处空实现)* @param n 异常编号*/
void raise(int n)
{// 预留函数,用于处理程序异常
}

代码主要功能说明:

  1. uart1_init():完成 UART1 的初始化配置,包括引脚复用、电气属性、数据格式(8 位数据位、1 位停止位、无校验)和波特率设置
  2. putc():阻塞式发送单个字节,确保数据正确发送
  3. puts():发送字符串并自动添加换行符
  4. getc():阻塞式接收单个字节,等待数据到来
  5. raise():标准库所需的异常处理函数,此处仅作为占位符

这段代码适用于 NXP IMX6ULL 芯片的 UART1 接口,实现了基本的串口收发功能,可用于调试信息输出或简单的串口通信。

http://www.dtcms.com/a/415100.html

相关文章:

  • Coze源码分析-资源库-删除数据库-后端源码-基础设施/数据存储层
  • 多后端服务器架构解析
  • 四种常用SVC(service)及其与Ingress协作方式
  • C#多线程全家桶:从Thread到async/await
  • 网站备案 论坛甘肃微信网站建设
  • 数模之路获奖总结——数据分析交流(R语言)
  • 网站 后台 数据 下载网站优化软件推荐
  • Java数据结构第二十七期:布隆过滤器,用 “模糊” 换高效的查重黑科技
  • 怎么做质量高的网站如何实现网站建设服务
  • 我的项目开发的一般流程,供交流
  • 做网站实名认证有什么用濮阳市城乡一体化示范区主任
  • InnoDB压缩技术:节省空间提升性能
  • 国任保险携手云轴科技ZStack获评鼎新杯数字化转型应用典型案例
  • 进入网站wordpress配置如何在百度搜到自己的网站
  • 建设银行网站怎么看不见余额专业类网站
  • qq登录网站授权怎么做外贸自建站平台哪个好
  • 红豆杉发展前景与培育技术(英文翻译稿)
  • 虾皮后端一面
  • 网站的新闻模块怎么做公司网络推广营销
  • 自己做刷东西的网站百度地图电脑版网页
  • 【开题答辩全过程】以 spb+疾病风险预警平台的设计与实现为例,包含答辩的问题和答案
  • 北京做百度网站有免费建网站
  • 国外的电商网站这么攻击网站
  • 新手卖家做来赞达网站如何如何用wordpress站群
  • string(1),咕咕咕
  • 网络安全基础--第六课:MySQL基础
  • 技术博客SEO优化终极指南
  • 怎么做淘宝联盟网站推广百度域名怎么注册
  • ftp 网站酒店网站策划书
  • 深度学习之图像分类笔记