#include "iostm8l152c6.h"
long int a[4];
long int index=0,index1=0;
void IO_init()
{
CLK_PCKENR1 = 0X10; //开外部时钟门控
PB_DDR |= MASK_PB_DDR_DDR5 | MASK_PB_DDR_DDR6;
PB_CR1 |= MASK_PB_CR1_C15 | MASK_PB_CR1_C16;
PB_CR2 |= MASK_PB_CR2_C25 | MASK_PB_CR2_C26;
//PB5(CLK),PB6(MOSI)设置为快速推挽输出,PB7(MISO)为悬浮输入
PD_DDR |= MASK_PD_DDR_DDR7;
PD_CR1 |= MASK_PD_CR1_C17;
//PD(CS)为推挽输出
}
void SPI1_MOSI_init()
{
SPI1_CR2 |= MASK_SPI1_CR2_SSM; //设置为软件控制SNN
SPI1_CR2 |= MASK_SPI1_CR2_SSI; //设置为主模式
SPI1_CR1 |= MASK_SPI1_CR1_MSTR | MASK_SPI1_CR1_SPE; //开启主模式,SPI1使能
}
void L3G4200D_write(unsigned int a, unsigned int b)
{
while(!(SPI1_SR & 0X02));
SPI1_DR = a;
while(!(SPI1_SR & 0X02));
SPI1_DR = b;
}
long int L3G4200D_read(unsigned int m, unsigned int n)
{
while(!(SPI1_SR & 0X02));
SPI1_DR = m | 0X80; //read signal
while(!(SPI1_SR & 0X02));
SPI1_DR = n;
while(!(SPI1_SR & 0X01));
a[0] = SPI1_DR;
// while(!(SPI1_SR & 0X01));
a[0] |= SPI1_DR << 8;
return (a[0]);
}
void L3G4200D_init()
{
L3G4200D_write(0x20,0x4f); //CTRL_REG1
L3G4200D_write(0x21,0x20);
L3G4200D_write(0x24,0x10);
}
int main( void )
{
IO_init();
PD_ODR &= ~MASK_PD_ODR_ODR7; //CE=0;open
SPI1_MOSI_init();
L3G4200D_init();
index = L3G4200D_read(0X0F,0X00);
while(1)
{
}
}
求教............我错在哪里................被陀螺仪玩了2天吃不消了....... |