GD32E503使用spi,在硬件重启后sck没有波形的问题

[复制链接]
1278|3
 楼主| czq624589971 发表于 2022-3-23 12:13 | 显示全部楼层 |阅读模式
使用芯片:GD32E503vct6,在调试spi时遇到一个比较奇怪的问题,在debug模式和首次下载程序下,spi可以正常工作,但是只要给板子重新上电,则spi的sck一直为低电平,mosi电平正常。spi配置如下:
  1. void LL_Spi_Init(void)
  2. {
  3.     //GPIO CONFIG
  4.     rcu_periph_clock_enable(RCU_GPIOA);
  5.     rcu_periph_clock_enable(RCU_GPIOB);
  6.     rcu_periph_clock_enable(RCU_SPI2);
  7.     //rcu_periph_clock_enable(RCU_AF);

  8.     /* SPI0 GPIO config:SCK/PB3, MISO/PB4, MOSI/PB5 */
  9.     gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_3);
  10.     gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_4);
  11.         //gpio_pin_remap_config(GPIO_SPI0_REMAP,ENABLE);

  12.     spi_parameter_struct spi_init_struct;

  13.     /* SPI0 parameter config */
  14.     spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;
  15.     spi_init_struct.device_mode          = SPI_MASTER;
  16.     spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;
  17.     spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;
  18.     spi_init_struct.nss                  = SPI_NSS_SOFT;
  19.     spi_init_struct.prescale             = SPI_PSC_64;
  20.     spi_init_struct.endian               = SPI_ENDIAN_MSB;
  21.     spi_init(SPI2, &spi_init_struct);
  22.        
  23.         spi_enable(SPI2);
  24. }


数据发送代码:
  1. uint8_t drv_spi_read_write_byte( uint8_t TxByte )
  2. {
  3.         uint8_t l_Data = 0;
  4.         uint16_t l_WaitTime = 0;
  5.        
  6.         while( RESET == spi_i2s_flag_get( SPI2, SPI_FLAG_TBE ) )                //等待发送缓冲区为空
  7.         {
  8.                 if( SPI_WAIT_TIMEOUT == ++l_WaitTime )
  9.                 {
  10.                         break;                        //如果等待超时则退出
  11.                 }
  12.         }
  13.         l_WaitTime = 0;                //重新设置接收等待时间(因为SPI的速度很快,正常情况下在发送完成之后会立即收到数据,等待时间不需要过长)
  14.     spi_i2s_data_transmit(SPI2, TxByte);        //发送数据
  15.        
  16.         while( RESET == spi_i2s_flag_get( SPI2, SPI_FLAG_RBNE ) )                //等待接收缓冲区非空
  17.         {
  18.                 if( SPI_WAIT_TIMEOUT == ++l_WaitTime )
  19.                 {
  20.                         break;                        //如果等待超时则退出
  21.                 }
  22.         }
  23.        
  24.         l_Data = spi_i2s_data_receive(SPI2);        //读取接收数据
  25.        
  26.         return l_Data;                //返回
  27. }


cs:使用的软件spi。

 楼主| czq624589971 发表于 2022-3-23 12:16 | 显示全部楼层
附上sck波形图
微信图片_20220323121512.jpg
微信图片_20220323121516.jpg
 楼主| czq624589971 发表于 2022-3-23 12:18 | 显示全部楼层
按照官方给的文档,重启后感觉自动进入了从机模式。
1648009038(1).jpg
 楼主| czq624589971 发表于 2022-3-23 14:04 | 显示全部楼层
已经解决,PB3和jlink引脚复用了,关闭jlink引脚即可
  1.         //关闭jlink的JDIO和JTDI
  2.     //JTAG-DP 关闭
  3.     //SW-DP 开启
  4.         // AFIO_PCF0 |= (0x2<<23);
  5.         gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP,ENABLE);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

90

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部