stm32通过SPI与adc124s021通信读取ad

来源:互联网 发布:算法就是程序 编辑:程序博客网 时间:2024/06/14 15:07

 

/**

 * 配置用于操作ADC124S21的模拟SPI GPIO端口

 */

static void U11ADC124S021_GPIO_init()

{

             SPI_InitTypeDef  SPI_InitStructure;  //定义SPI结构体

   GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO结构体

         //使能SPI1时钟、GPIOA及GPIOC口时钟、引脚复用功能时钟

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|

           RCC_APB2Periph_GPIOC |

           RCC_APB2Periph_AFIO |

           RCC_APB2Periph_SPI1,

           ENABLE);

 

       /* 配置SPI引脚:NSS,SCK,MISO and MOSI */

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;

   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出

   GPIO_Init(GPIOA, &GPIO_InitStructure);

        

 

   /* 配置PA4为推挽输出,作为MAX5415片选引脚 */

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

   GPIO_Init(GPIOA, &GPIO_InitStructure);

 

   /**********SPI基本配置****************/

         SPI_InitStructure.SPI_Direction= SPI_Direction_2Lines_FullDuplex;//SPI为2线全双工

         SPI_InitStructure.SPI_Mode= SPI_Mode_Master;                                                 //SPI主模式

         SPI_InitStructure.SPI_DataSize= SPI_DataSize_16b;                                   //SPI发送接收16位帧结构

         SPI_InitStructure.SPI_CPOL= SPI_CPOL_Low;                                                         //时钟空闲时为0

         SPI_InitStructure.SPI_CPHA= SPI_CPHA_1Edge;                                          //数据捕获于第一个时钟沿

         SPI_InitStructure.SPI_NSS= SPI_NSS_Soft;                                                      //内部NSS信号由软件控制

         SPI_InitStructure.SPI_BaudRatePrescaler= SPI_BaudRatePrescaler_32;//波特率预分频值为32

         SPI_InitStructure.SPI_FirstBit= SPI_FirstBit_MSB;                                        //数据传输从高位开始

         SPI_InitStructure.SPI_CRCPolynomial= 7;                                                        //CRC值计算的多项式最高为7次

         SPI_Init(SPI1,&SPI_InitStructure);//根据以上参数初始化SPI结构体

 

         SPI_Cmd(SPI1,ENABLE); //使能SPI1

 

 

 

}

 

/********************************************************************************************************

**函数名称:U11_AD_124S021()

**函数功能:用于AD转换,读取成像镜头与天线位置

**输入变量:channel 通道数;channel=1,则选择通道1;channel=2,则选择通道2.

**输出变量:ad_val,AD转换值

********************************************************************************************************/

u32 U11_AD_124S021(unsigned char channel)

{

         u16TxData = 0;

         if(channel== 1)

                   TxData= 0x0000;

         if(channel== 2)

                   TxData= 0x0800;

         if(channel== 3)

                   TxData= 0x1000;    

         if(channel== 4)

                   TxData= 0x1800;

         while((SPI1->SR&1<<1)==0);//等待发送区空                                      

         SPI1->DR=TxData;            //发送一个byte  

         while((SPI1->SR&1<<0)==0);//等待接收完一个byte 

         returnSPI1->DR;          //读数据,返回收到的数据

        

}

0 0
原创粉丝点击