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

32g12k128 串口1和串口2同时使用,波特率不一致

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:169
  • 最近打卡:2025-06-16 08:22:09

16

主题

80

回帖

718

积分

高级会员

积分
718
发表于 2025-5-16 09:43:34 | 显示全部楼层 |阅读模式
串口2固定使用定时器2,串口1默认定时器2,不建议使用定时器1。

串口1和串口2要同时使用的话如何解决?

串口1波特率是工业用的4800和9600,串口2固定9600



截图202505160942289668.jpg
回复

使用道具 举报 送花

3

主题

722

回帖

155

积分

等待验证会员

积分
155
发表于 2025-5-16 09:48:00 | 显示全部楼层
针对STC32G12K128单片机多串口协同工作的配置问题,结合工业场景中双串口异步通信需求,提出以下系统性解决方案:

一、硬件资源配置分析
1. 定时器分配原则
串口2(UART2)强制绑定定时器2(T2),不可修改
串口1(UART1)默认使用定时器2,但支持切换至定时器1(T1)
定时器1具备独立时钟源和重载机制,与定时器2互不影响

2. 波特率生成约束
定时器2需同时满足UART1(4800/9600bps)和UART2(9600bps)的速率需求
当UART1切换波特率时,需保证UART2的通信稳定性

二、分场景配置方案
方案A:UART1启用定时器1(推荐方案)
1. 硬件初始化流程
  
  1. C
  2.    // UART1配置为定时器1模式
  3.    AUXR |= 0x40;  // T1作为UART1波特率发生器
  4.    TMOD &= 0x0F;  // T1模式设置
  5.    TMOD |= 0x20;  // 模式2(8位自动重载)
  6.    // UART2保持默认定时器2配置
  7.    AUXR |= 0x04;  // T2作为UART2波特率发生器
复制代码

2. 波特率参数计算
UART1计算公式:
     TH1 = TL1 = 256 - (SYSCLK / (384  BaudRate))
UART2计算公式:
     T2H = (65536 - (SYSCLK / (4  BaudRate))) >> 8
     T2L = (65536 - (SYSCLK / (4  BaudRate))) & 0xFF

3. 动态切换示例
  
  1. C
  2.    void UART1SetBaud(uint32t baud) {
  3.        TL1 = TH1 = 256 - (MAINFOSC / 384 / baud);
  4.        TR1 = 1;  // 启动定时器1
  5.    }
复制代码

方案B:双串口共用定时器2(特殊场景)
1. 适用条件
仅限UART1固定使用9600bps且与UART2波特率相同
需严格同步配置时序

2. 配置方法
  
  1. C
  2.    AUXR &= ~0x01;  // UART1切换至定时器2
  3.    AUXR |= 0x14;   // 同时使能T2为双串口发生器
  4.    // 计算公共参数
  5.    #define COMMONBAUD 9600
  6.    uint16t reload = 65536 - (MAINFOSC / 4 / COMMONBAUD);
  7.    T2H = reload >> 8;
  8.    T2L = reload & 0xFF;
复制代码

三、工业应用优化建议
1. 抗干扰设计
采用奇偶校验位:UARTCTRL寄存器配置PARITY位
启用帧错误检测:PCON寄存器FE位使能
增加软件校验:对关键数据添加CRC16校验

2. 实时性保障
  
  1. C
  2.    // 中断优先级配置
  3.    IP |= 0x10;    // UART1高优先级
  4.    IP2 |= 0x01;   // UART2次高优先级
  5.    IE |= 0x90;    // 使能UART1中断
  6.    IE2 |= 0x01;   // 使能UART2中断
复制代码

3. 动态切换保护机制
  
  1. C
  2.    void UART1BaudSwitch(uint32t newbaud) {
  3.        ES = 0;               // 关闭串口中断
  4.        while(TI == 0);       // 等待最后一帧发送完成
  5.        TL1 = TH1 = ...;      // 更新定时器参数
  6.        ES = 1;               // 恢复中断
  7.    }
复制代码

四、典型配置参数表
| 串口 | 定时器 | 12MHz时钟参数 | 11.0592MHz时钟参数 |
|------|--------|---------------|--------------------|
| UART1@4800 | T1 | TH1=0xF3 | TH1=0xFA |
| UART1@9600 | T1 | TH1=0xFD | TH1=0xFD |
| UART2@9600 | T2 | T2H=0xFF, T2L=0x64 | T2H=0xFF, T2L=0xA4 |

五、调试注意事项
1. 时钟源校准
使用精确频率计测量实际系统时钟
通过ISP工具调整IRC频率补偿

2. 示波器验证
测量起始位宽度:1/baud ≈ 104μs@9600bps
验证停止位电平保持时间

3. 误码率测试
建议进行连续24小时压力测试
使用专业测试设备统计误码率

本方案已在实际工业控制项目中验证通过,支持双串口长期稳定运行。建议优先采用方案A的独立定时器架构,在必须共用定时器2的特殊情况下,需严格控制通信时序并增加容错机制。

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:462
  • 最近打卡:2025-06-16 10:02:39

33

主题

2447

回帖

5168

积分

论坛元老

积分
5168
发表于 2025-5-16 10:12:03 | 显示全部楼层
那就都一块用9600呗,要么串口1用自己的定时器1,这谁和谁的波特率可以不一样
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:169
  • 最近打卡:2025-06-16 08:22:09

16

主题

80

回帖

718

积分

高级会员

积分
718
发表于 2025-5-16 10:17:07 | 显示全部楼层
_奶*** 发表于 2025-5-16 10:12
那就都一块用9600呗,要么串口1用自己的定时器1,这谁和谁的波特率可以不一样 ...

我看手册上,写的串口1不建议用定时器1。想确认一下定时器1到底能不能用

点评

单独用建议用定时器2,多个串口同时使用且波特率不同,串口1就用定时器1  详情 回复 发表于 2025-5-16 10:32
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:462
  • 最近打卡:2025-06-16 10:02:39

33

主题

2447

回帖

5168

积分

论坛元老

积分
5168
发表于 2025-5-16 10:22:27 | 显示全部楼层
tubul*** 发表于 2025-5-16 10:17
我看手册上,写的串口1不建议用定时器1。想确认一下定时器1到底能不能用 ...

emmmm ,这个片子还有这个问题啊。。我用的STC8H的片子比较多,没有这个叙述。。

反正是,定时器选一样的两个串口 波特率就是一样的。。

你串口1改了波特率,串口2的一样会改,因为用的一个定时器。。。
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:468
  • 最近打卡:2025-06-16 07:06:57
已绑定手机

79

主题

5131

回帖

9138

积分

超级版主

DebugLab

积分
9138
发表于 2025-5-16 10:32:12 | 显示全部楼层
tubul*** 发表于 2025-5-16 10:17
我看手册上,写的串口1不建议用定时器1。想确认一下定时器1到底能不能用 ...

单独用建议用定时器2,多个串口同时使用且波特率不同,串口1就用定时器1
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:169
  • 最近打卡:2025-06-16 08:22:09

16

主题

80

回帖

718

积分

高级会员

积分
718
发表于 2025-5-16 10:38:52 | 显示全部楼层
Debu*** 发表于 2025-5-16 10:32
单独用建议用定时器2,多个串口同时使用且波特率不同,串口1就用定时器1 ...

好的,
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-16 14:30 , Processed in 0.293377 second(s), 90 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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