OpenEdv-开源电子网

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

求助SPI+mcp3208的驱动程序

[复制链接]

1

主题

3

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2019-4-25
在线时间
8 小时
发表于 2019-5-29 16:25:55 | 显示全部楼层 |阅读模式
有没有那位大神搞过,STM32F429IGTx    SPI+mcp3208的驱动程序啊,分享下,一直搞不出来,采集出来不是0就是4095
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2019-9-28
在线时间
17 小时
发表于 2020-1-3 10:51:22 | 显示全部楼层
回复 支持 1 反对 0

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2019-4-25
在线时间
8 小时
 楼主| 发表于 2019-5-29 16:43:03 | 显示全部楼层
本帖最后由 yangayi 于 2019-5-29 16:46 编辑

代码如下,不知道那里有错了,搞了一天没搞出来,采集结果一直是4095,望大佬指正,感激……

SPI_HandleTypeDef SPI5_Handler;  //SPI句柄
初始化:
void SPIx_Init(void)
{
   __HAL_RCC_GPIOF_CLK_ENABLE();
   __HAL_RCC_GPIOH_CLK_ENABLE();
   __HAL_RCC_SPI5_CLK_ENABLE();          //使能SPI5时钟
      //PF8-SIP5_MISO
    GPIO_Initure.Pin=GPIO_PIN_8;
    GPIO_Initure.Mode=GPIO_MODE_AF_PP;            
    GPIO_Initure.Pull=GPIO_PULLUP;                  //上拉
    GPIO_Initure.Speed=GPIO_SPEED_FAST;             //快速            
    GPIO_Initure.Alternate=GPIO_AF5_SPI5;           //复用为SPI5
    HAL_GPIO_Init(GPIOF,&GPIO_Initure);

    //PF9-SPI5_MOSI
    GPIO_Initure.Pin=GPIO_PIN_9;
    GPIO_Initure.Mode=GPIO_MODE_AF_PP;              
    HAL_GPIO_Init(GPIOF,&GPIO_Initure);
        
    //PH6-SPI5_CLK
    GPIO_Initure.Pin=GPIO_PIN_6;
    GPIO_Initure.Mode=GPIO_MODE_AF_PP;              
    HAL_GPIO_Init(GPIOH,&GPIO_Initure);        
        
     //PF10-SPI5_CS
    GPIO_Initure.Pin=GPIO_PIN_10;            //PF6
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  //推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
    GPIO_Initure.Speed=GPIO_SPEED_FAST;     //快速  
    HAL_GPIO_Init(GPIOF,&GPIO_Initure);     //初始化        
        
    HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_SET);    //置1        MCP3208_CS=1;                    //cs默认高

    SPI5_Handler.Instance=SPI5;                         //SPI5
    SPI5_Handler.Init.Mode=SPI_MODE_MASTER;             //设置SPI工作模式,设置为主模式
    SPI5_Handler.Init.Direction=SPI_DIRECTION_2LINES;   //设置SPI单向或者双向的数据模式:SPI设置为双线模式
    SPI5_Handler.Init.DataSize=SPI_DATASIZE_8BIT;       //设置SPI的数据大小:SPI发送接收8位帧结构
    SPI5_Handler.Init.CLKPolarity=SPI_POLARITY_HIGH;    //串行同步时钟的空闲状态为高电平
    SPI5_Handler.Init.CLKPhase=SPI_PHASE_2EDGE;         //串行同步时钟的第二个跳变沿(上升或下降)数据被采样
    SPI5_Handler.Init.NSS=SPI_NSS_SOFT;                 //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
    SPI5_Handler.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_256;//定义波特率预分频的值:波特率预分频值为256
    SPI5_Handler.Init.FirstBit=SPI_FIRSTBIT_MSB;        //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
    SPI5_Handler.Init.TIMode=SPI_TIMODE_DISABLE;        //关闭TI模式
    SPI5_Handler.Init.CRCCalculation=SPI_CRCCALCULATION_DISABLE;//关闭硬件CRC校验
    SPI5_Handler.Init.CRCPolynomial=7;                  //CRC值计算的多项式
    HAL_SPI_Init(&SPI5_Handler);                        //初始化        
        
    __HAL_SPI_ENABLE(&SPI5_Handler);                    //使能SPI5
    SPI5_ReadWriteByte(0Xff);                           //启动传输
}

