找回密码
 立即注册
查看: 541|回复: 9

STC8H1K28必须加上串口2初始化,SPI才能正常工作

[复制链接]

1

主题

6

回帖

35

积分

新手上路

积分
35
发表于 2024-6-3 15:14:13 | 显示全部楼层 |阅读模式
void drv_uart_init( )           //11.0592M
{
        //引脚配置 部分51单片机不需要
        //TX配置为输出 RX配置为输入
    S2CON = 0x50;
        AUXR |= 0x04;
    T2L = 0xe0;                                 //65536-11059200/115200/4=0FFE8H
       T2H = 0xfe;
    AUXR |= 0x10;                                //启动定时器
    IE2 |= ES2;                                  //使能串口中断
    EA = 1;
}

void SPI_Init(void)
{
        P_SW1 |= 0x0c;                                                //SPI: SS(P3.5), MOSI(P3.4), MISO(P3.3), SCLK(P3.2)       
//        SPI_NSS = 1;

    SPCTL = 0xd0;                               //使能SPI主机模式
    SPSTAT |= 0xc0;  
}

//#ifdef        __RF24L01_TX_TEST__   
//        drv_uart_init( );          程序中加上这段,SPI无线模块能正常通讯,去掉就不行,函数里面挨个屏蔽少一句都不行
//#endif

后面所有调用串口的都删掉也不行,按道理这两个没关联的,请教下是什么原因

截图202406031504284377.jpg
回复

使用道具 举报 送花

1

主题

6

回帖

35

积分

新手上路

积分
35
发表于 2024-6-3 15:21:05 | 显示全部楼层
         NRF24L01_Init();    //NRF24L01
        ReadNbyte(0,iapeeprom_data,4);
        XD=iapeeprom_data[0];
        TX_ADDRESS[0]= iapeeprom_data[1];
        tmp_buf[0]=iapeeprom_data[2];
        tmp_buf[1]=iapeeprom_data[3];        
      NRF24L01_TX_Mode(); /* ??è?TX?£ê? */
//         drv_delay_ms( 100 );
        while( 1 )        
        {               
                //发送
                WSD_Get();

                if (NRF24L01_TxPacket(tmp_buf) == TX_OK) /* ·¢?í3é1| */
            {

                        }

                PCON = 0x02;                            //MCU进入掉电模式
        }
主程序都在这了,还有IO口初始化没发了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2024-6-3 15:59:36 | 显示全部楼层
主循环里面MCU进入掉电模式后通过什么方式唤醒MCU?
PCON = 0x02;                            //MCU进入掉电模式
回复 支持 反对

使用道具 举报 送花

1

主题

6

回帖

35

积分

新手上路

积分
35
发表于 2024-6-3 16:07:38 | 显示全部楼层
        WKTCL = 0xff;                               //设定掉电唤醒时钟约为1秒钟
    WKTCH = 0x8F;
漏掉了这句没发,完整程序发不了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2024-6-3 16:25:53 | 显示全部楼层
lyl1*** 发表于 2024-6-3 16:07
WKTCL = 0xff;                               //设定掉电唤醒时钟约为1秒钟
    WKTCH = 0x8F;
漏掉了这 ...

PCON = 0x02; 后面要加几个NOP,等待MCU唤醒时钟稳定后再执行有效代码。
EA = 1;开启总中断代码在"drv_uart_init"串口初始化函数里面,项目里还有使用其它中断的吗?
先将休眠指令屏蔽,确保主循环能够执行到SPI收发程序,用示波器测量SPI SCK脚,看看是否有信号产生。
回复 支持 反对

使用道具 举报 送花

1

主题

6

回帖

35

积分

新手上路

积分
35
发表于 2024-6-3 17:18:29 | 显示全部楼层
void        ADC_config(void)
{
        ADC_InitTypeDef                ADC_InitStructure;                //结构定义

        ADC_InitStructure.ADC_SMPduty   = 31;                //ADC 模拟信号采样时间控制, 0~31(注意: SMPDUTY 一定不能设置小于 10)
        ADC_InitStructure.ADC_CsSetup   = 0;
        ADC_InitStructure.ADC_CsHold    = 1;                //ADC 通道选择保持时间控制 0,1(默认),2,3
        ADC_InitStructure.ADC_Speed     = ADC_SPEED_2X16T;                //设置 ADC 工作时钟频率        ADC_SPEED_2X1T~ADC_SPEED_2X16T
        ADC_InitStructure.ADC_AdjResult = ADC_RIGHT_JUSTIFIED;        //ADC结果调整,        ADC_LEFT_JUSTIFIED,ADC_RIGHT_JUSTIFIED
        ADC_Inilize(&ADC_InitStructure);                //初始化
        ADC_PowerControl(DISABLE);                                //ADC电源开关, ENABLE或DISABLE
        NVIC_ADC_Init(DISABLE,Priority_0);                //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
}
ADC样例里面的应该没开吧,非常感谢,我再试试,也就用串口,spi,adc三个模块
回复 支持 反对

使用道具 举报 送花

1

主题

6

回帖

35

积分

新手上路

积分
35
发表于 2024-6-3 17:30:27 | 显示全部楼层
//         ADC_config();
//                WSD_Get();
//                PCON = 0x02;                            //MCU进入掉电模式
其他中断全部屏蔽还是要开串口,SPI才正常,芯片内部是不是有关联啊
回复 支持 反对

使用道具 举报 送花

1

主题

6

回帖

35

积分

新手上路

积分
35
发表于 2024-6-3 17:42:51 | 显示全部楼层
串口开了功耗很大,真是奇怪
回复 支持 反对

使用道具 举报 送花

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

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-6-3 17:58:54 | 显示全部楼层
我觉得你先别管 功耗了,,先把功能实现了,,,再纠结功耗的事情,

串口 和 SPI 没有关系,,都是独立的器件,,大概率你用法不太对
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

1

主题

6

回帖

35

积分

新手上路

积分
35
发表于 2024-6-3 18:47:37 来自手机 | 显示全部楼层
功能都实现了,就差低功耗了,跟用法没关系吧,按道理怎么都不该影响的
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 04:02 , Processed in 0.126827 second(s), 104 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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