/**
* 配置用于操作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; //读数据,返回收到的数据
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』