u8 SPI5_ReadWriteByte(u8 TxData)
{
    u8 Rxdata;
    HAL_SPI_TransmitReceive(&SPI5_Handler,&TxData,&Rxdata,1, 1000);      
         return Rxdata;                              //返回收到的数据               
}

//读取第chx通道的AD转换值
u16 SPI_MCP3208_ReadData(u8 ch)
{
   u8 byte,data_high,data_low;
   byte=0x06;

   if(ch>3)
      byte|=0x01;

   MCP3208_CS=0;                   //使能器件   
   SPI5_ReadWriteByte(byte);            //发送读取状态寄存器命令
   byte=ch<<6;
   data_high=SPI5_ReadWriteByte(byte);   //读取一个字节
   data_high&=0x0f;
   data_low=SPI5_ReadWriteByte(0xFF);
   MCP3208_CS=1;                    //取消片选   
   return ((data_high<<8)|data_low);
}


int main(void)
{     
     u16 value=0;
     u16 times=0;

    HAL_Init();                     //初始化HAL库         
    Stm32_Clock_Init(360,25,2,8);   //设置时钟,180Mhz
    uart_init(115200);              //初始化USART
    SPIx_Init();                    //初始化SPI

               
        while(1)
        {               
                times++;
                if(times%500==0)
                {        
                        //SPI        
                        value=SPI_MCP3208_ReadData(0);
                        printf("channel1= %d \n",value);               
//                        value=SPI_MCP3208_ReadData(1);
//                        printf("channel2= %d \n",value);
//                        value=SPI_MCP3208_ReadData(2);
//                        printf("channel3= %d \n",value);
//                        value=SPI_MCP3208_ReadData(3);
//                        printf("channel4= %d \n",value);
//                        value=SPI_MCP3208_ReadData(4);
//                        printf("channel5= %d \n",value);
//                        value=SPI_MCP3208_ReadData(5);
//                        printf("channel6= %d \n",value);
//                        value=SPI_MCP3208_ReadData(6);
//                        printf("channel7= %d \n",value);
//                        value=SPI_MCP3208_ReadData(7);
//                        printf("channel8= %d \n",value);                                                        
                }
                delay_ms(10);
        }        
}



回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2019-4-25
在线时间
8 小时
 楼主| 发表于 2019-6-11 10:10:54 | 显示全部楼层
问题已经解决
回复 支持 反对

使用道具 举报

24

主题

119

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2578
金钱
2578
注册时间
2017-4-4
在线时间
340 小时
发表于 2020-8-8 15:43:43 | 显示全部楼层

你好,请问问题原因是什么呢?我也遇到这种问题
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2019-10-19
在线时间
13 小时
发表于 2020-10-13 11:42:35 | 显示全部楼层
你好,遇到了同样问题,求原因
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2019-10-19
在线时间
13 小时
发表于 2020-10-13 11:43:21 | 显示全部楼层

你找到原因了吗
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2019-10-19
在线时间
13 小时
发表于 2020-10-13 11:43:43 | 显示全部楼层
jinx 发表于 2020-8-8 15:43
你好,请问问题原因是什么呢?我也遇到这种问题

你好,你找到原因了吗
回复 支持 反对

使用道具 举报

24

主题

119

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2578
金钱
2578
注册时间
2017-4-4
在线时间
340 小时
发表于 2020-10-14 09:59:41 | 显示全部楼层
旧报纸 发表于 2020-10-13 11:43
你好,你找到原因了吗

当然找到啦,已经解决了。
回复 支持 反对

使用道具 举报

24

主题

119

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2578
金钱
2578
注册时间
2017-4-4
在线时间
340 小时
发表于 2020-10-14 10:17:05 | 显示全部楼层
jinx 发表于 2020-10-14 09:59
当然找到啦,已经解决了。

看我的帖子。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-29 23:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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