如上图所示,总共读取有效数据5个,0x04-0x16,实际读取过程中,第一个CS2低电平读取的数据是CS1有效期间的数据0x12,现在的操作是在读取后面有效的5个数据之前读一次值然后丢掉,再读取5个字节就是想得到的字节了。但是总线上第一个CS2明明返回的就已经是正确的数据了,怎么处理这个问题,是配置的原因么?
单片机型号stm32l011k4t6,SPI使用单线模式,配置如下
- /* SPI1 parameter configuration*/
- hspi1.Instance = SPI1;
- hspi1.Init.Mode = SPI_MODE_MASTER;
- hspi1.Init.Direction = SPI_DIRECTION_1LINE;
- hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
- hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
- hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
- hspi1.Init.NSS = SPI_NSS_SOFT;
- hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
- hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
- hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
- hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
- hspi1.Init.CRCPolynomial = 7;
- if (HAL_SPI_Init(&hspi1) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
读取函数
- uint8_t UCB0SPI_READ(void)
- {
- uint8_t temp=0;
- // Wait to receive a byte
- HAL_SPI_Receive( &hspi1,&temp,1,5000);
- return temp;
- }
发送函数
- void UCB0SPI_WRITE(uint8_t data)
- {
-
- // Send byte through the SPI1 peripheral
- HAL_SPI_Transmit(&hspi1, &data, 1, 5000);
- }
|