【microchip dspic33 系列教程(4)】

microchip dspic33 系列教程(4)

这节讲的是用MCC配置串口。先简介一下串口,再讲讲寄存器,然后就是用MCC来配置。

一:简介

通用异步收发器(Universal Asynchronous Receiver Transmitter,UART)是一种灵活的串行通信外设,用于将PIC®单片机与其他设备(包括计算机和外设)相连接。UART是一个全双工异步通信通道,可用于实现RS-232和RS-485等协议。
UART还支持以下硬件扩展:
• LIN/J2602
• IrDA®
• 直接矩阵架构(Direct Matrix Architecture,DMX)
• 智能卡
UART的主要特性有:
• 全双工或半双工操作
• 最大8字节深的TX和RX先进先出(First-In, First-Out,FIFO)缓冲区
• 8位数据宽度
• 可配置停止位长度
• 流控制
• 自动波特率校准
• 奇偶校验错误、帧错误和缓冲区溢出错误检测
• 地址检测
• 中止(break)字符发送
• 发送和接收极性控制
• 在休眠模式下工作
• 接收同步中止字符中断将器件从休眠模式唤醒
UART简化框图在这里插入图片描述

二:控制寄存器

2-1:UxMODE:UARTx配置寄存器

在这里插入图片描述
bit 15 UARTEN:UART使能位

1 = UART已准备好进行发送和接收
0 = UART状态机、FIFO缓冲区指针和计数器均复位;寄存器可读写

bit 14 未实现:读为0
bit 13 USIDL:UART空闲模式停止位

1 = 当器件进入空闲模式时,模块停止工作
0 = 在空闲模式下模块继续工作

bit 12 WAKE:唤醒使能位

1 = 模块将继续采样UxRX引脚——在下降沿产生中断,在下一个上升沿由硬件将位清零;如果ABAUD置1,则自动波特率检测(Auto-Baud Detection,ABD)将立即开始
0 = 不监视UxRX引脚,也不检测上升沿

bit 11 RXBIMD:接收中止字符中断模式位

1 = 检测到至少23(DMX)/11(异步或LIN/J2602)个低电平位周期时RXBKIF标志置1
0 = 中止字符在至少持续23/11个位周期的低电平阶段后触发低电平到高电平转换时RXBKIF标志置1

bit 10 未实现:读为0
bit 9 BRKOVR:发送中止字符软件改写位改写TX数据线:

