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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
Scilence
1楼-- · 2019-07-20 10:53
发表结贴,查找了这么久,又重新画了板子,发现是MC33879的pcb贴反了,改正后,完美运行
正点原子
2楼-- · 2019-07-20 13:55
帮顶
Scilence
3楼-- · 2019-07-20 18:50
 精彩回答 2  元偷偷看……
Scilence
4楼-- · 2019-07-20 21:23
在测试的时候,一直没有SCK信号,一直处于低电平状态
Scilence
5楼-- · 2019-07-21 02:08
  while(1){
                SPI_CS_LOW();
          Delay_ns(10);
          MC33879_STATUS = MC33879_SPI2_WriteRead2Bytes(0x00ff);
          Delay_ns(10);
                SPI_CS_HIGH();
}
正点原子
6楼-- · 2019-07-21 07:49
 精彩回答 2  元偷偷看……

一周热门 更多>