GD32E230C8T6 SPI0数据读出全为0xFF,求助!

[复制链接]
 楼主| wsdmzz 发表于 2022-6-1 08:51 | 显示全部楼层 |阅读模式
逻辑分析仪数据抓取的是对的
699756296b77c9436d.png
  1. static void SpiInit( void )
  2. {


  3.                 rcu_periph_clock_enable(RCU_GPIOA);
  4.                 rcu_periph_clock_enable(SPI_CLK);    //PA5,PA6,PA7

  5.     /* SPI0 GPIO config: NSS/PA4 SCK/PA5, MISO/PA6, MOSI/PA7 */
  6.     gpio_af_set(GPIOA, GPIO_AF_0, GPIO_PIN_5| GPIO_PIN_7 );
  7.     gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_5 | GPIO_PIN_7);
  8.     gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_7);
  9. //                gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_5 | GPIO_PIN_7);
  10. //                gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_7);
  11.                 gpio_mode_set (GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_6);

  12.                  spi_parameter_struct spi_init_struct;
  13.     /* deinitilize SPI and the parameters */
  14.     spi_i2s_deinit(SPI0);
  15.     spi_struct_para_init(&spi_init_struct);

  16.     /* SPI0 parameter config */
  17.     spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;
  18.     spi_init_struct.device_mode          = SPI_MASTER;
  19.     spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;
  20.     spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;
  21.     spi_init_struct.nss                  = SPI_NSS_SOFT;
  22.     spi_init_struct.prescale             = SPI_PSC_8;
  23.     spi_init_struct.endian               = SPI_ENDIAN_MSB;
  24.     spi_init(SPI0, &spi_init_struct);
  25.                 spi_crc_polynomial_set(SPI0,7);
  26.                 spi_enable(SPI_INTERFACE);                                                                                                               //使能SPI0

  27. }
  28. void SX1276HALInit( void )
  29. {
  30.     rcu_periph_clock_enable(RCU_GPIOA);
  31.                 rcu_periph_clock_enable(RCU_GPIOB);
  32.        
  33.        
  34.                 gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_4);
  35.                 gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4);
  36.                 //CS片选默认拉高
  37.                 gpio_bit_set(GPIOA,GPIO_PIN_4);
  38.                 SpiInit();
  39.        
  40.                 //配置复位引脚
  41.                 gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
  42.     gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11);
  43.                 gpio_bit_reset(GPIOB,GPIO_PIN_11);
  44.    
  45.     // Configure DIO0
  46.     gpio_mode_set(GPIOB,  GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0);
  47.    
  48.    
  49.     // Configure DIO1
  50.    // gpio_mode_set(GPIOB,  GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_2);
  51.     //gpio_input_bit_get(GPIOB, GPIO_PIN_2);
  52.                
  53.                 // Configure DIO3
  54.     //gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
  55.     //gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11);
  56.                
  57.                 // Configure DIO4
  58.     //gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
  59.     //gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11);
  60.         }
  61. //spi发送和接收函数
  62. uint8_t SpiInOut(uint8_t outData )
  63. {
  64. //        uint8_t ret_Data;
  65. //
  66. //        while(RESET == spi_i2s_flag_get(SPI0,SPI_FLAG_TBE))
  67. //        {//读取"SPI发送缓冲区空"标志
  68. //         //等待SPI发送完成
  69. //        }
  70. //
  71. //        spi_i2s_data_transmit(SPI0,outData);
  72. //        //将byte写入"SPI0数据寄存器"
  73. //        while(RESET == spi_i2s_flag_get(SPI0,SPI_FLAG_RBNE))
  74. //        {//读取"SPI接收缓冲区非空"标志
  75. //         //等待SPI接收完成
  76. //        }
  77. //
  78. //        ret_Data = spi_i2s_data_receive(SPI0);
  79. //        //从"SPI数据寄存器"读取数据
  80. // return ret_Data;
  81.     uint16_t tmp;
  82.     while(spi_i2s_flag_get(SPI0, SPI_FLAG_TBE) == RESET);
  83.     spi_i2s_data_transmit(SPI0, outData);
  84.     while(spi_i2s_flag_get(SPI0, SPI_FLAG_RBNE) == RESET);
  85.     tmp = spi_i2s_data_receive(SPI0);
  86.     return ((uint8_t)(tmp & 0xff));

  87. }


