×
单片机 > 单片机程序设计 > 详情

stm32通过SPI与adc124s021通信读取ad

发布时间:2020-05-30 发布时间:
|

/**


 * 配置用于操作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;          //读数据,返回收到的数据


        


}




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈AVR中定时器几种工作模式