MCU: STM8L152C6
环境:STVD
现象:
1、发送正常,可以抓到SCK、SDO的波形正确,也能读取TXE是正确。
2、接收的时候,无论SDI脚是高电平还是低电平,SPI_ReceiveData返回的值都无变化。(STVD的环境也无法监测到DR寄存器的值)
初始化部分:
CLK_PeripheralClockConfig(CLK_Peripheral_SPI1, ENABLE);
GPIO_Init(GPIOB, GPIO_Pin_4, GPIO_Mode_Out_PP_High_Slow); //NSS
GPIO_Init(GPIOB, GPIO_Pin_5, GPIO_Mode_Out_PP_High_Slow); //SCK
GPIO_Init(GPIOB, GPIO_Pin_6, GPIO_Mode_Out_PP_High_Slow); //SDO
GPIO_Init(GPIOB, GPIO_Pin_7, GPIO_Mode_In_PU_No_IT); //SDI
SPI_Init(SPI1, SPI_FirstBit_MSB, SPI_BaudRatePrescaler_16, SPI_Mode_Master,
SPI_CPOL_High, SPI_CPHA_2Edge, SPI_Direction_2Lines_FullDuplex,
SPI_NSS_Soft, 0x07);
SPI_Cmd(SPI1, ENABLE);
复制代码
主函数测试部分:
GPIO_WriteBit(GPIOC, GPIO_Pin_5, 0);
while(!SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE));
SPI_SendData(SPI1, 0x80);
for(u16Temp = 0; u16Temp < 100; u16Temp++)
{
;
}
while(!SPI_GetFlagStatus(SPI1, SPI_FLAG_RXNE));
u8RecData = SPI_ReceiveData(SPI1);
复制代码
在接收部分完成的时候打的断点,无论怎么做,都无法改变u8RecData的值。
|