找回密码
 立即注册
查看: 24|回复: 4

有没有STC15W4K32S4的4个串口全部都用的范例程序?

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-10-15 15:44:02
已绑定手机

2

主题

0

回帖

12

积分

新手上路

积分
12
发表于 昨天 17:01 | 显示全部楼层 |阅读模式
要用到3个串口,现在串口1,2,能正常,3就没有数据,估计是配置设置不对,只找到了用2个串口的例程
回复

使用道具 举报 送花

3

主题

1880

回帖

608

积分

等待验证会员

积分
608
发表于 昨天 17:03 | 显示全部楼层
关于STC15W4K32S4单片机多串口(特别是串口3)使用的问题,确实是一个在实际开发中较为常见的难点。STC15W4K32S4是一款基于增强型8051内核的高性能、高集成度单片机,支持多达4个全双工异步串口(UART0~UART3),非常适合用于多串口通信场景。但在实际使用中,由于串口3(UART3)默认未启用,且其引脚映射与部分外设复用,容易导致配置不当而无法正常通信。

以下将从硬件配置、寄存器设置、引脚映射、中断处理等角度,提供一个完整的使用串口1、2、3的范例程序,并对常见问题进行分析和建议。

一、硬件说明与引脚配置

STC15W4K32S4的4个串口分别为UART0、UART1、UART2、UART3。其中:
UART0:P3.0(RXD0)、P3.1(TXD0)
UART1:P3.6(RXD1)、P3.7(TXD1)
UART2:P1.2(RXD2)、P1.3(TXD2)
UART3:
默认映射到P0.2(RXD3)、P0.3(TXD3)
也可通过配置映射到其他引脚(如P2.6、P2.7等),但需注意与其它外设的冲突

需要注意的是:UART3默认是关闭的,必须通过寄存器使能;同时其引脚可能与ADC、SPI、PWM等外设复用,使用前需确认是否被其他功能占用。

二、寄存器配置要点

要启用UART3,需配置以下寄存器:

1. AUXR1(辅助寄存器1):设置UART3使能位(S3S)为1
2. S3CON:设置串口3控制寄存器,包括工作模式、接收使能等
3. S3BUF:发送缓冲寄存器
4. BRT:独立波特率发生器寄存器(用于UART2和UART3)
5. AUXR:设置定时器2为波特率发生器模式

三、完整范例程序(串口1、2、3初始化并发送数据)

以下是一个使用串口1、2、3的完整C语言程序示例(Keil C51编译环境):
  1. c
  2. include
  3. // 定义波特率
  4. define BAUDRATE 9600
  5. // 初始化串口1
  6. void UART1Init(void) {
  7.     S1CON = 0x50;          // 8位异步模式,允许接收
  8.     TMOD |= 0x20;          // 定时器1模式2(8位自动重载)
  9.     TH1 = 256 - (11059200 / 12 / 32 / BAUDRATE); // 波特率设置
  10.     TL1 = TH1;
  11.     TR1 = 1;               // 启动定时器1
  12.     ES = 1;                // 使能串口1中断
  13.     EA = 1;
  14. }
  15. // 发送单个字符(串口1)
  16. void UART1SendByte(unsigned char dat) {
  17.     S1BUF = dat;
  18.     while (!TI);          // 等待发送完成
  19.     TI = 0;
  20. }
  21. // 初始化串口2
  22. void UART2Init(void) {
  23.     S2CON = 0x50;          // 8位异步模式,允许接收
  24.     BRT = 256 - (11059200 / 12 / 32 / BAUDRATE); // 使用独立波特率发生器
  25.     AUXR |= 0x14;          // 定时器2为波特率发生器模式,启动定时器2
  26.     ES2 = 1;               // 使能串口2中断
  27. }
  28. // 发送单个字符(串口2)
  29. void UART2SendByte(unsigned char dat) {
  30.     S2BUF = dat;
  31.     while (!(S2CON & 0x40)); // 等待发送完成
  32.     S2CON &= ~0x40;
  33. }
  34. // 初始化串口3
  35. void UART3Init(void) {
  36.     AUXR1 |= 0x40;         // 使能UART3
  37.     S3CON = 0x50;          // 8位异步模式,允许接收
  38.     BRT = 256 - (11059200 / 12 / 32 / BAUDRATE); // 使用独立波特率发生器
  39.     AUXR |= 0x14;          // 定时器2为波特率发生器模式,启动定时器2
  40.     ES3 = 1;               // 使能串口3中断
  41. }
  42. // 发送单个字符(串口3)
  43. void UART3SendByte(unsigned char dat) {
  44.     S3BUF = dat;
  45.     while (!(S3CON & 0x40)); // 等待发送完成
  46.     S3CON &= ~0x40;
  47. }
  48. // 主函数
  49. void main(void) {
  50.     UART1Init();
  51.     UART2Init();
  52.     UART3Init();
  53.     while (1) {
  54.         UART1SendByte('1'); // 发送测试字符
  55.         UART2SendByte('2');
  56.         UART3SendByte('3');
  57.         // 延时1秒
  58.         for (unsigned long i = 0; i < 60000; i++);
  59.     }
  60. }
复制代码

四、常见问题分析与解决建议

1. 串口3无输出,其他串口正常
原因:UART3未启用(AUXR1未置位),或引脚被其他外设占用。
解决:检查AUXR1寄存器是否设置正确;确认P0.2/P0.3是否被其他功能复用。

2. 波特率设置错误
UART2和UART3使用独立波特率发生器(BRT寄存器),需确保其值正确。
可通过公式计算:BRT = 256 - (Fosc / 12 / 32 / BAUDRATE)

3. 中断未使能
若使用中断接收,需分别使能ES2、ES3,并编写对应中断服务函数。

4. 引脚冲突
UART3默认映射到P0.2和P0.3,这两个引脚也可能被ADC、PWM等使用。
可尝试更改UART3的映射引脚(查阅数据手册中的多路复用表)。

五、总结

STC15W4K32S4支持4个串口,但其中UART3需要特别注意配置。本程序展示了如何正确初始化并使用串口1、2、3,确保每个串口都能正常发送数据。如果串口3仍然无法工作,建议重点检查以下几点:
UART3是否启用(AUXR1)
引脚是否被复用
波特率是否正确
中断是否开启(如使用中断方式)

如需更详细的引脚复用说明或中断处理程序,可参考《STC15系列技术手册》或STC官方提供的例程库。

如您需要我进一步提供基于串口3的接收中断处理程序、多串口通信框架,或使用UART3的DMA方式等扩展内容,也欢迎继续提问。

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:211
  • 最近打卡:2025-10-15 08:39:12

16

主题

604

回帖

3349

积分

超级版主

积分
3349
发表于 昨天 17:13 | 显示全部楼层
STC15实验箱4程序.RAR (14.88 MB, 下载次数: 1)

截图202510151713418981.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:559
  • 最近打卡:2025-10-15 07:42:44
已绑定手机

17

主题

768

回帖

2318

积分

金牌会员

积分
2318
发表于 昨天 17:15 | 显示全部楼层
使用官方ISP软件生成即可
截图202510151714596499.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:559
  • 最近打卡:2025-10-15 07:42:44
已绑定手机

17

主题

768

回帖

2318

积分

金牌会员

积分
2318
发表于 昨天 17:16 | 显示全部楼层
生成后把代码复制到你的工程中就可以了
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-10-16 03:41 , Processed in 0.118933 second(s), 73 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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