1111 * 2020-01-15 whj4674672 Porting for stm32h7xx
1212 */
1313
14+ #include <rtthread.h>
15+ #include <rtdevice.h>
1416#include "board.h"
1517
1618#ifdef RT_USING_SPI
1719
1820#if defined(BSP_USING_SPI1 ) || defined(BSP_USING_SPI2 ) || defined(BSP_USING_SPI3 ) || defined(BSP_USING_SPI4 ) || defined(BSP_USING_SPI5 ) || defined(BSP_USING_SPI6 )
19- /* this driver can be disabled at menuconfig → RT-Thread Components → Device Drivers */
2021
2122#include "drv_spi.h"
2223#include "drv_config.h"
@@ -278,7 +279,7 @@ static rt_uint32_t spixfer(struct rt_spi_device *device, struct rt_spi_message *
278279 SPI_HandleTypeDef * spi_handle = & spi_drv -> handle ;
279280 struct stm32_hw_spi_cs * cs = device -> parent .user_data ;
280281
281- if (message -> cs_take )
282+ if (message -> cs_take && !( device -> config . mode & RT_SPI_NO_CS ) )
282283 {
283284 HAL_GPIO_WritePin (cs -> GPIOx , cs -> GPIO_Pin , GPIO_PIN_RESET );
284285 }
@@ -333,6 +334,12 @@ static rt_uint32_t spixfer(struct rt_spi_device *device, struct rt_spi_message *
333334 {
334335 state = HAL_SPI_Transmit (spi_handle , (uint8_t * )send_buf , send_length , 1000 );
335336 }
337+
338+ if (message -> cs_release && (device -> config .mode & RT_SPI_3WIRE ))
339+ {
340+ /* release the CS by disable SPI when using 3 wires SPI */
341+ __HAL_SPI_DISABLE (spi_handle );
342+ }
336343 }
337344 else
338345 {
@@ -343,6 +350,8 @@ static rt_uint32_t spixfer(struct rt_spi_device *device, struct rt_spi_message *
343350 }
344351 else
345352 {
353+ /* clear the old error flag */
354+ __HAL_SPI_CLEAR_OVRFLAG (spi_handle );
346355 state = HAL_SPI_Receive (spi_handle , (uint8_t * )recv_buf , send_length , 1000 );
347356 }
348357 }
@@ -364,7 +373,7 @@ static rt_uint32_t spixfer(struct rt_spi_device *device, struct rt_spi_message *
364373 while (HAL_SPI_GetState (spi_handle ) != HAL_SPI_STATE_READY );
365374 }
366375
367- if (message -> cs_release )
376+ if (message -> cs_release && !( device -> config . mode & RT_SPI_NO_CS ) )
368377 {
369378 HAL_GPIO_WritePin (cs -> GPIOx , cs -> GPIO_Pin , GPIO_PIN_SET );
370379 }
0 commit comments