gd32 spi没有时钟信号,但是mosi输出正常

[复制链接]
3081|8
 楼主| tealer 发表于 2022-4-13 14:23 | 显示全部楼层 |阅读模式
本帖最后由 tealer 于 2022-4-13 14:51 编辑

如题,按照gd官方的例程,spi mosi发送的数据是正确的,但是sck时钟信号在发送和空闲时都一直为高,下面是代码
  1. void spi_config(void)
  2. {
  3.     spi_parameter_struct spi_init_struct;

  4.     /* SPI0 parameter config */
  5.     spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;
  6.     spi_init_struct.device_mode          = SPI_MASTER;
  7.     spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;
  8.     spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE; // spi mode 0
  9.     spi_init_struct.nss                  = SPI_NSS_SOFT;
  10.     spi_init_struct.prescale             = SPI_PSC_256;
  11.     spi_init_struct.endian               = SPI_ENDIAN_MSB;
  12.         
  13.     spi_init(SPI0, &spi_init_struct);
  14. }

  15. void spi_gpio_config(void)
  16. {
  17.     /* SPI0 GPIO config:SCK/PA5, MISO/PA6, MOSI/PA7 */
  18.     gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_7);
  19.     gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
  20.     /* PA4 as NSS */
  21.     gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4);
  22.    
  23. }

  24. void spi_clock_config(void)
  25. {
  26.         rcu_deinit();
  27.         rcu_periph_clock_enable(RCU_GPIOA);
  28.     rcu_periph_clock_enable(SPI0);
  29.     rcu_periph_clock_enable(RCU_AF);
  30. }

  31. void gpioTask2(void* args)
  32. {
  33.         spi_clock_config();
  34.         spi_gpio_config();
  35.         spi_config();
  36.         
  37.         gpio_bit_set(GPIOA, GPIO_PIN_4); // nss high
  38.         
  39.         // spi enable
  40.         spi_enable(SPI0);
  41.         
  42.         gpio_bit_reset(GPIOA, GPIO_PIN_4); // nss low

  43.         // 任务2
  44.         while(1)
  45.         {
  46.                 /* clock freq 120mhz
  47.                  * AHB freq 120mhz
  48.                  * APB1 Freq 60mhz
  49.                  * APB2 freq 120mhz
  50.                 */

  51.                 while(spi_i2s_flag_get(SPI0, SPI_FLAG_TBE) == RESET); // write
  52.                 spi_i2s_data_transmit(SPI0, (uint8_t)0x01);
  53.                
  54.         }

  55.         gpio_bit_set(GPIOA, GPIO_PIN_4); // nss high
  56. }


 楼主| tealer 发表于 2022-4-13 14:51 | 显示全部楼层
已经找到原因了 rcu_periph_clock_enable(RCU_SPI0);写错成了 rcu_periph_clock_enable(SPI0);
tpgf 发表于 2022-5-3 16:49 | 显示全部楼层
用的几线制的啊
aoyi 发表于 2022-5-3 16:56 | 显示全部楼层
硬件连接检查了吗
nawu 发表于 2022-5-3 17:13 | 显示全部楼层
还得确认外部连接有没有问题
zljiu 发表于 2022-5-3 18:00 | 显示全部楼层
mosi信号和预期值一样吗
gwsan 发表于 2022-5-3 18:03 | 显示全部楼层
代码很正常啊
tfqi 发表于 2022-5-3 18:19 | 显示全部楼层
是不是模式设置的不对啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

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