找回密码
 立即注册
查看: 282|回复: 7

15W408AS串口1使用UART1_SW_P16_P17无法正常打印日志

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-02-12 11:31:19
已绑定手机

7

主题

10

回帖

81

积分

注册会员

积分
81
发表于 2025-2-7 11:02:55 | 显示全部楼层 |阅读模式
我遇到一个问题,就是我现在使用芯片是15W408AS,然后在通过串口工具下载了15系列的库函数,然后直接使用库函数的"06-串口1中断收发"程序,烧录进芯片板子里面能正常通过P30/P31串口打印日志,
当我将切换端口 "COMx_InitStructure.UART_P_SW      = UART1_SW_P16_P17;        //切换端口,   UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17(必须使用内部时钟)"
修改成UART1_SW_P16_P17之后,烧录程序之后,烧录器连接P16/P17引脚测试串口日志打印,没有任何日志数据打印,请问大佬们,这个是啥原因?

P30/P31

P30/P31
截图202502071058503354.jpg

事例工程

事例工程
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2025-2-7 11:11:24 | 显示全部楼层

尝试配置IO工作模式,,我看手册里写的1.6 1.7默认高阻,,,配置成准双向再试一试

image.png

欸 我去,这个是15w4k32s4 的,,,emmm 还是试一试把

参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-02-12 11:31:19
已绑定手机

7

主题

10

回帖

81

积分

注册会员

积分
81
发表于 2025-2-7 11:19:31 | 显示全部楼层
我有将P16/P17配置成准双向,但是还是无法通过P16/P17串口打印日志
截图202502071119119499.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:294
  • 最近打卡:2025-03-06 09:25:41

8

主题

318

回帖

1835

积分

金牌会员

积分
1835
发表于 2025-2-7 11:36:37 | 显示全部楼层
不改引脚能正常通信吗?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-02-12 11:31:19
已绑定手机

7

主题

10

回帖

81

积分

注册会员

积分
81
发表于 2025-2-7 11:45:25 | 显示全部楼层
Lkck*** 发表于 2025-2-7 11:36
不改引脚能正常通信吗?

不修改引脚,直接烧录官方下载的库文件,能正常打印日志数据
回复 支持 反对

使用道具 举报 送花

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

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-2-7 11:58:55 | 显示全部楼层
问题:串口不能输出数据

检查IO是否有问题,关闭UART直接操作IO,示波器或逻辑分析仪测量IO输出信号
检查是否有对应的UART功能和IO切换功能,看数据手册
检查波特率发生器和时钟是否正常,使用时钟分频输出或定时器溢出翻转IO功能测试主时钟频率是否正常,使用定时器溢出翻转IO或打开定时器中断并在中断内操作IO口确定作为波特率发生器的定时器是否正常

阅读数据手册可知,该型号有UART1_3,是P16、P17,该型号(15W408AS)可以实现此功能(注意不能使用IRC15W415AS,见下图)
截图202502071146231412.jpg

设置P16(RXD_3)为准双向并写1(高阻也可,但准双向并写1可以防止悬空受到干扰串口收到乱码),P17(TXD_3)设置为推挽(输出)
截图202502071153459616.jpg

需要正确设置UART_3的IO切换寄存器
截图202502071152457025.jpg

由于未切换脚位时正常,主时钟和波特率发生器不需要再检查了

建议直接操作寄存器测试,避免不熟悉库函数的使用或库函数的兼容性问题导致异常
(不是你自己封装的库函数你不熟悉,各个型号的SFR地址也可能不同,库函数可能不通用,除非你挨个SFR检查一遍,库函数是给你偷懒用的,不好使就别硬试了,还是直接操作寄存器最准确,也可使用库函数配置后再手动设置寄存器覆盖掉SFR中的值)

15系列是老型号,不推荐在新设计中使用或学习,新设计或学习建议使用8051U或8H或32G系列
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-02-12 11:31:19
已绑定手机

7

主题

10

回帖

81

积分

注册会员

积分
81
发表于 2025-2-7 15:59:56 | 显示全部楼层
Debu*** 发表于 2025-2-7 11:58
问题:串口不能输出数据

