chenweigang 发表于 2023-3-26 14:28:07

用STM32F429的SPI4驱动W5500,SPI4的时钟没有输出

之前用了STM32F103+W5500可以用调试助手实现回环测试,然后把代码移植到STM32F429的SPI4上不行,用示波器调试发现F4的SPI4时钟线没有信号出来,所以怀疑是配置问题,但是看了很多遍没有结果,望大佬们指点一下:
void gpio_for_w5500_config(void)
{
      SPI_InitTypeDefSPI_InitStructure;
      GPIO_InitTypeDef GPIO_InitStructure;
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI4,ENABLE);
       
        GPIO_PinAFConfig(GPIOE,GPIO_Pin_12,GPIO_AF_SPI4);
        GPIO_PinAFConfig(GPIOE,GPIO_Pin_13,GPIO_AF_SPI4);
        GPIO_PinAFConfig(GPIOE,GPIO_Pin_14,GPIO_AF_SPI4);


      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
      GPIO_Init(GPIOE, &GPIO_InitStructure);

      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//cs
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                       
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;       
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
      GPIO_Init(GPIOE, &GPIO_InitStructure);
        GPIO_SetBits(GPIOE,GPIO_Pin_11);

        //这里只针对SPI口初始化
        RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI4,ENABLE);//复位SPI1
        RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI4,DISABLE);//停止复位SPI1
/* SPI4 configuration */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//SPI_CPOL_LowSPI_CPOL_High
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;//SPI_CPHA_1EdgeSPI_CPHA_2Edge
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI4, &SPI_InitStructure);
SPI_Cmd(SPI4, ENABLE);
       
/*定义RESET引脚*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                                             
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                     
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;                     
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);               
GPIO_SetBits(GPIOE, GPIO_Pin_10);               
/*定义INT引脚*/       
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                                                     
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                  
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;                                     
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOE, &GPIO_InitStructure);                       
}
int main(void)
{
        Config_SystemClock(25, 360, 2, 4);
        systick_init(168);
        bsp_init();
        gpio_for_w5500_config();                                                //初始化MCU相关引脚
        reset_w5500();                                                                                        //硬复位W5500
        set_w5500_mac();                                                                                //配置MAC地址
        set_w5500_ip();                                                                                        //配置IP地址
        socket_buf_init(txsize, rxsize);                //初始化8个Socket的发送接收缓存大小


        while (1)
        {               
                SPI4_ReadWriteByte(0xff);
                delay_ms(200);
        }

}

chenweigang 发表于 2023-3-26 16:19:39

不要沉啊,找不到问题,硬件是好的可以确定,因为我在别人的能用的板子上写入我的代码

1a2b3c 发表于 2023-3-27 08:22:29

F4没有spi输出和你w5500有啥关系嘛
那是你f4没有玩熟悉,先找几个spi例子熟悉了怎么操作spi再去和应用打交道呗,

chenweigang 发表于 2023-3-27 12:16:51

1a2b3c 发表于 2023-3-27 08:22
F4没有spi输出和你w5500有啥关系嘛
那是你f4没有玩熟悉,先找几个spi例子熟悉了怎么操作spi再去和应用打交 ...
(引用自3楼)

对,现在就是找了很多例子,移植过来配置发现出不来时钟信号,能看下吗,我感觉该有的都有了额

1a2b3c 发表于 2023-3-27 14:53:51

没用过这个芯片,
你去那些开发板啥原子正点,啥战舰,本坛就有,拿一个官方的demo看看呗,

chenweigang 发表于 2023-3-27 15:42:45

1a2b3c 发表于 2023-3-27 14:53
没用过这个芯片,
你去那些开发板啥原子正点,啥战舰,本坛就有,拿一个官方的demo看看呗, ...
(引用自5楼)

就是拿的demo改的,非常纳闷

陆小凤之北京 发表于 2023-3-27 17:51:52

void spi_gpio_init(void)
{
        gpio_pin_conf_t spi_conf;
       
       
        _HAL_RCC_GPIOE_CLK_ENABLE();
       
        /* configure GPIOC_PIN_10 for SPI CLK functionality */
        spi_conf.pin = SPI_CLK_PIN;
        spi_conf.mode = GPIO_PIN_ALT_FUN_MODE;
        spi_conf.op_type = GPIO_PIN_OP_TYPE_PUSHPULL;
        spi_conf.pull = GPIO_PIN_PULL_DOWN;
        spi_conf.speed = GPIO_PIN_SPEED_MEDIUM;
       
        hal_gpio_set_alt_function(GPIOE,SPI_CLK_PIN,GPIO_PIN_AF5_SPI4);
        hal_gpio_init(GPIOE, &spi_conf);
       
        /* configure GPIOC_PIN_11 for SPI MISO functionality */
        spi_conf.pin = SPI_MISO_PIN;
        spi_conf.pull = GPIO_PIN_PULL_UP;
        hal_gpio_set_alt_function(GPIOE,SPI_MISO_PIN,GPIO_PIN_AF5_SPI4);
        hal_gpio_init(GPIOE, &spi_conf);
       
        /* configure GPIOC_PIN_12 for SPI MOSI functionality */
        spi_conf.pin = SPI_MOSI_PIN;
        spi_conf.pull = GPIO_PIN_PULL_UP;
        hal_gpio_set_alt_function(GPIOE,SPI_MOSI_PIN,GPIO_PIN_AF5_SPI4);
        hal_gpio_init(GPIOE, &spi_conf);
       
}

陆小凤之北京 发表于 2023-3-27 17:59:41

可以去GITHUB上搜个例子参考一下。

chenweigang 发表于 2023-3-28 09:07:11

陆小凤之北京 发表于 2023-3-27 17:59
可以去GITHUB上搜个例子参考一下。
(引用自8楼)

都查遍了,仔细对比感觉没差别啊,该配置的都有了

陆小凤之北京 发表于 2023-3-28 10:55:44

chenweigang 发表于 2023-3-28 09:07
都查遍了,仔细对比感觉没差别啊,该配置的都有了
(引用自9楼)

SPI时钟没有使能吧。类似下面:


    __HAL_RCC_SPI1_CLK_ENABLE();

chenweigang 发表于 2023-3-28 13:34:45

结题了,配置有个地方不对

ZHW0117 发表于 2023-12-9 11:17:12

chenweigang 发表于 2023-3-28 13:34
结题了,配置有个地方不对
(引用自11楼)

怎么结题的啊 说一下啊
页: [1]
查看完整版本: 用STM32F429的SPI4驱动W5500,SPI4的时钟没有输出