SPI配置的一些疑惑 信号有杂波

2019-07-20 01:29发布

用的是H7的板子 想SPI控制W5500做以太网通信现在的问题是  SCLK MOSI MISO的信号都有杂波 ,就是每个周期里混着一个不太正常的小波形。
MOSI用示波器看了下发送的 地址 控制 数据段都是对的,就是旁边有杂波
MISO  的波形看了下 地址 控制 数据段都不太对   

现在是初步怀疑  会不会是SPI配置的不太对 导致有杂波 然后  W5500识别不了正确信号了  
或者  W5500   的芯片初始化有问题? 但是已经换过一块W5500了 应该硬件焊接没问题
大家有什么建议吗? 可能会是什么问题?
SPI的频率设置过了 是低于外设最高频率的
SPI配置部分如下
void SPI_Configuration(void)
{
               
                SPI1_Handler.Instance=SPI2;                        
    SPI1_Handler.Init.Mode=SPI_MODE_MASTER;           
    SPI1_Handler.Init.Direction=SPI_DIRECTION_2LINES;  
    SPI1_Handler.Init.DataSize=SPI_DATASIZE_8BIT;      
    SPI1_Handler.Init.CLKPolarity=SPI_POLARITY_HIGH;   
    SPI1_Handler.Init.CLKPhase=SPI_PHASE_2EDGE;         
    SPI1_Handler.Init.NSS=SPI_NSS_SOFT;                 
    SPI1_Handler.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_2;
    SPI1_Handler.Init.FirstBit=SPI_FIRSTBIT_MSB;      
    SPI1_Handler.Init.TIMode=SPI_TIMODE_DISABLE;        
    SPI1_Handler.Init.CRCCalculation=SPI_CRCCALCULATION_DISABLE;
    SPI1_Handler.Init.CRCPolynomial=7;              
    HAL_SPI_Init(&SPI1_Handler);
    __HAL_SPI_ENABLE(&SPI1_Handler);                    
SPI1_ReadWriteByte(0x00);  

}



void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
{
    GPIO_InitTypeDef GPIO_Initure;
    RCC_PeriphCLKInitTypeDef SPI2ClkInit;


        SPI2ClkInit.PeriphClockSelection=RCC_PERIPHCLK_SPI2;            //éèÖÃSPI2ê±ÖóÔ′
         SPI2ClkInit.Spi123ClockSelection=RCC_SPI123CLKSOURCE_PLL;        //SPI2ê±ÖóÔ′ê1ó&#195LL1Q
                HAL_RCCEx_PeriphCLKConfig(&SPI2ClkInit);


          __HAL_RCC_GPIOI_CLK_ENABLE();       //ê1ÄüGPIOAê±Öó
    __HAL_RCC_SPI2_CLK_ENABLE();        //ê1ÄüSPI2ê±Öó
   
    //PA5,6,7
    GPIO_Initure.Pin=GPIO_PIN_1|GPIO_PIN_3;
    GPIO_Initure.Mode=GPIO_MODE_AF_PP;              //¸′óÃíÆíìêä3ö
    GPIO_Initure.Pull=GPIO_PULLUP;                  //éÏà-
GPIO_Initure.Alternate=GPIO_AF5_SPI2;
    GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;             //¿ìËù            
    HAL_GPIO_Init(GPIOI,&GPIO_Initure);
       
          GPIO_Initure.Pin=GPIO_PIN_2;
                GPIO_Initure.Mode=GPIO_MODE_INPUT;
                HAL_GPIO_Init(GPIOI,&GPIO_Initure);
}




void SPI2_SetSpeed(u32 SPI_BaudRatePrescaler)
{
    assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));//ÅD¶ÏóDD§DÔ
    __HAL_SPI_DISABLE(&SPI1_Handler);            //1رÕSPI
    SPI1_Handler.Instance->CFG1&=~(0X7<<28);     //&#206;&#187;30-28&#199;&#229;á&#227;£&#172;ó&#195;à′éè&#214;&#195;2¨ì&#216;&#194;ê
    SPI1_Handler.Instance->CFG1|=SPI_BaudRatePrescaler;//éè&#214;&#195;SPI&#203;ù&#182;è
    __HAL_SPI_ENABLE(&SPI1_Handler);             //ê1&#196;üSPI



0条回答

一周热门 更多>