OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2144|回复: 3

w5500不能读取寄存器(002E)的数据

[复制链接]

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2017-9-13
在线时间
18 小时
发表于 2022-8-11 17:43:17 | 显示全部楼层 |阅读模式
1金钱
#include "stm32f10x.h"
#include "stm32f10x_spi.h"       

unsigned char ly_Qtemp;
void Delay(unsigned int delay_ms)
{
        u32 i=0;
        for(;i<delay_ms;i++);
}
void RCC_Configuration(void)
{
  ErrorStatus HSEStartUpStatus;               //ía2&#191;&#184;&#223;&#203;ùê±&#214;ó(HSE)μ&#196;1¤×÷×′ì&#172;±&#228;á&#191;

  RCC_DeInit();                               //&#189;&#171;&#203;ùóDó&#235;ê±&#214;ó&#207;à1&#216;μ&#196;&#188;&#196;′&#230;&#198;÷éè&#214;&#195;&#206;a&#196;&#172;è&#207;&#214;μ
  RCC_HSEConfig(RCC_HSE_ON);                  //&#198;&#244;&#182;ˉía2&#191;&#184;&#223;&#203;ùê±&#214;óHSE
  HSEStartUpStatus = RCC_WaitForHSEStartUp(); //μè′yía2&#191;&#184;&#223;&#203;ùê±&#214;ó(HSE)&#206;è&#182;¨

  if(SUCCESS == HSEStartUpStatus)             //è&#231;1&#251;ía2&#191;&#184;&#223;&#203;ùê±&#214;óò&#209;&#190;-&#206;è&#182;¨
  {
    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Flashéè&#214;&#195;
    /* Flash 2 wait state */
    FLASH_SetLatency(FLASH_Latency_2);


    RCC_HCLKConfig(RCC_SYSCLK_Div1); //éè&#214;&#195;AHBê±&#214;óμèóú&#207;μí3ê±&#214;ó(1·&#214;&#198;μ)/72MHZ
    RCC_PCLK2Config(RCC_HCLK_Div1);  //éè&#214;&#195;APB2ê±&#214;óoíHCLKê±&#214;ó&#207;àμè/72MHz(×&#238;′ó&#206;a72MHz)
    RCC_PCLK1Config(RCC_HCLK_Div2);  //éè&#214;&#195;APB1ê±&#214;óê&#199;HCLKê±&#214;óμ&#196;2·&#214;&#198;μ/36MHz(×&#238;′ó&#206;a36MHz)

#ifndef STM32F10X_CL                 //è&#231;1&#251;ê1ó&#195;μ&#196;2&#187;ê&#199;STM32F107x&#187;òSTM32F105x&#207;μáDMCU,PLLò&#212;&#207;&#194;&#197;&#228;&#214;&#195;  
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //PLLCLK = 8MHz * 9 = 72 MHz
#else                                //è&#231;1&#251;ê1ó&#195;μ&#196;ê&#199;STM32F107x&#187;òSTM32F105x&#207;μáDMCU,PLLò&#212;&#207;&#194;&#197;&#228;&#214;&#195;
    /***** &#197;&#228;&#214;&#195LLx *****/
    /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */
    RCC_PREDIV2Config(RCC_PREDIV2_Div5);
    RCC_PLL2Config(RCC_PLL2Mul_8);

    RCC_PLL2Cmd(ENABLE); //ê1&#196;üPLL2
    while (RCC_GetFlagStatus(RCC_FLAG_PLL2RDY) == RESET);//μè′yPLL2&#206;è&#182;¨

    /* PLL configuration: PLLCLK = (PLL2 / 5) * 9 = 72 MHz */
    RCC_PREDIV1Config(RCC_PREDIV1_Source_PLL2, RCC_PREDIV1_Div5);
    RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9);
#endif

    RCC_PLLCmd(ENABLE); //ê1&#196;üPLL
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //μè′yPLL&#206;è&#182;¨

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);          //éè&#214;&#195;&#207;μí3ê±&#214;óμ&#196;ê±&#214;ó&#212;′&#206;aPLL

    while(RCC_GetSYSCLKSource() != 0x08);               //&#188;ì2é&#207;μí3μ&#196;ê±&#214;ó&#212;′ê&#199;·&#241;ê&#199LL
    RCC_ClockSecuritySystemCmd(ENABLE);                 //ê1&#196;ü&#207;μí3°2è&#171;ê±&#214;ó

        /* Enable peripheral clocks --------------------------------------------------*/
          /* Enable I2C1 and I2C1 clock */
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

          /* Enable GPIOA GPIOB SPI1 and USART1 clocks */
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB
                                        | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD
                                        | RCC_APB2Periph_AFIO, ENABLE);   
  }
}
void SPI_Configuration(void)
{
        GPIO_InitTypeDef         GPIO_InitStructure;
        SPI_InitTypeDef           SPI_InitStructure;          

          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1 | RCC_APB2Periph_GPIOC, ENABLE  );        // | RCC_APB2Periph_AFIO

        /* 3&#245;ê&#188;&#187;ˉSCK&#161;¢MISO&#161;¢MOSIòy&#189;&#197; */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);

        /* 3&#245;ê&#188;&#187;ˉCSòy&#189;&#197; */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_SetBits(GPIOA, GPIO_Pin_4);
  /* PA0 */
