使用芯片:GD32E503vct6,在调试spi时遇到一个比较奇怪的问题,在debug模式和首次下载程序下,spi可以正常工作,但是只要给板子重新上电,则spi的sck一直为低电平,mosi电平正常。spi配置如下:- void LL_Spi_Init(void)
- {
- //GPIO CONFIG
- rcu_periph_clock_enable(RCU_GPIOA);
- rcu_periph_clock_enable(RCU_GPIOB);
- rcu_periph_clock_enable(RCU_SPI2);
- //rcu_periph_clock_enable(RCU_AF);
- /* SPI0 GPIO config:SCK/PB3, MISO/PB4, MOSI/PB5 */
- gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_3);
- gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_4);
- //gpio_pin_remap_config(GPIO_SPI0_REMAP,ENABLE);
- spi_parameter_struct spi_init_struct;
- /* SPI0 parameter config */
- spi_init_struct.trans_mode = SPI_TRANSMODE_FULLDUPLEX;
- spi_init_struct.device_mode = SPI_MASTER;
- spi_init_struct.frame_size = SPI_FRAMESIZE_8BIT;
- spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;
- spi_init_struct.nss = SPI_NSS_SOFT;
- spi_init_struct.prescale = SPI_PSC_64;
- spi_init_struct.endian = SPI_ENDIAN_MSB;
- spi_init(SPI2, &spi_init_struct);
-
- spi_enable(SPI2);
- }
数据发送代码:- uint8_t drv_spi_read_write_byte( uint8_t TxByte )
- {
- uint8_t l_Data = 0;
- uint16_t l_WaitTime = 0;
-
- while( RESET == spi_i2s_flag_get( SPI2, SPI_FLAG_TBE ) ) //等待发送缓冲区为空
- {
- if( SPI_WAIT_TIMEOUT == ++l_WaitTime )
- {
- break; //如果等待超时则退出
- }
- }
- l_WaitTime = 0; //重新设置接收等待时间(因为SPI的速度很快,正常情况下在发送完成之后会立即收到数据,等待时间不需要过长)
- spi_i2s_data_transmit(SPI2, TxByte); //发送数据
-
- while( RESET == spi_i2s_flag_get( SPI2, SPI_FLAG_RBNE ) ) //等待接收缓冲区非空
- {
- if( SPI_WAIT_TIMEOUT == ++l_WaitTime )
- {
- break; //如果等待超时则退出
- }
- }
-
- l_Data = spi_i2s_data_receive(SPI2); //读取接收数据
-
- return l_Data; //返回
- }
cs:使用的软件spi。
|