问答

汇集网友智慧,解决技术难题

21ic问答首页 - GD32F305SPI没有时钟信号

GD32 spi SCK

GD32F305SPI没有时钟信号

white、小白2023-07-20
使用了官方例程,芯片也换过,用示波器就是没检测到sck信号 而且使用这个历程之后到spi0_receive_array[receive_cnt]= spi_i2s_data_receive(spi0_send_array[send_cnt]);这行代码就不能往下执行了,send_n只接收一次
下面是代码
这是SPI的配置spi.c
#include "SPI.h"
#include "gd32f30x_spi.h"
#include "systick.h"


void spi0_init(void)
{
           rcu_periph_clock_enable(RCU_GPIOA);
                 rcu_periph_clock_enable(SPI0);
                 rcu_periph_clock_enable(RCU_AF);
       
        /*SCK->PA5  MISO->PA6  MOSI->PA7 SPI1:MASTER*/
        gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_7);       
        gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
       
        spi_parameter_struct spi_init_struct;

        spi_i2s_deinit(SPI0);
       
  spi_init_struct.trans_mode   = SPI_TRANSMODE_FULLDUPLEX;
  spi_init_struct.device_mode  = SPI_MASTER;
        spi_init_struct.nss          = SPI_NSS_SOFT;
        spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;
        spi_init_struct.frame_size   = SPI_FRAMESIZE_8BIT;
        spi_init_struct.endian       = SPI_ENDIAN_MSB;
        spi_init_struct.prescale     = SPI_PSC_8;
       
        spi_enable(SPI0);   
}


void spi1_init(void)
{
           rcu_periph_clock_enable(RCU_GPIOB);
                 rcu_periph_clock_enable(SPI1);
                 rcu_periph_clock_enable(RCU_AF);
       
        /*SCK->PB13   MISO->PB14  MOSI->PB15   SPI1:SLAVE*/
        gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13 | GPIO_PIN_14);       
        gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_15);
       
        spi_parameter_struct spi_init_struct;

        spi_i2s_deinit(SPI1);
       
  spi_init_struct.trans_mode   = SPI_TRANSMODE_FULLDUPLEX;
  spi_init_struct.device_mode  = SPI_SLAVE;
        spi_init_struct.nss          = SPI_NSS_SOFT;
        spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;
        spi_init_struct.frame_size   = SPI_FRAMESIZE_8BIT;
        spi_init_struct.endian       = SPI_ENDIAN_MSB;


       
        spi_enable(SPI1);   
}
下面是主函数的代码 main.c

#include "gd32f30x.h"
#include "systick.h"
#include "Alarm.h"
#include "SPI.h"

extern void Task_Init(void);
extern void Task_Idle(void);

extern void spi1_init(void);


#define NUM    10

unsigned char spi0_send_array[NUM] = {0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,0x00A8,0x00A9,0x00AA};
unsigned char spi1_send_array[NUM] = {0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,0x00B8,0x00B9,0x00BB};

unsigned char spi0_receive_array[NUM];
unsigned char spi1_receive_array[NUM];
unsigned char send_cnt, receive_cnt;


int main(void)
{

        systick_config();
       
       
       

        spi0_init();
        spi1_init();
       

       
while(send_cnt<NUM)               
{
                while(RESET == spi_i2s_flag_get(SPI0,SPI_FLAG_TBE))
                        spi_i2s_data_transmit(SPI1,spi0_send_array[send_cnt]);
                while(RESET == spi_i2s_flag_get(SPI1,SPI_FLAG_TBE))
                        spi_i2s_data_transmit(SPI1,spi1_send_array[send_cnt]);
                send_cnt++;
               
               
                  while(RESET == spi_i2s_flag_get(SPI0,SPI_FLAG_RBNE))
        spi0_receive_array[receive_cnt]= spi_i2s_data_receive(spi0_send_array[send_cnt]);
                  while(RESET == spi_i2s_flag_get(SPI1,SPI_FLAG_RBNE))
spi1_receive_array[receive_cnt] = spi_i2s_data_receive(spi1_send_array[send_cnt]);
                       
        receive_cnt ++;
    }
          return 0;
}



回答 +关注 14
1857人浏览 4人回答问题 分享 举报
4 个回答

您需要登录后才可以回复 登录 | 注册