//         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //????
//         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //LED1-->E.5 ????, ????
//         GPIO_Init(GPIOA, &GPIO_InitStructure); //???? , IO ???? 50MHz
//        
        /* 3&#245;ê&#188;&#187;ˉ&#197;&#228;&#214;&#195;STM32 SPI1 */
        SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;        //SPIéè&#214;&#195;&#206;a&#203;&#171;&#207;&#223;&#203;&#171;&#207;òè&#171;&#203;&#171;1¤
        SPI_InitStructure.SPI_Mode=SPI_Mode_Master;                                                        //éè&#214;&#195;&#206;a&#214;÷SPI
        SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;                                                //SPI·¢&#203;í&#189;óê&#213;8&#206;&#187;&#214;&#161;&#189;á11
        SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;                                                        //ê±&#214;óDü&#191;&#213;μí
        SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;                                                        //êy&#190;Y2&#182;&#187;&#241;óúμú1&#184;&#246;ê±&#214;ó&#209;&#216;
        SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;                                                                //NSSóéía2&#191;1ü&#189;&#197;1üàí
        SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_2;        //2¨ì&#216;&#194;ê&#212;¤·&#214;&#198;μ&#214;μ&#206;a2
        SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;                                        //êy&#190;Y′&#171;ê&#228;′óMSB&#206;&#187;&#191;aê&#188;
        SPI_InitStructure.SPI_CRCPolynomial=7;                                                                //CRC&#182;à&#207;&#238;ê&#189;&#206;a7
        SPI_Init(SPI1,&SPI_InitStructure);                                                                        //&#184;ù&#190;YSPI_InitStruct&#214;D&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉíaéèSPI1&#188;&#196;′&#230;&#198;÷

        SPI_Cmd(SPI1,ENABLE);        //STM32ê1&#196;üSPI1
}


void SPI1_Send_Byte(unsigned char dat)
{
        SPI_I2S_SendData(SPI1,dat);//D′1&#184;&#246;×&#214;&#189;úêy&#190;Y
        while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);//μè′yêy&#190;Y&#188;&#196;′&#230;&#198;÷&#191;&#213;
}

/*******************************************************************************
* oˉêy&#195;&#251;  : SPI1_Send_Short
* &#195;èê&#246;    : SPI1·¢&#203;í2&#184;&#246;×&#214;&#189;úêy&#190;Y(16&#206;&#187;)
* ê&#228;è&#235;    : dat:′y·¢&#203;íμ&#196;16&#206;&#187;êy&#190;Y
* ê&#228;3&#246;    : &#206;T
* ·μ&#187;&#216;&#214;μ  : &#206;T
* &#203;μ&#195;÷    : &#206;T
*******************************************************************************/
void SPI1_Send_Short(unsigned short dat)
{
        SPI1_Send_Byte(dat/256);//D′êy&#190;Y&#184;&#223;&#206;&#187;
        SPI1_Send_Byte(dat);        //D′êy&#190;Yμí&#206;&#187;
}
//&#184;′&#206;&#187;w5500£&#172;
void ly_Rstw5500()
{
         GPIO_ResetBits(GPIOC,GPIO_Pin_5);
         Delay(50);
    GPIO_SetBits(GPIOC,GPIO_Pin_5);
         Delay(200);
}
//2¢&#199;ò&#188;ì2aê&#199;·&#241;ò&#209;&#190;-á&#172;&#189;óé&#207;
unsigned char ly_readbyte()
{

        unsigned char i;

        GPIO_ResetBits(GPIOA, GPIO_Pin_4);//&#214;&#195;W5500μ&#196;SCS&#206;aμíμ&#231;&#198;&#189;
                       
        SPI1_Send_Short(0x002E);//í¨1ySPI1D′16&#206;&#187;&#188;&#196;′&#230;&#198;÷μ&#216;&#214;·
        SPI1_Send_Byte(0X01);//í¨1ySPI1D′&#191;&#216;&#214;&#198;×&#214;&#189;ú,1&#184;&#246;×&#214;&#189;úêy&#190;Y3¤&#182;è,&#182;áêy&#190;Y,&#209;&#161;&#212;&#241;í¨ó&#195;&#188;&#196;′&#230;&#198;÷

        i=SPI_I2S_ReceiveData(SPI1);
        SPI1_Send_Byte(0x00);//·¢&#203;íò&#187;&#184;&#246;&#206;±êy&#190;Y
        i=SPI_I2S_ReceiveData(SPI1);//&#182;áè&#161;1&#184;&#246;×&#214;&#189;úêy&#190;Y

        GPIO_SetBits(GPIOA, GPIO_Pin_4);//&#214;&#195;W5500μ&#196;SCS&#206;a&#184;&#223;μ&#231;&#198;&#189;
        return i;//·μ&#187;&#216;&#182;áè&#161;μ&#189;μ&#196;&#188;&#196;′&#230;&#198;÷êy&#190;Y
}
int main(void)
{
        RCC_Configuration();
SPI_Configuration();
       
         
        while(1)
        {
               
ly_Rstw5500();

ly_Qtemp=ly_readbyte();  //读取不到数据
        }
}
在读取 “PHYCFGR (W5500 PHY 配置寄存器) “  该寄存器的时候没有返回的数据;


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2022-8-12 01:17:28 | 显示全部楼层
回复

使用道具 举报

0

主题

465

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1732
金钱
1732
注册时间
2021-4-11
在线时间
320 小时
发表于 2022-8-12 09:41:28 | 显示全部楼层
帮顶            
回复

使用道具 举报

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2017-9-13
在线时间
18 小时
 楼主| 发表于 2022-8-15 08:23:41 | 显示全部楼层

原子神,这个读取不上来是什么情况啊!给个提示吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 14:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表