欢迎光临散文网 会员登陆 & 注册

UART 使用常见问题以及注意事项

2023-07-05 10:06 作者:赛元MCU平台  | 我要投稿

赛元芯片的 UART 功能有独立的 UART 与三合一的 UART,芯片内部集成了三个三选 一通用串行接口电路,称为三合一,简称 SSI/USCI,用户可通过寄存器的配置,将 SSI/USCI 配置为 SPI、TWI、UART 中的任意一种通信模式,用户只能同时使用其中一种通信方式。 

本文档包含在使用UART通讯过程中遇到的常见问题以及注意事项,主要有以下内容: 

1、UART 设置及使用注意事项; 

2、SSI/USCI 中的 UART 通讯使用注意事项; 

3、UART 波特率计算方式以及误差大怎样改善; 

4、UART 数据发送不正常通常有哪些原因; 

5、UART 通讯一段时间之后数据出现错误,可能是什么原因; 

6、使用赛元芯片,仿真口与 UART 复用时,仿真时不能仿真 UART 功能; 

具体内容如下: 

1、UART 设置及使用注意事项 

1) 赛元 SC92F 系列的部分 MCU(SC92F735X、SC92F725X、SC92F732X)与传统 的 51 单片机的波特率配置模式相似,使用 UART0 时用定时器 1 做波特率发生器时 需要将 TR1 置 1,但赛元 SC92F 系列的其他型号以及 95F 系列的单片机在使用 UART 时,如果选择 TIMER1 做波特率发生器,定时器 1 必须停止计数,即 TR1=0; 

2) 使用 UART 时需要将其对应的 TX 口设置为输入带上拉模式,保证 TX 口在空闲时 为高电平; 

3) UART0 不可直接发送 SFR 寄存器的值,若要通过 UART0 发出 SFR 的值,请先将 SFR 的值赋值给一个临时变量,再将临变量赋值给 SBUF; 

4) 对于通信,要特别注意通信双方的配合,通信逻辑要特别注意,要做好通信的错误 冗余,不能因为某一次或者是某几次通信错误就导致通信出现终止现象,建议在通 信超过一定时间没有接收到正确的数据后重新启动通信,重新启动通信包括通信相 关的寄存器清零再重新配置,以及通信使用到的一些变量,包含数据缓存数组,以 及计数的相关变量都要进行清零,以保证通信逻辑出错后重新启动通信可以真实使 通信可以在最原始状态开始运行。 

2、SSI/USCI 中的 UART 通讯使用注意事项 

1) USCI 的 UART 发送中断标志 TI 和接收中断标志 RI 在同一个寄存器上,此寄存器 不能位操作,所以在清除 TI 和 RI 时会对整个寄存器进行与操作,这样当 UART 进 行全双工通信时发送和接收中断有可能同时产生,或者是两者之间间隔时间很短, 会出现 TI 或者 RI 被误清除导致中断丢失的风险,因此在全双工通信应用场景中, 通信需要有容错机制,不能因为某次中断丢失就导致通讯崩溃,在发送数据后不能 通过死等发送标志来判断发送是否完成,需要加入超时监测保证在一段时间后可以 退出等待; 

2) 对于通信,要特别注意通信双方的配合,通信逻辑要特别注意,要做好通信的错误 冗余,不能因为某一次或者是某几次通信错误就导致通信出现终止现象,建议在通 信超过一定时间没有接收到正确的数据后重新启动通信,重新启动通信包括通信相 关的寄存器清零再重新配置,以及通信使用到的一些变量,包含数据缓存数组,以 及计数的相关变量都要进行清零,以保证通信逻辑出错后重新启动通信,可以真实 使通信从最原始状态开始运行。 

3、UART 波特率计算方式以及误差大怎样改善 

由于一般情况下波特率和芯片系统主频都不是整数关系,所以计算得到的波特率发生器的 数值都不是整数,但是寄存器的值只能赋整数值,所以大多数情况下波特率都是有偏差的, 在 UART 协议中通信双方允许的最大波特率偏差为 5%,当应用中必须选择某个固定的波 特率,但是计算偏差又比较大时,建议用户使用如下几种方式进行改善: 

