使用的RT-Thread系统,在一条spi总线上挂载了4个设备,每个设备用的spi模式不同,偶尔还会用到spi引脚当普通引脚使用。
RTT的SPI设备通信切换机制是每次切到另一个不同的子设备前会根据之前注册时的设备模式进行初始化spi,而GD32的spi问题是在切换几次后发送数据会变乱,一开始以为是RTT的问题,但是一直仿真到spi_i2s_data_transmit这个标准库函数,函数形参都一样,但是出来的波形是对不上的,所以感觉是GD32的spi配置BUG,索性在spi_configure中的gd32_spi_init(spi_device);前加了一个spi_i2s_deinit(spi_periph);用来复位spi设备,完美解决
另一个配置spi在普通模式和spi之间切换的小经验是不能多次调用rt_spi_bus_register或者RTT中关于spi初始化的函数,而是切到普通引脚模式就直接配置引脚为输入输出,切到spi模式直接配置引脚复用为spi就可以,注册一次之后直接用就可以