检查IO是否有问题,关闭UART直接操作IO,示波器或逻辑分析仪测量IO输出信号

你好,我采用您提供的建议使用寄存器操作,发现还是只能P30/P31引脚能正常打印显示日志,切换成P16/P17之后,还是无法利用P16/P17串口打印日志数据



/*************        功能说明        **************

串口1全双工中断方式收发通讯程序。本例程使用22.1184MHZ时钟,如要改变,请修改下面的"定义主时钟"的值并重新编译。

串口设置为:115200,8,n,1.

通过PC向MCU发送数据, MCU收到后通过串口把收到的数据原样返回.

******************************************/

/*************        本地常量声明        **************/
#define MAIN_Fosc                22118400L        //定义主时钟
#define        RX1_Lenth                32                        //串口接收缓冲长度
#define        BaudRate1                9600UL        //选择波特率


#define        Timer1_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 1 重装值, 对应300KHZ
#define        Timer2_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 2 重装值, 对应300KHZ

#include        "STC15Fxxxx.H"


/*************        本地变量声明        **************/
u8        idata RX1_Buffer[RX1_Lenth];        //接收缓冲
u8        TX1_Cnt;        //发送计数
u8        RX1_Cnt;        //接收计数
bit        B_TX1_Busy;        //发送忙标志


/*************        本地函数声明        **************/



/**********************************************/
void main(void)
{
        B_TX1_Busy = 0;
        RX1_Cnt = 0;
        TX1_Cnt = 0;

        S1_8bit();                                //8位数据
//        S1_USE_P30P31();                //UART1 使用P30 P31口        默认
//        S1_USE_P36P37();                //UART1 使用P36 P37口
        S1_USE_P16P17();                //UART1 使用P16 P17口

/*
        TR1 = 0;                        //波特率使用Timer1产生
        AUXR &= ~0x01;                //S1 BRT Use Timer1;
        AUXR |=  (1<<6);        //Timer1 set as 1T mode
        TH1 = (u8)(Timer1_Reload >> 8);
        TL1 = (u8)Timer1_Reload;
        TR1  = 1;
*/

        AUXR &= ~(1<<4);        //Timer stop                波特率使用Timer2产生
        AUXR |= 0x01;                //S1 BRT Use Timer2;
        AUXR |=  (1<<2);        //Timer2 set as 1T mode
        TH2 = (u8)(Timer2_Reload >> 8);
        TL2 = (u8)Timer2_Reload;
        AUXR |=  (1<<4);        //Timer run enable

        REN = 1;        //允许接收
        ES  = 1;        //允许中断

        EA = 1;                //允许全局中断
        P1M0 &= ~0xc0; P1M1 &= ~0xc0; //准双向

        while (1)
        {
                if(TX1_Cnt != RX1_Cnt)                //收到过数据
                {
                        if(!B_TX1_Busy)                //发送空闲
                        {
                                B_TX1_Busy = 1;                //标志发送忙
                                SBUF = RX1_Buffer[TX1_Cnt];        //发一个字节
                                if(++TX1_Cnt >= RX1_Lenth)        TX1_Cnt = 0;        //避免溢出处理
                        }
                }
        }
}

/********************* UART1中断函数************************/
void UART1_int (void) interrupt UART1_VECTOR
{
        if(RI)
        {
                RI = 0;
                RX1_Buffer[RX1_Cnt] = SBUF;                //保存一个字节
                if(++RX1_Cnt >= RX1_Lenth)        RX1_Cnt = 0;        //避免溢出处理
        }

        if(TI)
        {
                TI = 0;
                B_TX1_Busy = 0;                //清除发送忙标志
        }
}

点评

脚位切换的程序呢  详情 回复 发表于 2025-2-7 23:09
回复 支持 反对

使用道具 举报 送花

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

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-2-7 23:09:39 | 显示全部楼层
果果爱*** 发表于 2025-2-7 15:59
你好,我采用您提供的建议使用寄存器操作,发现还是只能P30/P31引脚能正常打印显示日志,切换成P16/P17之后, ...


脚位切换的程序呢

DebugLab
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 13:24 , Processed in 0.148053 second(s), 99 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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