老欧带你玩转单片机(小5带你飞15)
老欧带你玩转单片机(小5带你飞15)Bit 3 – DORn: 数据溢出。数据溢出时 DOR 置位。当接收缓冲器满 ( 包含了两个数据 ),接收移位寄存器又有数据,若此时检测到一个新的起始位,数据溢出就产生了。这一位一直有效直到接收缓冲器(UDRn) 被读取。对 UCSRnA 进行写入时,这一位要写 0。Bit 4 – FEn: 帧错误。如果接收缓冲器接收到的下一个字符有帧错误,即接收缓冲器中的下一个字符的第一个停止位为 0,那么 FE 置位。这一位一直有效直到接收缓冲器 (UDR) 被读取。当接收到的停止位为 1 时, FE 标志为 0。对 UCSRA 进行写入时,这一位要写 0。Bit 7 – RXCn: USART 接收结束。接收缓冲器中有未读出的数据时 RXC 置位,否则清零。接收器禁止时,接收缓冲器被刷新,导致 RXC 清零。 RXC 标志可用来产生接收结束中断。Bit 6 – TXCn: USART 发送结束。发
通用同步和异步串行接收器和转发器 (USART) 是一个高度灵活的串行通讯设备。主要特点为:
还是先来看涉及到的寄存器:
-
UDRn – USART I/O 数据寄存器n
这个其实两个寄存器,其实一个是读一个是写。USART 发送数据缓冲寄存器和 USART 接收数据缓冲寄存器共享相同的 I/O 地址,称为USART 数据寄存器或 UDR。将数据写入 UDR 时实际操作的是发送数据缓冲器存器(TXB),读 UDR 时实际返回的是接收数据缓冲寄存器 (RXB) 的内容。
Bit 7 – RXCn: USART 接收结束。接收缓冲器中有未读出的数据时 RXC 置位,否则清零。接收器禁止时,接收缓冲器被刷新,导致 RXC 清零。 RXC 标志可用来产生接收结束中断。
Bit 6 – TXCn: USART 发送结束。发送移位缓冲器中的数据被送出,且当发送缓冲器 (UDR) 为空时 TXC 置位。执行发送结束中断时 TXC 标志自动清零,也可以通过写 1 进行清除操作。 TXC 标志可用来产生发送结束中断。
Bit 5 – UDREn: USART 数据寄存器空。UDRE标志指出发送缓冲器(UDR)是否准备好接收新数据。 UDRE为1说明缓冲器为空,已准备好进行数据接收。 UDRE标志可用来产生数据寄存器空中断(见对UDRIE位的描述)。复位后 UDRE 置位,表明发送器已经就绪。
Bit 4 – FEn: 帧错误。如果接收缓冲器接收到的下一个字符有帧错误,即接收缓冲器中的下一个字符的第一个停止位为 0,那么 FE 置位。这一位一直有效直到接收缓冲器 (UDR) 被读取。当接收到的停止位为 1 时, FE 标志为 0。对 UCSRA 进行写入时,这一位要写 0。
Bit 3 – DORn: 数据溢出。数据溢出时 DOR 置位。当接收缓冲器满 ( 包含了两个数据 ),接收移位寄存器又有数据,若此时检测到一个新的起始位,数据溢出就产生了。这一位一直有效直到接收缓冲器(UDRn) 被读取。对 UCSRnA 进行写入时,这一位要写 0。
Bit 2 – UPEn: 奇偶校验错误。当奇偶校验使能 (UPMn1 = 1),且接收缓冲器中所接收到的下一个字符有奇偶校验错误时UPE 置位。这一位一直有效直到接收缓冲器 (UDRn) 被读取。对 UCSRnA 进行写入时,这一位要写 0。
Bit 1 – U2Xn: 倍速发送。这一位仅对异步操作有影响。使用同步操作时将此位清零。此位置 1 可将波特率分频因子从 16 降到 8,从而有效的将异步通信模式的传输速率加倍。
Bit 0 – MPCMn: 多处理器通信模式。设置此位将启动多处理器通信模式。 MPCMn 置位后, USART 接收器接收到的那些不包含地址信息的输入帧都将被忽略。发送器不受MPCM设置的影响。
3.UCSRnB – USART 控制和状态寄存器nB
Bit 7 – RXCIEn: 接收结束中断使能。置位后使能 RXCn 中断。当 RXCIEn 为 1,全局中断标志位 SREG 置位, UCSRnA 寄存器的 RXCn 亦为 1 时可以产生 USART 接收结束中断。
Bit 6 – TXCIEn: 发送结束中断使能。置位后使能 TXC 中断。当 TXCIEn 为 1,全局中断标志位 SREG 置位, UCSRnA 寄存器的TXCn 亦为 1 时可以产生 USART 发送结束中断。
Bit 5 – UDRIEn: USART 数据寄存器空中断使能。置位后使能 UDREn 中断。当 UDRIEn 为 1,全局中断标志位 SREG 置位, UCSRnA 寄存器的 UDREn 亦为 1 时可以产生 USART 数据寄存器空中断。
Bit 4 – RXENn: 接收使能。置位后将启动 USART 接收器。 RxDn 引脚的通用端口功能被 USART 功能所取代。禁止接收器将刷新接收缓冲器,并使 FEn、 DORn 及 UPEn 标志无效。
Bit 3 – TXENn: 发送使能。置位后将启动将启动 USART 发送器。 TxDn 引脚的通用端口功能被 USART 功能所取代。TXENn 清零后,只有等到所有的数据发送完成后发送器才能够真正禁止,即发送移位寄存器与发送缓冲寄存器中没有要传送的数据。发送器禁止后, TxDn引脚恢复其通用I/O功能。
Bit 2 – UCSZ2n: 字符长度。UCSZ2n与UCSRnC寄存器的UCSZn1:0结合在一起可以设置数据帧所包含的数据位数(字符长度 )。
Bit 1 – RXB8n: 接收数据位 8n。对 9 位串行帧进行操作时, RXB8 是第 9 个数据位。读取 UDRn包含的低位数据之前首先要读取 RXB8n。
Bit 0 – TXB8n: 发送数据位 8n。对 9 位串行帧进行操作时, TXB8 是第 9 个数据位。写 UDRn 之前首先要对它进行写操作。
4.UCSRnC – USART 控制和状态寄存器nC
Bits 7:6 – UMSELn1:0 USART 模式的选择。见下表:
Bits 5:4 – UPMn1:0: 奇偶校验模式。见下表:
Bit 3 – USBSn: 停止位的选择
Bit 2:1 – UCSZn1:0: 字符长度
Bit 0 – UCPOLn: 时钟极性
UBRRnL and UBRRnH – USART 波特率寄存器
Bit 11:0 – UBRR11:0: USART 波特率寄存器。这个 12 位的寄存器包含了 USART 的波特率信息。其中 UBRRH 包含了 USART 波特率高 4 位, UBRRnL 包含了低 8 位。波特率的改变将造成正在进行的数据传输受到破坏。写UBRRnL 将立即更新波特率分频器。
波特率的计算公式:
atnega328p的晶振频率为:16MHz,故看这样一个表,直接查表设定值就好了。
常用振荡器频率的UBRRn设置示例
总结一下串口使用的方法:
-
初始化。工作模式,帧结构等(UCSRnC)
-
波特率的设置。(UBRRnL UBRRnH)
-
中断的相关设置。(UCSRnB)
-
选择终端号,编写中断服务程序。
更多内容请关注头条号:小5嵌入式