|
请教版主STM32F103的SPI采样AD的问题
[复制链接]
我现在用STM32F103外加ADC采样16位的压力传感器的数据,
打算用SPI2的MISO(只输入),SCLK(输出),CS(一直为低,用其它IO口控制)
用扫描方式(我想用1ms中断里去读取一下接收到的数据),但我是看了半天都设置不对啊,能不能帮我看一下初始化的程序!
void InitSampSpi2(void)
{
SENSOR_nCS_SET;
///////(PB13,PB14)SPI2/////
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;//
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //SCLK复用推挽输出
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;//
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //MISO输入浮空
GPIO_Init(GPIOB,&GPIO_InitStructure);
//////////////////////////////////////////////
SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Rx; // SPI设置为单线双向发送
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //SPI_Mode_Master; // 设置为主SPI
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; // SPI发送接收x位帧结构
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; // 时钟悬空低
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; // 数据捕获于第一个时钟沿
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; // NSS由外部管脚管理
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32; // SPI波特率预32分频(66M/32 = 2M)
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; // SPI数据高位在前
SPI_Init(SPI2, &SPI_InitStructure);
SPI_CalculateCRC(SPI2,DISABLE); //CRC关掉
SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Rx); //选择只收模式
SPI_SSOutputCmd(SPI2,DISABLE); //使能NSS主输出
//////////////////////////////
SPI_Cmd(SPI2, ENABLE);
SENSOR_nCS_CLR;
}
我现在要通过SPI采样外部ADC芯片的数据,那我是不是应该设置为SPI主模式,然后选择只输入(通过MISO),上面的这个设置哪里有问题,谢谢!
(现在的现像是一运行,就OVE(通过jlink看的),但是SCLK我测量根本就没有输出呀!
|
|