1.初始化L3GD20端口装备。将端口装备为SPI通讯接口。
单片机端口初始化包含I/O端口,I/O端口spi体系时钟。
以STM32F303为例装备端口如下:
staticvoidL3GD20_LowLevel_Init(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
SPI_InitTypeDefSPI_InitStructure;
RCC_APB2PeriphClockCmd(L3GD20_SPI_CLK,ENABLE);
RCC_AHBPeriphClockCmd(L3GD20_SPI_SCK_GPIO_CLK|L3GD20_SPI_MISO_GPIO_CLK|L3GD20_SPI_MOSI_GPIO_CLK,ENABLE);
RCC_AHBPeriphClockCmd(L3GD20_SPI_CS_GPIO_CLK,ENABLE);
RCC_AHBPeriphClockCmd(L3GD20_SPI_INT1_GPIO_CLK,ENABLE);
RCC_AHBPeriphClockCmd(L3GD20_SPI_INT2_GPIO_CLK,ENABLE);
GPIO_PinAFConfig(L3GD20_SPI_SCK_GPIO_PORT,L3GD20_SPI_SCK_SOURCE,L3GD20_SPI_SCK_AF);
GPIO_PinAFConfig(L3GD20_SPI_MISO_GPIO_PORT,L3GD20_SPI_MISO_SOURCE,L3GD20_SPI_MISO_AF);
GPIO_PinAFConfig(L3GD20_SPI_MOSI_GPIO_PORT,L3GD20_SPI_MOSI_SOURCE,L3GD20_SPI_MOSI_AF);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//GPIO_PuPd_DOWN;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin=L3GD20_SPI_SCK_PIN;
GPIO_Init(L3GD20_SPI_SCK_GPIO_PORT,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=L3GD20_SPI_MOSI_PIN;
GPIO_Init(L3GD20_SPI_MOSI_GPIO_PORT,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=L3GD20_SPI_MISO_PIN;
GPIO_Init(L3GD20_SPI_MISO_GPIO_PORT,&GPIO_InitStructure);
SPI_I2S_DeInit(L3GD20_SPI);
SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_8;
SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial=7;
SPI_InitStructure.SPI_Mode=SPI_Mode_Master;
SPI_Init(L3GD20_SPI,&SPI_InitStructure);
SPI_RxFIFOThresholdConfig(L3GD20_SPI,SPI_RxFIFOThreshold_QF);
SPI_Cmd(L3GD20_SPI,ENABLE);
GPIO_InitStructure.GPIO_Pin=L3GD20_SPI_CS_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(L3GD20_SPI_CS_GPIO_PORT,&GPIO_InitStructure);
GPIO_SetBits(L3GD20_SPI_CS_GPIO_PORT,L3GD20_SPI_CS_PIN);
GPIO_InitStructure.GPIO_Pin=L3GD20_SPI_INT1_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_Init(L3GD20_SPI_INT1_GPIO_PORT,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=L3GD20_SPI_INT2_PIN;
GPIO_Init(L3GD20_SPI_INT2_GPIO_PORT,&GPIO_InitStructure);
}
2.陀螺仪初始化装备
装备陀螺仪芯片功用和芯片初始化设置
对应寄存器装备及功用参阅LG3D20数据手册
代码示例如下:
voidL3GD20_Init(L3GD20_InitTypeDef*L3GD20_InitStruct)
{
uint8_tctrl1=0x00,ctrl4=0x00;
L3GD20_LowLevel_Init();