找回密码
 立即注册
查看: 69|回复: 6

8H系列如何做串口校验可调

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-04-18 09:11:23
已绑定手机

1

主题

0

回帖

9

积分

新手上路

积分
9
发表于 2025-4-18 09:11:23 来自手机 | 显示全部楼层 |阅读模式
在使用串口时有时候需要匹配其他设备,如何能做到串口的校验可调,停止位选择1位或者2位
回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-18 09:12:00 | 显示全部楼层
在使用STC8H系列单片机进行串口通信时,校验位和停止位的配置是确保数据可靠传输的重要参数。以下是如何在STC8H系列中实现串口校验可调以及停止位选择的详细步骤。

1. 串口初始化配置

首先,需要对串口进行初始化配置。STC8H系列单片机通常使用UART模块进行串口通信。以下是一个基本的串口初始化代码示例:
  1. c
  2. void UARTInit(void) {
  3.     SCON = 0x50;        // 8位数据位,1位停止位,无校验位
  4.     PCON |= 0x80;       // 波特率加倍
  5.     TMOD &= 0x0F;       // 清除定时器1模式位
  6.     TMOD |= 0x20;       // 设置定时器1为8位自动重装模式
  7.     TH1 = 0xFD;         // 设置波特率为9600
  8.     TL1 = 0xFD;
  9.     TR1 = 1;            // 启动定时器1
  10.     ES = 1;             // 使能串口中断
  11.     EA = 1;             // 使能全局中断
  12. }
复制代码

2. 校验位配置

STC8H系列单片机支持多种校验位模式,包括无校验、奇校验和偶校验。校验位的配置通过SCON寄存器的SM0和SM1位来实现。
无校验:SM0 = 0, SM1 = 0
奇校验:SM0 = 1, SM1 = 0
偶校验:SM0 = 1, SM1 = 1

以下是一个根据用户输入配置校验位的示例代码:
  1. c
  2. void UARTSetParity(char parity) {
  3.     switch (parity) {
  4.         case 'N':  // 无校验
  5.             SCON &= ~0x30;  // SM0 = 0, SM1 = 0
  6.             break;
  7.         case 'O':  // 奇校验
  8.             SCON &= ~0x20;  // SM0 = 1, SM1 = 0
  9.             SCON |= 0x10;
  10.             break;
  11.         case 'E':  // 偶校验
  12.             SCON |= 0x30;   // SM0 = 1, SM1 = 1
  13.             break;
  14.         default:
  15.             // 默认无校验
  16.             SCON &= ~0x30;
  17.             break;
  18.     }
  19. }
复制代码

3. 停止位配置

STC8H系列单片机支持1位或2位停止位。停止位的配置通过SCON寄存器的SM2位来实现。
1位停止位:SM2 = 0
2位停止位:SM2 = 1

以下是一个根据用户输入配置停止位的示例代码:
  1. c
  2. void UARTSetStopBits(char stopBits) {
  3.     if (stopBits == 2) {
  4.         SCON |= 0x04;  // SM2 = 1,2位停止位
  5.     } else {
  6.         SCON &= ~0x04; // SM2 = 0,1位停止位
  7.     }
  8. }
复制代码

4. 综合应用

在实际应用中,可以根据需要动态调整校验位和停止位。以下是一个综合示例,展示如何根据用户输入配置串口参数:
  1. c
  2. void UARTConfig(char parity, char stopBits) {
  3.     UARTSetParity(parity);
  4.     UARTSetStopBits(stopBits);
  5. }
  6. int main(void) {
  7.     UARTInit();
  8.     UARTConfig('E', 2);  // 配置为偶校验,2位停止位
  9.     while (1) {
  10.         // 主循环
  11.     }
  12. }
复制代码

5. 注意事项
波特率设置:波特率的设置需要根据实际需求进行调整,确保与通信设备一致。
中断处理:如果使用中断方式进行数据接收,需要在中断服务程序中处理接收到的数据。
硬件连接:确保硬件连接正确,包括TX、RX、GND等引脚的连接。

通过以上步骤,您可以在STC8H系列单片机中实现串口校验可调以及停止位的选择,从而满足不同设备的通信需求。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-18 09:12:00 | 显示全部楼层
在STC8H系列单片机中,串口通信的校验位和停止位配置是确保数据可靠传输的重要环节。以下是如何实现串口校验可调以及停止位选择的详细步骤和方法。

1. 串口校验位配置
串口通信中的校验位用于检测数据传输过程中是否出现错误。STC8H系列单片机支持多种校验模式,包括无校验、奇校验和偶校验。校验位的配置主要通过设置相关寄存器来实现。

1.1 寄存器配置
STC8H系列单片机的串口配置寄存器通常包括SCON(串口控制寄存器)和PCON(电源控制寄存器)。具体配置步骤如下:
SCON寄存器:用于设置串口的工作模式和校验位。
SM0和SM1位:用于选择串口的工作模式。
SM2位:多机通信控制位。
REN位:接收使能位。
TB8和RB8位:用于校验位的发送和接收。
PCON寄存器:用于设置波特率加倍位和校验位。
SMOD位:波特率加倍位。
SMOD0位:用于选择校验模式。

