OpenEdv-开源电子网

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

STM32F103C8T6驱动MC33879

[复制链接]

2

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2017-10-31
在线时间
42 小时
发表于 2018-1-15 15:18:12 | 显示全部楼层 |阅读模式
1金钱
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

最佳答案

查看完整内容[请看2#楼]

发表结贴,查找了这么久,又重新画了板子,发现是MC33879的pcb贴反了,改正后,完美运行
敬往事一杯酒,再爱也不回头
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2017-10-31
在线时间
42 小时
 楼主| 发表于 2018-1-15 15:18:13 | 显示全部楼层
发表结贴,查找了这么久,又重新画了板子,发现是MC33879的pcb贴反了,改正后,完美运行
敬往事一杯酒,再爱也不回头
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-16 01:19:33 | 显示全部楼层
帮顶
回复

使用道具 举报

2

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2017-10-31
在线时间
42 小时
 楼主| 发表于 2018-1-16 08:18:48 | 显示全部楼层
谢谢原子哥帮顶
敬往事一杯酒,再爱也不回头
回复

使用道具 举报

2

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2017-10-31
在线时间
42 小时
 楼主| 发表于 2018-1-16 14:40:30 | 显示全部楼层
在测试的时候,一直没有SCK信号,一直处于低电平状态
敬往事一杯酒,再爱也不回头
回复

使用道具 举报

2

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2017-10-31
在线时间
42 小时
 楼主| 发表于 2018-1-16 14:43:59 | 显示全部楼层
  while(1){
                SPI_CS_LOW();
          Delay_ns(10);
          MC33879_STATUS = MC33879_SPI2_WriteRead2Bytes(0x00ff);
          Delay_ns(10);
                SPI_CS_HIGH();
}
1516084893(1).jpg
敬往事一杯酒,再爱也不回头
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-17 01:17:01 | 显示全部楼层
帮顶
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-8-21
在线时间
3 小时
发表于 2018-8-21 13:53:55 | 显示全部楼层
请问你在调试MC33879过程中遇到只能配置一次生效的问题吗?开机以后只能写入一次16位的值,后面再写入返回结果也是对的,但是硬件上没实现
回复

使用道具 举报

2

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2017-10-31
在线时间
42 小时
 楼主| 发表于 2018-8-27 20:05:12 | 显示全部楼层
也许124 发表于 2018-8-21 13:53
请问你在调试MC33879过程中遇到只能配置一次生效的问题吗?开机以后只能写入一次16位的值,后面再写入返回 ...

MC33879可以多次写入命令,看看硬件电路图,是不是有问题。或者看看代码命令,是否有误。
敬往事一杯酒,再爱也不回头
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-11 17:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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