1.首先用IO 口来模拟SPI 通信,正常一点问题也没有。这就排除了硬件的问题。
2. 用STM32CubeMX 直接生成 SPI 代码。配置如下:
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
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_2;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLED;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
hspi1.Init.CRCPolynomial = 7;
hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLED;
HAL_SPI_Init(&hspi1);
3. 程序第一次读取正常。再发送后读取就始终读回的都是00. 用示波器看波形数据都正常。就是读的时候波形是正确的。但就是
set_cs_low;
HAL_SPI_Transmit(&hspi1, &tx_cmd, 1,100);
HAL_SPI_Receive(&hspi1,buffer,1,100);
set_cs_high
buffer 始终为0。感觉读不进数据一样。
有人有遇到这个问题吗?这个不是新库HAL的一个BUG吧。调适了一周多。N种办法都想过(中断,配置,延时,字长。etc。。)。都没有用 |