OpenEdv-开源电子网

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

用f030的SPI接ADC芯片进行采样,这样配置对么

[复制链接]

3

主题

11

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2016-8-17
在线时间
9 小时
发表于 2016-8-17 09:16:29 | 显示全部楼层 |阅读模式
1金钱
#include "stm32f0xx.h"
#include "SPI.h"
#include "stm32f0xx_spi.h"

void SPI1_Init(void)
{
        SPI_InitTypeDef  SPI_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;       
       
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);    //??SPI1??

  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_0);    //SCK
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_0);    //MISO
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_0);    //MOSI
       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;  //SPI CS
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_ResetBits(GPIOA,GPIO_Pin_4);       
        // GPIO_SetBits(GPIOA,GPIO_Pin_4);       


    /*
        *****************************************************************
        *        SPI????,GPIOB.3--SCK   GPIOB.4--MISO  GPIOB.5--MOSI            *
        *****************************************************************
        */
////        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
////        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
////    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
////    GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
////    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
////        GPIO_Init(GPIOA, &GPIO_InitStructure);

////         GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
       
       
       
       
        /*SCK */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//#define FLASH_SCK_PIN  GPIO_Pin_13
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);//#define FLASH_SCK_PORT   GPIOB

        /*MOSI */
  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

/*MISO */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

        GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
        //GPIO_SetBits(GPIOA,GPIO_Pin_5);
    /*
        *************************************************************************************
        *        SPI???:SPI????????,?SPI??,?????????8???                            *
        *                           ?????????(W25X16????3),??????????                            *
        *                           ?????(1????????????,2?W25X16?????????)        *
        *                           ????????????????????SPI???2??,36MHz                    *
        *                           W25X16???SPI?????75MHz,???????,                                                *
        *************************************************************************************
        */       
       
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //??SPI???????????:SPI??????????
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                //??SPI????:????SPI
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;                //??SPI?????:SPI????8????
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;                //??????????:?????
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;        //???????????
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                //NSS?????(NSS??)????(??SSI?)??:??NSS???SSI???
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;                //??????????:????????2
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;        //???????MSB???LSB???:?????MSB???
        SPI_InitStructure.SPI_CRCPolynomial = 7;        //CRC???????
        SPI_Init(SPI1, &SPI_InitStructure);  //??SPI_InitStruct???????????SPIx???

        SPI_Cmd(SPI1, ENABLE); //??SPI??
        SPI_RxFIFOThresholdConfig(SPI1,SPI_RxFIFOThreshold_QF);
       
       
  //SPI1_ReadWriteByte(0xFFFF);
}

//uint16_t SPI1_ReadWriteByte(uint16_t TxData)
//{               
//        unsigned char retry=0;                                        
//        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) //?????SPI???????:????????
//                {
//                retry++;
//                if(retry>200)return 0;
//                }                          
//        SPI_I2S_SendData16(SPI1, TxData); //????SPIx??????
//        retry=0;

//        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) //?????SPI???????:?????????
//                {
//                retry++;
//                if(retry>200)return 0;
//                }                                                              
//        return SPI_I2S_ReceiveData16(SPI1); //????SPIx???????                                            
//}       




uint16_t SPI1_ReadWriteByte(uint16_t TxData)                                      
{
        while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
        SPI_I2S_SendData16(SPI1, TxData);
//        SPI_I2S_SendData16(SPI1, TxData);
        while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
        return SPI_I2S_ReceiveData16(SPI1);
//        return SPI_I2S_ReceiveData16(SPI1);
}


//SPI_RxFIFOThresholdConfig(SPI1,SPI_RxFIFOThreshold_QF);





void ADC78H90_Init()
{
        SPI1_Init();       
       
        //???SPI
        //SPI2_SetSpeed(SPI_BaudRatePrescaler_2);//???18M??,????

}

uint16_t ADC78H90_Read(uint8_t next_channel)
{
       

        uint16_t ch=0x3800;
        //uint16_t ch=0x1C00;
       
        if(next_channel>2)
                return 0;
       
        ch=ch&(next_channel<<11);
       
        //_printf("spi_read ch=%x %d \r\n ", ch, next_channel);
       
        return SPI1_ReadWriteByte(ch);
         

               
}

最佳答案

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

你能收到数配置的就都对 至于你说的数值偏小 具体的情况不知道,不好说 可能因为基准偏小 也可能是因为片子自己校准了外部失调,不知道你做过没有
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2016-8-17 09:16:30 | 显示全部楼层
你能收到数配置的就都对

至于你说的数值偏小   具体的情况不知道,不好说

可能因为基准偏小

也可能是因为片子自己校准了外部失调,不知道你做过没有
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2016-8-17
在线时间
9 小时
 楼主| 发表于 2016-8-17 09:17:08 | 显示全部楼层
为什么采集到的数值都偏小
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2016-8-17
在线时间
9 小时
 楼主| 发表于 2016-8-17 09:22:12 | 显示全部楼层
帮帮忙
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2016-8-18 11:11:36 | 显示全部楼层
r71825 发表于 2016-8-17 09:17
为什么采集到的数值都偏小

怎么偏小  你把数发上来看看
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-2 20:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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