1.2 校验位设置
通过设置SCON和PCON寄存器,可以实现不同的校验模式:
无校验:将SMOD0位清零,TB8和RB8位不用于校验。
奇校验:将SMOD0位置1,TB8和RB8位用于奇校验。
偶校验:将SMOD0位置1,TB8和RB8位用于偶校验。

2. 停止位配置
停止位用于标识一个数据帧的结束。STC8H系列单片机支持1位和2位停止位。停止位的配置同样通过设置SCON寄存器来实现。

2.1 寄存器配置
SCON寄存器:SM0和SM1位用于选择停止位的长度。
SM0和SM1位设置为00或01时,选择1位停止位。
SM0和SM1位设置为10时,选择2位停止位。

2.2 停止位设置
通过设置SCON寄存器的SM0和SM1位,可以实现不同的停止位长度:
1位停止位:将SM0和SM1位设置为00或01。
2位停止位:将SM0和SM1位设置为10。

3. 实现串口校验可调和停止位选择
在实际应用中,可以通过软件动态调整串口的校验位和停止位。以下是一个示例代码,展示如何实现串口校验可调和停止位选择:
  1. c
  2. include
  3. void UARTInit(unsigned char baudrate, unsigned char parity, unsigned char stopbits) {
  4.     // 设置波特率
  5.     SCON = 0x50; // 8位数据位,1位停止位,无校验
  6.     PCON |= 0x80; // 波特率加倍
  7.     TH1 = baudrate; // 设置波特率
  8.     TL1 = baudrate;
  9.     TR1 = 1; // 启动定时器1
  10.     // 设置校验位
  11.     if (parity == 1) { // 奇校验
  12.         PCON |= 0x40; // 设置SMOD0位
  13.         SCON |= 0x20; // 设置TB8位
  14.     } else if (parity == 2) { // 偶校验
  15.         PCON |= 0x40; // 设置SMOD0位
  16.         SCON &= ~0x20; // 清除TB8位
  17.     } else { // 无校验
  18.         PCON &= ~0x40; // 清除SMOD0位
  19.     }
  20.     // 设置停止位
  21.     if (stopbits == 2) { // 2位停止位
  22.         SCON |= 0x10; // 设置SM0位
  23.     } else { // 1位停止位
  24.         SCON &= ~0x10; // 清除SM0位
  25.     }
  26.     ES = 1; // 使能串口中断
  27.     EA = 1; // 使能全局中断
  28. }
  29. void main() {
  30.     UARTInit(0xFD, 1, 1); // 初始化串口,波特率9600,奇校验,1位停止位
  31.     while (1) {
  32.         // 主循环
  33.     }
  34. }
复制代码

4. 总结
通过合理配置SCON和PCON寄存器,STC8H系列单片机可以实现串口校验可调和停止位选择。在实际应用中,可以根据具体需求动态调整这些参数,以确保串口通信的可靠性和兼容性。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-4-18 09:32:58 | 显示全部楼层
直接的串口外设通讯还是USB-CDC转串口通讯?

USB-CDC转串口通讯有自适应波特率和串口配置的范例

直接的串口外设通讯,是不是可以自己拟定几条指令切换不同配置。
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:32
  • 最近打卡:2025-04-30 10:59:33

25

主题

1154

回帖

2391

积分

超级版主

积分
2391
发表于 2025-4-18 10:03:38 | 显示全部楼层
【新提醒】USB CDC的波特率是自适应的吗? - USB:USB-CDC虚拟串口/就是串口,一箭双雕之USB转双串口,[鼠标+键盘]的HID复合设备 国芯技术交流网站 - AI32位8051交流社区  https://www.stcaimcu.com/forum.p ... E7%8E%87&page=1
STC官网:https://www.stcai.com/
QQ:2593903262
微信号:18106296598
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-4-18 11:22:13 | 显示全部楼层
硬件校验(部分型号支持):

  1. //        SCON=0x50;                //设置UART1模式为8位数据可变波特率
  2. //        T2H=BRT>>8;                //设置UART1波特率
  3. //        T2L=BRT;                //设置UART1波特率
  4. //        AUXR|=T2R;                //打开定时器2
  5. //        ES=1;                        //启用UART1中断
  6.         SCON=0xD0;                //设置UART1模式为9位数据可变波特率
  7.         USARTCR2=0x04;        //使能自动校验位,偶校验
  8.         T2H=BRT>>8;                //设置UART1波特率
  9.         T2L=BRT;                //设置UART1波特率
  10.         AUXR|=T2R;                //打开定时器2
  11.         ES=1;                        //启用UART1中断
复制代码


DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2025-4-18 20:20:14 | 显示全部楼层
停止位选择1位或者2位

===停止位要2位,那就发送完,加个延时再发送
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 04:23 , Processed in 0.121235 second(s), 82 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表