芯片选用是stc32g12k128,我使用SPI驱动74hc165和hc595,74hc165是读取按键键值,595是输出到LED数码管,muc做主机,硬件是没有问题的,用示波器看过波形,但软件配置不知道哪有问题,而且SPSTAT状态寄存器无法写入值(实例也一样),还有就是在全速运行下寄存器的值不能实时变化(包括变量,寄存器,keil的periodic window updata也勾上了),正常来说我按键按下muc就能收到165发送过来的按键信息,现在就是什么都没有,有没有大佬能看看哪有问题
- void GPIO_config(void)
- {
- P0_MODE_IO_PU(GPIO_Pin_5);
- P0_MODE_IO_PU(GPIO_Pin_6);
- P0_MODE_IO_PU(GPIO_Pin_2);
- P0_MODE_IO_PU(GPIO_Pin_3);
-
- P5_MODE_IO_PU(GPIO_Pin_3);
-
- P2_MODE_IO_PU(GPIO_Pin_1);
- P2_MODE_IO_PU(GPIO_Pin_2);
- P2_MODE_IO_PU(GPIO_Pin_3);
- P2_MODE_IO_PU(GPIO_Pin_4);
- P2_MODE_IO_PU(GPIO_Pin_5);
- // P2_MODE_IN_HIZ(GPIO_Pin_3);
- // P2_MODE_OUT_PP(GPIO_Pin_2);
- // P2_MODE_OUT_PP(GPIO_Pin_4);
- // P2_MODE_OUT_PP(GPIO_Pin_5);
-
- P3_MODE_IO_PU(GPIO_Pin_3);
- P3_MODE_IO_PU(GPIO_Pin_4);
-
- P1_MODE_IO_PU(GPIO_Pin_1);
- P1_MODE_IO_PU(GPIO_Pin_0);
- P1_MODE_IO_PU(GPIO_Pin_4);
- }
-
- void SPI_config(void)
- {
- SPI_InitTypeDef SPI_InitStructure;
- SPI_InitStructure.SPI_Enable = ENABLE; //SPI启动 ENABLE, DISABLE
- SPI_InitStructure.SPI_SSIG = DISABLE; //片选位 ENABLE, DISABLE
- SPI_InitStructure.SPI_FirstBit = SPI_MSB; //移位方向 SPI_MSB, SPI_LSB
- SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //主从选择 SPI_Mode_Master, SPI_Mode_Slave
- SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //时钟极性 SPI_CPOL_High, SPI_CPOL_Low
- SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //时钟相位 SPI_CPHA_1Edge, SPI_CPHA_2Edge
- SPI_InitStructure.SPI_Speed = SPI_Speed_4; //SPI速度 SPI_Speed_4, SPI_Speed_16, SPI_Speed_64, SPI_Speed_128
- SPI_Init(&SPI_InitStructure);
- NVIC_SPI_Init(DISABLE,Priority_0); //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
-
- SPI_SW(SPI_P22_P23_P24_P25); //SPI_P54_P13_P14_P15,SPI_P22_P23_P24_P25,SPI_P54_P40_P41_P43,SPI_P35_P34_P33_P32
- //SPI_SS_2 = 1;
-
- SPSTAT = 0xc0;
- SPI_ClearFlag(); //清除 SPIF和WCOL 标志
- //SPR0 = 0;
- //SPR1 = 0;
- HSPllClkConfig(MCLKSEL_HIRC,PLL_96M,123); //系统时钟选择,PLL时钟选择,时钟分频系数
- HSSPI_Enable();
- }
-
- void main(void)
- {
- WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
- EAXSFR(); //扩展SFR(XFR)访问使能
- CKCON = 0; //提高访问XRAM速度
-
- EA = 1;
- GPIO_config();
- SPI_config();
- //Timer_config();
- //UART_config();
- //RS485_EN = 0;
- //RS485();
- //WDT_CONTR = 0x24;//使能看门狗 溢出时间约为0.5s
- P05 = 1;
-
- m_LoopFlag = 2;
-
- while (1)
- {
- //WDT_CONTR = 0x34;//清除看门狗,否则系统复位
- <blockquote>RCK = 0;
复制代码
|