sonicll 发表于 2022-6-1 09:01 | 显示全部楼层
MISO的GPIO也要配置成AF模式,这个和F10x系列是不一样的
 楼主| wsdmzz 发表于 2022-6-1 11:17 | 显示全部楼层
sonicll 发表于 2022-6-1 09:01
MISO的GPIO也要配置成AF模式,这个和F10x系列是不一样的

谢谢  终于解决了这个问题  太谢谢了
koala889 发表于 2022-6-3 08:23 | 显示全部楼层
模式配置的问题么
tpgf 发表于 2022-7-1 08:56 | 显示全部楼层
分析仪不错 多少钱啊
aoyi 发表于 2022-7-1 09:08 | 显示全部楼层
还有其他模式的吗
drer 发表于 2022-7-1 09:19 | 显示全部楼层
模式改变之后引脚需要重新初始化吗
kxsi 发表于 2022-7-1 09:29 | 显示全部楼层
在什么情况下选择哪种模式呢
wiba 发表于 2022-7-1 09:37 | 显示全部楼层
手册上有相关的说明吗
coshi 发表于 2022-7-1 10:05 | 显示全部楼层
如果不了解的话只能挨个试试了
lvben5d 发表于 2022-7-1 15:09 | 显示全部楼层
楼主解决没?  波形如果都没错,就是最后接收读出寄存器 那里问题了。  SPI 注意主机模式,CS引脚的控制
buffalo_bill 发表于 2022-7-26 15:43 | 显示全部楼层
lvben5d 发表于 2022-7-1 15:09
楼主解决没?  波形如果都没错,就是最后接收读出寄存器 那里问题了。  SPI 注意主机模式,CS引脚的 ...

你好,我的SPI还没有调通。能请教下吗
lvben5d 发表于 2022-7-27 07:19 | 显示全部楼层
给个邮箱,我发我的GD32E103 SPI代码给你, 其实官网例子是不错的 。   SPI 一般做主机,需要关心下从机支持的SPI模式呢,这个往往容易出错,主频尽量先慢一点,
 楼主| wsdmzz 发表于 2022-8-25 08:28 | 显示全部楼层
tpgf 发表于 2022-7-1 08:56
分析仪不错 多少钱啊

淘宝 300左右
 楼主| wsdmzz 发表于 2022-8-25 08:29 | 显示全部楼层
lvben5d 发表于 2022-7-27 07:19
给个邮箱,我发我的GD32E103 SPI代码给你, 其实官网例子是不错的 。   SPI 一般做主机,需要关心下 ...

谢谢 已经解决
 楼主| wsdmzz 发表于 2022-8-25 08:30 | 显示全部楼层
lvben5d 发表于 2022-7-1 15:09
楼主解决没?  波形如果都没错,就是最后接收读出寄存器 那里问题了。  SPI 注意主机模式,CS引脚的 ...

谢谢 用楼中兄弟的解答 已经解决
小夏天的大西瓜 发表于 2022-11-24 18:01 | 显示全部楼层
楼主怎么解决的,是配置的问题嘛?给大家分享一下
LOVEEVER 发表于 2022-11-24 20:45 | 显示全部楼层

您好!是主从的问题还是配置的问题/?
uytyu 发表于 2022-11-25 10:53 | 显示全部楼层
这个是不是需要上拉电阻呢?              
pmp 发表于 2022-11-25 11:21 | 显示全部楼层
硬件spi可能配置的问题,推荐使用IO口模拟spi吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

29

帖子

0

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