lyl1011 发表于 2024-6-3 15:14:13

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

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

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

lyl1011 发表于 2024-6-3 15:21:05

         NRF24L01_Init();    //NRF24L01
      ReadNbyte(0,iapeeprom_data,4);
      XD=iapeeprom_data;
      TX_ADDRESS= iapeeprom_data;
      tmp_buf=iapeeprom_data;
      tmp_buf=iapeeprom_data;      
      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口初始化没发了

乘风飞扬 发表于 2024-6-3 15:59:36

主循环里面MCU进入掉电模式后通过什么方式唤醒MCU?
PCON = 0x02;                            //MCU进入掉电模式

lyl1011 发表于 2024-6-3 16:07:38

        WKTCL = 0xff;                               //设定掉电唤醒时钟约为1秒钟
    WKTCH = 0x8F;
漏掉了这句没发,完整程序发不了

乘风飞扬 发表于 2024-6-3 16:25:53

lyl1011 发表于 2024-6-3 16:07
WKTCL = 0xff;                               //设定掉电唤醒时钟约为1秒钟
    WKTCH = 0x8F;
漏掉了这 ...

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

lyl1011 发表于 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三个模块

lyl1011 发表于 2024-6-3 17:30:27

//       ADC_config();
//                WSD_Get();
//                PCON = 0x02;                            //MCU进入掉电模式
其他中断全部屏蔽还是要开串口,SPI才正常,芯片内部是不是有关联啊

lyl1011 发表于 2024-6-3 17:42:51

串口开了功耗很大,真是奇怪

_奶咖君_ 发表于 2024-6-3 17:58:54

我觉得你先别管 功耗了,,先把功能实现了,,,再纠结功耗的事情,

串口 和 SPI 没有关系,,都是独立的器件,,大概率你用法不太对

lyl1011 发表于 2024-6-3 18:47:37

功能都实现了,就差低功耗了,跟用法没关系吧,按道理怎么都不该影响的
页: [1]
查看完整版本: STC8H1K28必须加上串口2初始化,SPI才能正常工作