STM32F103C8T6驱动MC33879

2019-07-20 06:29发布

SPI的配置没有错,不知道怎么写入命令驱动MC33879。MC33879充当八路开关信号使用。


配置代码

void SPI_Config(void){
  SPI_InitTypeDef  SPI_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;
  
        /*- ¿aÆôGPIOAòÔ¼°SPI2ê±Öó -*/
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

        /*- SPI2_CS PB12 -*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);  

        /*- SPI2_SCKòy½Å PB13 -*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 ;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP ;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

        /*- SPI2_MISO PB14 -*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP ;                            //GPIO_Mode_IN_FLOATING ;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
       
  /*- SPI2_MOSI PB12 -*/  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP  ;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

        /*- SPI2 -*/
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;       
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                                                                                          
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;                                                                        
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;                                                                                                
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                                                                                          
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                                                                                                  
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;        
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7        ;
  SPI_Init(SPI2, &SPI_InitStructure);                                                                                                                               
  SPI_Cmd(SPI2, ENABLE);                                                                                                                                                                                       
        }


写命令代码
uint16_t MC33879_SPI2_WriteRead2Bytes(uint16_t TxData){
       
        uint8_t retry=0;
       
        while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET){
                retry++;
                if(retry>200){       //·Ç¿Õ
                  return 0;
          }
        }
       
        SPI_I2S_SendData(SPI2,TxData);
        retry=0;
        Delay_ms(10);
       
        while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==RESET){
                retry++;
                if(retry>200){
                        return 0;
                }
        }
       
        return SPI_I2S_ReceiveData(SPI2);
}

void MC33879_WriteRead2Bytes(uint16_t TxData){
        SPI_CS_LOW();
        MC33879_STATUS = MC33879_SPI2_WriteRead2Bytes(TxData);
        Delay_ms(10);
}

若想驱动OUT7,写入的16位是不是应该为0x0040H
1516000640(1).jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。