找回密码
 立即注册
查看: 18|回复: 3

主程序调用函数复位原因不明,求助 | 已解决

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-10-09 17:35:45
已绑定手机

6

主题

9

回帖

150

积分

注册会员

积分
150
发表于 昨天 17:35 | 显示全部楼层 |阅读模式
void main(void)
{


    WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXSFR(); //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

    P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
    P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口

    P_SW2 &= ~0x01;                                                //UART2/USART2: RxD2(P1.2), TxD2(P1.3)
    P_SW2 &= ~S2_S;         //UART2 switch to: 0: P1.2 P1.3,  1: P4.2 P4.3  选择 P1.2  1.3
          P_SW2 |= S3_S;       //UART3 switch bit1 to: 0: P0.0 P0.1,  1: P5.0 P5.1
        
         
         
          //DisableEEPROM();
        
    UART1_config(2);    // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer2做波特率.
                printf("设备开机\n");
        
    DMA_Uart1Config(DmaUart1RXBuffer);
                  
                UART2_config()   ; // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer2做波特率.
          DMA_Uart2Config(DmaUart2RXBuffer );

               
               
          wdt_config();               
    RTC_config(); //启动RTC  开发板晶振没有焊,不能用

                init_dev_data(&Dev);

          printf("Dev.Data.addr = %bu\n",Dev.Data.addr);

               
                UART3_config()   ; // 选择波特率, 3: 使用Timer3做波特率, 其它值: 使用Timer2做波特率.
          DMA_Uart3Config(DmaUart3RXBuffer );
               
    EA = 1; //允许总中断

         
         
         
    while (1)
    {

                        
                        clear_wdt();

       uart1_read(&B_RX1_TimeOut); //接收上位机配置信息和打印工作信息。
                         uart2_task(&B_RX2_TimeOut );
                         uart3_read(&RX3_TimeOut);
                         Delay100ms();
                         printf("a\n");
                        
                        // uart3_dma_send(u8 *flag,DmaUart3TXBuffer,8) ;
                        
                        
                  //uart1_dma_send(&DmaTx1Flag,DmaUart1TXBuffer,8) ;
                        //uart2_dma_send(&DmaTx2Flag,DmaUart2TXBuffer,8) ;
      // uart3_dma_send(&DmaTx3Flag,DmaUart3TXBuffer,8) ;
                        
                        
                 //adc_task(&Adc.Data.m2mflag,u16 *buff,u16 len );
        
                        
               
    }
}


//========================================================================

只要调了红色的uart3_read(&RX3_TimeOut);函数,就会打印6次a复位。注释掉就不会。哪怕uart3_read(&RX3_TimeOut);只是空函数,也会复位。附代码,求助



截图202510091735376290.jpg

主板.rar

339.06 KB, 下载次数: 0

回复

使用道具 举报 送花

3

主题

1916

回帖

680

积分

等待验证会员

积分
680
发表于 昨天 17:38 | 显示全部楼层
您好,根据您提供的代码片段和描述的问题“主程序调用函数复位原因不明”,我们可以从以下几个方面进行专业分析与排查建议:

一、问题现象概述

您提到“主程序调用函数复位原因不明”,这通常意味着在调用某个函数时,系统发生了非预期的复位(Reset)。复位的原因可能包括:
硬件复位(如看门狗触发、电源异常、外部复位引脚触发等)
软件复位(如非法地址访问、堆栈溢出、除零错误等)
编译器或链接器配置错误导致程序跑飞
外设配置不当导致异常中断或错误访问

二、代码分析

1. 初始化部分

您在main()函数中执行了以下初始化操作:
  1. c
  2. WTST = 0;  
  3. EAXSFR();
  4. CKCON = 0;
复制代码
WTST = 0;:设置指令延时为0,提升CPU执行速度。此操作在某些MCU中可能影响外设时序,请确认是否与后续外设(如UART)配置兼容。
EAXSFR();:扩展寄存器访问使能,需确保该函数实现正确,且调用时机合适。
CKCON = 0;:调整访问XRAM速度,需确认是否与当前系统时钟配置匹配。

2. 端口配置
  1. c
  2. P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
  3. ...
  4. P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
复制代码
所有端口均设为准双向口,若后续程序中有对端口的特殊操作(如推挽输出、开漏输出),需注意配置冲突。

3. UART切换配置
  1. c
  2. PSW2 &= ~0x01;                                               
  3. PSW2 &= ~S2S;         
  4. PSW2 |= S3S;
复制代码
这部分代码用于切换UART2和UART3的引脚映射。需要注意:
是否定义了S2S和S3S宏?
是否在操作前对PSW2寄存器进行了正确的初始化或备份?
是否存在对PSW2的位操作冲突?

4. UART1配置函数调用
  1. c
  2. UART1config(2);
复制代码
此函数未完整显示,但传入参数为2。需确认该函数是否对系统时钟、波特率、中断等进行了配置。
若函数内部存在错误配置(如无效寄存器访问、除零错误、非法指针引用等),可能导致系统异常复位。

三、复位原因排查建议

1. 检查复位源寄存器

大多数MCU芯片(如STC系列、国产8051增强型)都提供了复位源寄存器(如RSTSRC、PCON、SFR等),可以读取复位原因:

```c
unsigned char resetcause = PCON;
if (resetcause & (1

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

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-10-09 17:35:45
已绑定手机

6

主题

9

回帖

150

积分

注册会员

积分
150
发表于 昨天 18:55 | 显示全部楼层
补充 芯片为AI8051U-34K64   , 主频 40Mhz
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-10-09 17:35:45
已绑定手机

6

主题

9

回帖

150

积分

注册会员

积分
150
发表于 昨天 19:30 | 显示全部楼层
rtc初始化问题,已解决
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-10-10 13:01 , Processed in 0.128890 second(s), 67 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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