1 = 激活TX线(UTXINV = 0时输出0,UTXINV = 1时输出10 = TX线由移位寄存器驱动

bit 8 UTXBRK:UART发送中止字符位(1)

1 = 在下一次发送时发送同步中止字符;完成时由硬件清零
0 = 禁止或已完成同步中止字符的发送

bit 7 BRGH:高波特率选择位

1 = 高速:波特率为baudclk/4
0 = 低速:波特率为baudclk/16

bit 6 ABAUD:自动波特率检测使能位(MOD<3:0> = 1xxx时为只读位)

1 = 使能对下一个字符的波特率测量——需要接收同步字段(55h);完成时由硬件清零
0 = 禁止或已完成波特率测量

bit 5 UTXEN:UART发送使能位

1 = 使能发送——自动波特率检测期间除外
0 = 禁止发送——所有发送计数器、指针和状态机均复位;TX缓冲区未清空,状态位未复位

bit 4 URXEN:UART接收使能位

1 = 使能接收——自动波特率检测期间除外
0 = 禁止接收——所有接收计数器、指针和状态机均复位;RX缓冲区未清空,状态位未复位

bit 3-0 MOD<3:0>:UART模式位

Other = 保留
1111 = 智能卡(2)
1110 = IrDA®(2)
1101 = 保留
1100 = LIN主/从模式
1011 = 仅LIN从模式
1010 = DMX(2)
1001 = 保留
1000 = 保留
0111 = 保留
0110 = 保留
0101 = 保留
0100 = 异步9位UART,带地址检测,第9= 1(表示地址)
0011 = 异步8位UART,不带地址检测,第9位用作偶校验位
0010 = 异步8位UART,不带地址检测,第9位用作奇校验位
0001 = 异步7位UART
0000 = 异步8位UART

2-2 UxMODEH:UARTx配置高位字寄存器

在这里插入图片描述
bit 15 SLPEN:休眠期间运行使能位

1 = UART BRG时钟在休眠模式下运行
0 = UART BRG时钟在休眠模式下关闭

bit 14 ACTIVE:UART运行状态位

1 = UART时钟请求处于活动状态(用户无法更新UxMODE/UxMODEH寄存器)
0 = UART时钟请求未处于活动状态(用户可更新UxMODE/UxMODEH寄存器)

bit 13-12 未实现:读为0
bit 11 BCLKMOD:波特率时钟生成模式选择位

1 = 使用小数波特率生成模式
0 = 使用传统x分频计数器来生成波特率时钟(x = 416,具体取决于BRGH位)

bit 10-9 BCLKSEL<1:0>:波特率时钟源选择位时钟源取决于器件。有关时钟源选择的信息,请参见具体器件数据手册。
bit 8 HALFDPLX:UART半双工选择模式位。

1 = 半双工模式:UxTX发送时驱动为高电平,空闲时驱动为低电平
0 = 全双工模式:当UARTEN和UTXEN均置1时,UxTX始终驱动为高电平

bit 7 RUNOVF:溢出条件期间运行模式位

1 = 当检测到溢出错误(OERR)条件时,RX移位寄存器继续运行以保持与传入RX数据同步;如果
UxRXREG已满,则不会向其传送任何数据(即,不会改写任何UxRXREG数据)
0 = 当检测到溢出错误(OERR)条件时,RX移位寄存器停止接受新数据(传统模式)

bit 6 URXINV:UART接收极性位

1 = RX极性翻转;空闲状态为低电平
0 = 输入不翻转;空闲状态为高电平

bit 5-4 STSEL<1:0>:停止位数选择位

11 = 发送2个停止位,接收时校验1个停止位
10 = 发送2个停止位,接收时校验2个停止位
01 = 发送1.5个停止位,接收时校验1.5个停止位
00 = 发送1个停止位,接收时校验1个停止位

bit 3 C0EN:使能传统校验和(C0)发送和接收位

1 = 校验和模式1(在LIN模式下使用增强型LIN校验和;在所有其他模式下将所有TX/RX字相加)
0 = 校验和模式0(在LIN模式下使用传统LIN校验和;在所有其他模式下不使用)

bit 2 UTXINV:UART发送极性位

1 = TX极性翻转;TX在空闲状态下为低电平
0 = 输出数据不翻转;TX输出在空闲状态下为高电平

bit 1-0 FLO<1:0>:流控制使能位(仅在MOD<3:0> = 0xxx时有效)

11 = 保留
10 = UxRTS-UxDSR(对于TX侧)/UxCTS-UxDTR(对于RX侧)硬件流控制
01 = XON/XOFF软件流控制
00 = 流控制关闭

2-3 UxSTA:UARTx状态寄存器

在这里插入图片描述
bit 15 TXMTIE:发送移位寄存器空中断允许位

1 = 允许中断
0 = 禁止中断

bit 14 PERIE:奇偶校验错误中断允许位

1 = 允许中断
0 = 禁止中断

bit 13 ABDOVE:自动波特率采集中断允许位

1 = 允许中断
0 = 禁止中断

bit 12 CERIE:校验和错误中断允许位

1 = 允许中断
0 = 禁止中断

bit 11 FERIE:帧错误中断允许位

1 = 允许中断
0 = 禁止中断

bit 10 RXBKIE:接收中止字符中断允许位

1 = 允许中断
0 = 禁止中断

bit 9 OERIE:接收缓冲区溢出中断允许位

1 = 允许中断
0 = 禁止中断

bit 8 TXCIE:发送冲突中断允许位

1 = 允许中断
0 = 禁止中断

bit 7 TRMT:发送移位寄存器空中断标志位

1 = 发送移位寄存器(Transmit Shift Register,TSR)为空(如果STPMD = 1,则在最后一个停止位
结束时触发;如果STPMD = 0,则在第一个停止位的中间位置触发)
0 = 发送移位寄存器不为空

bit 6 PERR:奇偶校验错误/接收到地址/转发帧中断标志位
LIN和奇偶校验模式:

1 = 检测到奇偶校验错误
0 = 未检测到奇偶校验错误

地址模式:

1 = 接收到地址
0 = 未检测到地址

所有其他模式:
不使用。
bit 5 ABDOVF:自动波特率采集中断标志位(必须由软件清零)

1 = BRG在自动波特率采集序列期间计满返回(必须由软件清零)
0 = BRG尚未在自动波特率采集序列期间计满返回

bit 4 CERIF:校验和错误中断标志位(必须由软件清零)

1 = 校验和错误
0 = 无校验和错误

bit 3 FERR:帧错误中断标志位

1 = 帧错误:与缓冲区中最顶端字符对应的停止位的电平翻转;通过含有所接收字符的缓冲区传播
0 = 无帧错误

bit 2 RXBKIF:接收中止字符中断标志位(必须由软件清零)

1 = 接收到中止字符
0 = 未检测到中止字符

bit 1 OERR:接收缓冲区溢出中断标志位(必须由软件清零)

1 = 接收缓冲区溢出
0 = 接收缓冲区未溢出

bit 0 TXCIF:发送冲突中断标志位(必须由软件清零)

1 = 发送的字与接收的字不相等
0 = 发送的字与接收的字相等

2-4 UxSTAH:UARTx状态高位字寄存器

在这里插入图片描述
bit 15 未实现:读为0
bit 14-12 UTXISEL<2:0>:UART发送中断选择位

111 = 在缓冲区中剩余1个空字节时设置发送中断
•
•
•
010 = 在缓冲区中有6个或更多空字节时设置发送中断
001 = 在缓冲区中有7个或更多空字节时设置发送中断
000 = 在缓冲区中有8个空字节时设置发送中断;TX缓冲区为空
bit 11 未实现:读为0

bit 10-8 URXISEL<2:0>:UART接收中断选择位

111 = 在缓冲区中有8个字时触发接收中断;RX缓冲区已满
•
•
•
001 = 在缓冲区中有2个或更多字时触发接收中断
000 = 在缓冲区中有1个或更多字时触发接收中断

bit 7 TXWRE:TX写发送错误状态位
LIN和奇偶校验模式:

1 = 当缓冲区已满或P2<8:0> = 0时写入新字节(必须由软件清零)
0 = 无错误

地址检测模式:

1 = 当缓冲区已满时写入新字节,或者当P1x已满时写入P1<8:0>(必须由软件清零)
0 = 无错误

其他模式:

1 = 当缓冲区已满时写入新字节(必须由软件清零)
0 = 无错误

bit 6 STPMD:停止位检测模式位

1 = 在最后一个停止位结束时触发RXIF
0 = 在第一个(或第二个,具体取决于STSEL<1:0>设置)停止位的中间位置触发RXIF

bit 5 UTXBE:UART TX缓冲区空状态位

1 = 发送缓冲区为空;在UTXEN = 0时写入1将复位TX FIFO指针和计数器
0 = 发送缓冲区不为空

bit 4 UTXBF:UART TX缓冲区满状态位

1 = 发送缓冲区已满
0 = 发送缓冲区未满

bit 3 RIDLE:接收空闲位

1 = UART RX线处于空闲状态
0 = UART RX线处于接收状态

bit 2 XON:UART处于XON模式位
仅当FLO<1:0>控制位设置为XON/XOFF模式时有效。

1 = UART已接收到XON
0 = UART尚未接收到XON或已接收到XOFF

bit 1 URXBE:UART RX缓冲区空状态位

1 = 接收缓冲区为空;在URXEN = 0时写入1将复位RX FIFO指针和计数器
0 = 接收缓冲区不为空

bit 0 URXBF:UART RX缓冲区满状态位

1 = 接收缓冲区已满
0 = 接收缓冲区未满

2-5 UxBRG:UARTx波特率寄存器

在这里插入图片描述
bit 15-0 BRG<15:0>:波特率分频比位

2-6 UxBRGH:UARTx波特率高位字寄存器

在这里插入图片描述
bit 15-4 未实现:读为0
bit 3-0 BRG<19:16>:波特率分频比位

2-7 UxRXREG:UARTx接收缓冲区寄存器

在这里插入图片描述
bit 15-8 未实现:读为0
bit 7-0 RXREG<7:0>:接收字符数据bit 7-0

2-8 UxTXREG:UARTx发送缓冲区寄存器

在这里插入图片描述
bit 15 LAST:用于支持智能卡的最后一个字节指示符位
bit 14-8 未实现:读为0
bit 7-0 TXREG<7:0>:发送字符数据bit 7-0 如果缓冲区已满,则对缓冲区的进一步写操作将被忽略

2-9 UxP1:UARTx时序参数1寄存器

在这里插入图片描述
bit 15-9 未实现:读为0
bit 8-0 P1<8:0>:参数1位
DMX TX:
待发送的字节数 – 1(不包括起始码)。
LIN主TX:
待发送的PID(bit<5:0>)。
带地址检测的异步TX:
待发送的ADDR。自动向bit 9插入1(bit<7:0>)。
智能卡模式:
保护时间计数器(Guard Time Counter,GTC)位。该计数器基于周期始终等于1个ETU的位时钟工作
(bit<8:0>)。
其他模式:
不使用

2-10 UxP2:UARTx时序参数2寄存器

在这里插入图片描述
bit 15-9 未实现:读为0
bit 8-0 P2<8:0>:参数2位
DMX RX:
待接收的第一个字节的编号 – 1,不包括起始码(bit<8:0>)。
LIN从TX:
待发送的字节数(bit<7:0>)。
带地址检测的异步RX:
要进行匹配的地址(bit<7:0>)。
智能卡模式:
模块时间计数器(Block Time Counter,BTC)位。该计数器基于周期始终等于1个ETU的位时钟工作
(bit<8:0>)。
其他模式:
不使用

2-11 UxP3:UARTx时序参数3寄存器

在这里插入图片描述
bit 15-0 P3<15:0>:参数3位
DMX RX:
待接收的最后一个字节的编号 – 1,不包括起始码(bit<8:0>)。
LIN从RX:
待接收的字节数(bit<7:0>)。
异步RX:
用于屏蔽UxP2地址位;1 = 使用P2地址位,0 = 屏蔽P2地址位(bit<7:0>)。
智能卡模式:
等待时间计数器(Waiting Time Counter,WTC)位(bit<15:0>)。
其他模式:
不使用。

2-12 UxP3H:UARTx时序参数3高位字寄存器

在这里插入图片描述
bit 15-8 未实现:读为0
bit 7-0 P3<23:16>:参数3高字节位:
智能卡模式:
等待时间计数器(WTC)位(bit<23:16>)。
其他模式:
不使用。

2-13 UxTXCHK:UARTx发送校验和寄存器

在这里插入图片描述
bit 15-8 未实现:读为0
bit 7-0 TXCHK<7:0>:发送校验和位(针对TX字计算)
LIN模式:

C0EN = 1:发送的所有数据 + 加法进位之和,包括PID。
C0EN = 0:发送的所有数据 + 加法进位之和,不包括PID。

LIN从模式:
检测到中止字符时清零。
LIN主/从模式:
检测到中止字符时清零。
其他模式:

C0EN = 1:发送的每个字节 + 加法进位之和。
C0EN = 0:值保持不变。

2-14 UxRXCHK:UARTx接收校验和寄存器

在这里插入图片描述
bit 15-8 未实现:读为0
bit 7-0 RXCHK<7:0>:接收校验和位(针对RX字计算)
LIN模式:

C0EN = 1:接收的所有数据 + 加法进位之和,包括PID。
C0EN = 0:接收的所有数据 + 加法进位之和,不包括PID。

LIN从模式:
检测到中止字符时清零。
LIN主/从模式:
检测到中止字符时清零。
其他模式:

C0EN = 1:接收的每个字节 + 加法进位之和。
C0EN = 0:值保持不变。

2-15 UxSCCON:UARTx智能卡配置高位字寄存器

在这里插入图片描述
bit 15-6 未实现:读为0
bit 5-4 TXRPT<1:0>:重复发送选择位

11 = 将错误字节重复发送410 = 将错误字节重复发送301 = 将错误字节重复发送200 = 将错误字节重复发送1

bit 3 CONV:逻辑约定选择位

1 = 反向逻辑约定
0 = 正向逻辑约定

bit 2 T0PD:T = 0错误处理时的下拉持续时间位

1 = 2个ETU
0 = 1个ETU

bit 1 PRTCL:智能卡协议选择位

1 = T = 1
0 = T = 0

bit 0 未实现:读为0

2-16 UxSCINT:UARTx智能卡中断寄存器

在这里插入图片描述
bit 15-14 未实现:读为0
bit 13 RXRPTIF:重复接收中断标志位

1 = 在接收到同一字符5次(重复发送4次)后,奇偶校验错误仍存在
0 = 标志清零

bit 12 TXRPTIF:重复发送中断标志位

1 = 在通过TXRPT<1:0>配置的最后一次重新发送后检测到线路错误
0 = 标志清零

bit 11 未实现:读为0
bit 10 BTCIF:模块时间计数器中断标志位

1 = 模块时间计数器达到0
0 = 模块时间计数器未达到0

bit 9 WTCIF:等待时间计数器中断标志位

1 = 等待时间计数器达到0
0 = 等待时间计数器未达到0

bit 8 GTCIF:保护时间计数器中断标志位

1 = 保护时间计数器达到0
0 = 保护时间计数器未达到0

bit 7-6 未实现:读为0
bit 5 RXRPTIE:重复接收中断允许位

1 = 在接收到同一字符5次(重复发送4次)后,如果奇偶校验错误仍存在,则调用中断
0 = 禁止中断

bit 4 TXRPTIE:重复发送中断允许位

1 = 如果在通过TXRPT<1:0>配置的最后一次重新发送完成后检测到线路错误,则调用中断
0 = 禁止中断

bit 3 未实现:读为0
bit 2 BTCIE:模块时间计数器中断允许位

1 = 允许模块时间计数器中断
0 = 禁止模块时间计数器中断

bit 1 WTCIE:等待时间计数器中断允许位

1 = 允许等待时间计数器中断
0 = 禁止等待时间计数器中断

bit 0 GTCIE:保护时间计数器中断允许位

1 = 允许保护时间计数器中断
0 = 禁止保护时间计数器中断

2-17 UxINT:UARTx中断寄存器

在这里插入图片描述
bit 15-8 未实现:读为0
bit 7 WUIF:唤醒中断标志位

1 = 当WAKE = 1且RX从1切换为0时置1;触发事件中断(必须由软件清零)
0 = WAKE未使能或已使能,但未发生唤醒事件

bit 6 ABDIF:自动波特率完成中断标志位

1 = 在ABD序列实现最终的10切换时置1;触发事件中断(必须由软件清零)
0 = ABAUD未使能或已使能,但未完成自动波特率

bit 5-3 未实现:读为0
bit 2 ABDIE:自动波特率完成中断允许位

1 = 允许ABDIF设置事件中断
0 = ABDIF不设置事件中断

bit 1-0 未实现:读为0

三 用MCC配置UART

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/94c0901f0d2d4fbeaa90c41e70b8429b.png
在这里插入图片描述
在这里插入图片描述
这节主要讲一个基本的串口配置,在手册里我们能看到还有基于串口的一个LIN协议,还有智能卡协议等,大家有兴趣可以了解下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值