新手上路
- 积分
- 24
- 金钱
- 24
- 注册时间
- 2016-8-15
- 在线时间
- 22 小时
|
1金钱
void SPI_Config(void)
{
//声明结构体
GPIO_InitTypeDef GPIO_InitStructure1;
//打开相应外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
/******配置SCK与MOSI引脚******/
GPIO_InitStructure1.GPIO_Pin=GPIO_Pin_11; //SCK
GPIO_InitStructure1.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure1.GPIO_Speed=GPIO_Speed_50MHz; //输出时钟50MHZ
GPIO_Init(GPIOA,&GPIO_InitStructure1); //初始化
/******配置MISO引脚*****/
GPIO_InitStructure1.GPIO_Pin=GPIO_Pin_12; //MISO
GPIO_InitStructure1.GPIO_Mode=GPIO_Mode_IPD ; //xia拉输入
GPIO_Init(GPIOA,&GPIO_InitStructure1); //初始化
/*配置CS为推挽输出*/
GPIO_InitStructure1.GPIO_Pin=GPIO_Pin_9; // CS
GPIO_InitStructure1.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure1.GPIO_Speed=GPIO_Speed_50MHz; //输出时钟50MHz
GPIO_Init(GPIOB,&GPIO_InitStructure1); //初始化
SPI_CS_HIGH();
SET_SCK();
}
int ReadWrite()
{
int data_out=0;
uint8_t i = 0;
SPI_CS_LOW();
for( i= 0; i <16; i++ )
{
data_out<<=1;
CLEAR_SCK();
if(GET_ADXL_SDO()==1)
{
data_out++;
}
else
data_out&=0xfffe;
SET_SCK();
}
//返回读出的数据
SPI_CS_HIGH() ;
return data_out;
}
只有上个接口cs、sck、miso,时序图都是下拉。
片选cs先高电平转低电平
然后sck高电平转低电平(我不清楚需不需要人为控制)
读取数据
接着先拉高sck,再拉高CS.
问题在于我不管输入给的是上拉下拉浮空等,都接收不到数据。(时序里的间隙几ns,无需考虑) |
-
|