1) 建议用户在使用中选择计算偏差较小的波特率,另外在计算波特率时注意一下,采 用四舍五入的方法给波特率发生器赋值; 

2) 将通信双方的波特率尽量往同一个方向偏,以减小通信双方的波特率偏差; 

3) 赛元全系列芯片的 HRC 都是可调的,可以通过调节 HRC 得到精准的波特率,但 是要注意 HRC 的调节不能超过芯片最高主频的 10%,同时 HRC 调节之后,定时 器,PWM 等功能会受到影响,建议在 UART 发送前调节 HRC,发送完成后再将 HRC 调回默认值。 

4、UART 数据发送不正常通常有哪些原因; 

UART 数据发送不正常可以从以下几个方面进行检查: 

1) 检查波特率设置是否正确; 

2) 检查 UART1 中断内部是否存在多个 SSDAT 赋值语句,导致数据错误; 

3) UART 的 TX 脚和 RX 脚所在的 IO 口都需要设置为输入带上拉模式,请确认是否 设置正确; 

4) 检查是否 TI 未清 0,发送数据前把中断关闭了,导致无法进中断,无法执行发送 程序; 

5) TXD 口的 IO 口状态设置是否正确,92F 系列芯片需要设置 IO 口状态为输入带上 拉,95F 系列可以设置为强推输出高或者是输入带上拉模式; 

6) 仿真过程仿真口上的 UART 功能是失效的,查看是否在仿真下测试的; 

7) UART 设置是否正确,主频设置是否正确,建议用示波器查看 UART 波形,观察空 闲状态,起始位,结束位,波特率等信息是否正确; 

8) UART 程序逻辑错误; 

9) 检查芯片供电是否正常。

5、UART 通讯一段时间之后数据出现错误,可能是什么原因 

UART 通讯一段时间之后出错,可能的原因有: 

1) UART 的 TX 脚和 RX 脚所在的 IO 口都需要设置为输入带上拉模式,请确认是否 设置正确; 

2) 如果使用的是三合一的串口功能,需要注意 SSI 的 UART 发送中断标志 TI 和接收 中断标志 RI 在同一个寄存器上,此寄存器不能位操作,所以在清除 TI 和 RI 时会 对整个寄存器进行与操作,这样当 UART 进行全双工通信时发送和接收中断有可 能同时产生,或者是两者之间间隔时间很短,会出现 TI 或者 RI 被误清除导致中断 丢失的风险,因此在全双工通信应用场景中,通信需要有容错机制,不能因为某次 中断丢失就导致通讯崩溃,在发送数据后不能通过死等发送标志来判断发送是否完 成,需要加入超时监测保证在一段时间后可以退出等待或使用 UART0,UART0 的 中断标志位在 SCON 寄存器上,SCON 寄存器可以位操作,所以不存在误清除中 断标志位的问题; 

3) 检查外围电路是否有将通讯脚电平拉高或者拉低的风险,测试出现异常时 TX 脚和 RX 脚的波形,看是否为通讯脚上有干扰导致通讯出错; 

4) 检查程序中是否有其他地方操作了 UART 相关的寄存器,导致 UART 设置改变而 通讯失败; 

5) 检查程序中是否有对 UART 的数据寄存器重复赋值,导致数据错误。 

6、使用赛元芯片,仿真口与 UART 复用时,仿真时不能仿真 UART 功能 

针对 UART 与仿真口复用的应用,在仿真模式下仿真口默认为仿真功能,UART 功能无 法生效,可以用其他方式来调试 UART,例如:可以用有两组 UART 的芯片来调试,先 用另一组 UART 来调试,调试完成后再将 UART 功能移植到仿真口对应的 UART 上面。

UART 使用常见问题以及注意事项的评论 (共 条)

分享到微博请遵守国家法律