PIC系列-串口通讯模块
1、PIC32参考资源
PIC32系列参考手册 中文版 链接地址:PIC32系列参考手册 第21章 UART 模块
2、串口通讯描述
通用异步收发器模块是 PIC32MX 系列器件提供的串行 I/O 模块之一。
UART 模块的主要特性有:
• 全双工 8 位或 9 位数据传输
• 偶校验、奇校验或无奇偶校验选项 (对于 8 位数据)
• 一个或两个停止位
• 硬件自动波特率特性
• 完全集成的波特率发生器,具有 16 位预分频器
• 当器件工作在 80 MHz 时,波特率范围从 76 bps 至 20 Mbps
• 独立的接收和发送 FIFO 数据缓冲区
• 奇偶校验、帧和缓冲区溢出错误检测
• 支持仅在地址检测 (第 9 位 = 1)时产生中断
• 独立的发送和接收中断
• 用于诊断支持的环回模式
• LIN 1.2 协议支持
下图是UART的简化框图,主要有波特率发生器、异步发送器、异步接收器和IrDA编解码器。
3、寄存器介绍
控制寄存器
每个 UART 模块包含以下特殊功能寄存器
• UxMODE:UARTx 模式寄存器
• UxSTA:UARTx 状态和控制寄存器
• UxTXREG:UARTx 发送寄存器
• UxRXREG:UARTx 接收寄存器
• UxBRG:UARTx 波特率寄存器
每个 UART 模块还具有用于中断控制的相关位
• UxTXIE:发送中断允许控制位
• UxTXIF:发送中断标志状态位
• UxRXIE:接收中断允许控制位
• UxRXIF:接收中断标志状态位
• UxEIE:错误中断允许控制位
• UxEIF:错误中断标志状态位
• UxIP<2:0>:中断优先级控制位
• UxIS<1:0>:中断子优先级控制位
UxMODE :UARTx 模式寄存器
bit 15 ON :UARTx 使能位
1 = 使能 UARTx ; UARTx 根据 UEN<1:0> 和 UTXEN 控制位的定义控制 UARTx 引脚
0 = 禁止 UARTx ;由 PORTx、TRISx 和 LATx 寄存器中的相应位控制所有 UARTx 引脚; UARTx 的功耗最小
bit 14 FRZ :调试异常模式冻结位
1 = 在 CPU 处于调试异常模式时冻结工作
0 = 在 CPU 处于调试异常模式时继续工作
bit 13 SIDL :空闲模式停止位
1 = 在器件进入 Idle(空闲)模式时停止工作
0 = 在 Idle (空闲)模式下继续工作
bit 12 IREN :IrDA 编码器和解码器使能位
1 = 使能 IrDA
0 = 禁止 IrDA
bit 11 RTSMD :UxRTS 引脚模式选择位 (4)
1 = UxRTS 引脚处于单工模式
0 = UxRTS 引脚处于流控制模式
bit 9-8 UEN<1:0> :UARTx 使能位
11 = 使能并使用 UxTX、 UxRX 和 UxBCLK 引脚; UxCTS 引脚由 PORTx 寄存器中的相应位控制
10 = 使能并使用 UxTX、 UxRX、 UxCTS 和 UxRTS 引脚
01 = 使能并使用 UxTX、 UxRX 和 UxRTS 引脚; UxCTS 引脚由 PORTx 寄存器中的相应位控制
00 = 使能并使用UxTX和UxRX引脚;UxCTS和UxRTS/UxBCLK引脚由PORTx寄存器中的相应位控制
bit 7 WAKE :在休眠模式下检测到启动位唤醒使能位
1 = 使能唤醒
0 = 禁止唤醒
bit 6 LPBACK :UARTx 环回模式选择位
1 = 使能环回模式
0 = 禁止环回模式
bit 5 ABAUD :自动波特率使能位
1 = 使能对下一个字符的波特率测量——需要接收同步字符 (0x55);完成时由硬件清零
0 = 禁止波特率测量或测量已完成
bit 4 RXINV :接收极性翻转位
1 = UxRX 的空闲状态为 0
0 = UxTX 的空闲状态为 1
bit 3 BRGH :高波特率使能位
1 = 高速模式——使能 4x 波特率时钟
0 = 标准速度模式——使能 16x 波特率时钟
bit 2-1 PDSEL<1:0> :奇偶校验和数据选择位
11 = 9 位数据,无奇偶校验
10 = 8 位数据,奇校验
01 = 8 位数据,偶校验
00 = 8 位数据,无奇偶校验
bit 0 STSEL :停止选择位
1 = 2 个停止位
0 = 1 个停止位
UxSTA :UARTx 状态和控制寄存器
bit 24 ADM_EN :自动地址检测模式使能位
1 = 使能自动地址检测模式
0 = 禁止自动地址检测模式
bit 23-16 ADDR<7:0> :自动地址掩码位
当 ADM_EN 位为 1 时,该值定义用于自动地址检测的地址字符。
bit 15-14 UTXISEL<1:0> :发送中断模式选择位
对于 UART1 和 UART2 模块:
11 = 保留,不要使用
10 = 当发送缓冲区变为空时产生中断
01 = 当发送完所有字符时产生中断
00 = 当发送缓冲区变为未满 (至少有一个数据空间为空)时产生中断
对于 UART1A、 UART1B、 UART2A、 UART2B、 UART3A 和 UART3B 模块:
11 = 保留,不要使用
10 = 当发送缓冲区为空时产生中断并将中断标志位置为有效
01 = 当发送完所有字符时产生中断并将中断标志位置为有效
00 = 当发送缓冲区至少有一个数据空间为空时产生中断并将中断标志置为有效
bit 13 UTXINV :发送极性翻转位
如果禁止 IrDA 模式 (即, IREN (UxMODE<12>)为 0):
1 = UxTX 的空闲状态为 0
0 = UxTX 的空闲状态为 1
如果使能 IrDA 模式 (即, IREN (UxMODE<12>)为 1):
1 = IrDA 编码的 UxTX 空闲状态为 1
0 = IrDA 编码的 UxTX 空闲状态为 0
bit 12 URXEN :接收器使能位
1 = 使能 UARTx 接收器,由 UARTx 控制 UxRX 引脚 (如果 ON = 1)
0 = 禁止 UARTx 接收器, UARTx 模块忽略 UxRX 引脚。由端口控制 UxRX 引脚。
bit 11 UTXBRK :发送间隔位
1 = 在下次发送时发送间隔字符——启动位后跟随 12 个 0 位,然后是停止位;完成时由硬件清零
0 = 禁止或已完成间隔字符的发送
bit 10 UTXEN :发送使能位
1 = 使能 UARTx 发送器,由 UARTx 控制 UxTX 引脚 (如果 ON = 1)
0 = 禁止 UARTx 发送器,中止所有等待的发送,缓冲区复位。由端口控制 UxTX 引脚。
bit 9 UTXBF :发送缓冲区满状态位 (只读)
1 = 发送缓冲区已满
0 = 发送缓冲区未满,至少还可再写入一个字符
bit 8 TRMT :发送移位寄存器空位 (只读)
1 = 发送移位寄存器为空,同时发送缓冲区为空 (上一次发送已完成)
0 = 发送移位寄存器非空,发送在进行中或在发送缓冲区中排队
bit 7-6 URXISEL<1:0> :接收中断模式选择位
对于 UART1 和 UART2 模块:
11 = 当接收缓冲区变满 (即,有 4 个数据字符)时,中断标志位置 1
10 = 当接收缓冲区 3/4 满 (即,有 3 个数据字符)时,中断标志位置 1
0x = 当接收到一个字符时,中断标志位置 1
对于 UART1A、 UART1B、 UART2A、 UART2B、 UART3A 和 UART3B 模块:
11 = 保留;不要使用
10 = 当接收缓冲区 3/4 满或更满 (即,有 6 个或更多数据字符)时,中断标志位置为有效
01 = 当接收缓冲区 1/2 满或更满 (即,有 4 个或更多数据字符)时,中断标志位置为有效
00 = 当接收缓冲区非空 (即,至少有 1 个数据字符)时,中断标志位置为有效
bit 5 ADDEN :地址字符检测位 (接收数据的 bit 8 = 1)
1 = 使能地址检测模式。如果没有选择 9 位模式,该控制位不起作用。
0 = 禁止地址检测模式
bit 4 RIDLE :接收器空闲位 (只读)
1 = 接收器空闲
0 = 正在接收数据
bit 3 PERR :奇偶校验错误状态位 (只读)
1 = 检测到当前字符的奇偶校验错误
0 = 未检测到奇偶校验错误
bit 2 FERR :帧错误状态位 (只读)
1 = 检测到当前字符的帧错误
0 = 未检测到帧错误
bit 1 OERR :接收缓冲区溢出错误状态位
该位由硬件置 1,且只能用软件清零 (= 0)。清零原来置 1 的 OERR 位将使接收缓冲区和 RSR 复位为空状态。
1 = 接收缓冲区已溢出
0 = 接收缓冲区未溢出
bit 0 URXDA :接收缓冲区数据存在标志位 (只读)
1 = 接收缓冲区中有数据,至少还有一个字符可被读取
0 = 接收缓冲区为空
</