Quieeeet 2022-05-18 14:35 采纳率: 0%
浏览 267
已结题

关于GD32E230C8T6的SPI0配置中的问题

和ra-01模块SPI无法通信
static void SpiInit( void )
{    
        rcu_periph_clock_enable(RCU_GPIOA);
        rcu_periph_clock_enable(SPI_CLK);    //PA5,PA6,PA7

    /* SPI0 GPIO config: NSS/PA4 SCK/PA5, MISO/PA6, MOSI/PA7 */
    gpio_af_set(GPIOA, GPIO_AF_0, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6| GPIO_PIN_7);
    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_4| GPIO_PIN_5 | GPIO_PIN_6| GPIO_PIN_7);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4| GPIO_PIN_5 | GPIO_PIN_6| GPIO_PIN_7);
        //gpio_mode_set (GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_6);
        
        spi_parameter_struct  spi_init_struct;
        spi_i2s_deinit(SPI_INTERFACE);
        spi_struct_para_init(&spi_init_struct);
    
        /* SPI0 parameter config */
    spi_init_struct.trans_mode =     SPI_TRANSMODE_FULLDUPLEX;         //SPI在全双工通讯中接收/发送数据
    spi_init_struct.device_mode = SPI_MASTER;;                                            //SPI为主机模式且SWNSS=1
    spi_init_struct.frame_size = SPI_FRAMESIZE_8BIT;;                                //SPI使用8位数据帧格式
    spi_init_struct.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE;    //在SPI为空闲状态时,CLK引脚拉低,且"在第1个时钟跳变沿时开始采集第1位数据"
    spi_init_struct.nss = SPI_NSS_SOFT;                                                            //使用NSS软件模式:NSS电平取决于SWNSS位;
    spi_init_struct.prescale = SPI_PSC_8 ;                                                    //SPI时钟预分频器值为8
    spi_init_struct.endian = SPI_ENDIAN_MSB;;                                                //先发送最高位
    spi_init(SPI_INTERFACE, &spi_init_struct);                                                                //使用spi_init_struct结构参数初始化SPI0    
        spi_enable(SPI_INTERFACE);               //使能SPI0
        //spi_i2s_interrupt_enable(SPI0, SPI_I2S_INT_TBE);
    //spi_i2s_interrupt_enable(SPI0, SPI_I2S_INT_RBNE);
        //nvic_irq_enable(SPI0_IRQn,1);
   
}
void SX1276HALInit( void )
{
    rcu_periph_clock_enable(RCU_GPIOA);
        rcu_periph_clock_enable(RCU_GPIOB);



        gpio_bit_set(GPIOA,GPIO_PIN_4);
        SpiInit();
    
        //配置复位引脚
        gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11);
        gpio_bit_set(GPIOB,GPIO_PIN_11);
   
    // Configure DIO0
    //gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
    //gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11);
    
    // Configure DIO1
    //gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
    //gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11);
        
        // Configure DIO3
    //gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
    //gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11);
        
        // Configure DIO4
    //gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
    //gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11);}
    }
//spi发送和接收函数
uint8_t SpiInOut(uint8_t outData )
{
      uint8_t return_tmp = 0x00;
            /* loop while data register in not emplty */
        while(RESET == spi_i2s_flag_get(SPI0,SPI_FLAG_TBE));
        /* send byte through the SPI1 peripheral */
        spi_i2s_data_transmit(SPI0,outData);
        //printf("%d\n",outData);
            /* wait to receive a byte */
        while(RESET == spi_i2s_flag_get(SPI0,SPI_FLAG_RBNE));  
        /* return the byte read from the SPI bus */
        return_tmp = spi_i2s_data_receive(SPI0);        //此处读不到数据
    return ((uint8_t)(return_tmp & 0xff));
        
}
断点运行发现spi读不到数据 sck初始化使能后一直高电平 miso 一直高电平 mosi 没有电压
我的解答思路和尝试过的方法
和ra-01 正常通信
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 5月26日
    • 创建了问题 5月18日

    悬赏问题

    • ¥15 matlab有关常微分方程的问题求解决
    • ¥15 perl MISA分析p3_in脚本出错
    • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
    • ¥15 ubuntu虚拟机打包apk错误
    • ¥199 rust编程架构设计的方案 有偿
    • ¥15 回答4f系统的像差计算
    • ¥15 java如何提取出pdf里的文字?
    • ¥100 求三轴之间相互配合画圆以及直线的算法
    • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
    • ¥15 名为“Product”的列已属于此 DataTable