OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7557|回复: 4

原子哥........帮我看看吧........要被玩死了

[复制链接]

22

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2012-11-3
在线时间
0 小时
发表于 2012-11-17 11:39:45 | 显示全部楼层 |阅读模式

#include "iostm8l152c6.h"
#include "Gyros.h"

unsigned int EIR=0,status=0,a=0,b=0;
unsigned int x[3],y[3],z[3];

void IO_init()                             //初始化IO口
{
  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()                    //初始化SPI
{
  CLK_CKDIVR = 0X03;   //时钟8KHZ
  CLK_PCKENR1 = 0X10; //开外部时钟门控
  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 char a, unsigned char b)
{
  while(!(SPI1_SR & 0X02));
  SPI1_DR = a;
  while(!(SPI1_SR & 0X02));
  SPI1_DR = b;
}
long int L3G4200D_read(unsigned char m, unsigned char n)
{
  while(!(SPI1_SR & 0X02));
  SPI1_DR = m | 0X80;                //read signal
  while(!(SPI1_SR & 0X02));
  SPI1_DR = n;
  while(!(SPI1_SR & 0X01));
  a = SPI1_DR;
  while(!(SPI1_SR & 0X01));
  b = SPI1_DR;
  a = a | (b << 8);
  return (a);
}
void L3G4200D_init()                  //初始化陀螺仪
{
  L3G4200D_write(L3G4200D_CTRL_REG1,0x4f);    
  L3G4200D_write(L3G4200D_CTRL_REG2,0x20);
  L3G4200D_write(L3G4200D_CTRL_REG5,0x10);
}
void L3G4200D_value_x()                 //读X的值
{
  x[0] = L3G4200D_read(L3G4200D_OUT_X_L,0X00);
  x[1] = L3G4200D_read(L3G4200D_OUT_X_H,0X00);
  x[2] = x[0] | (x[1] << 8);
}
void L3G4200D_value_y()                //读y的值
{
  y[0] = L3G4200D_read(L3G4200D_OUT_Y_L,0X00);
  y[1] = L3G4200D_read(L3G4200D_OUT_Y_H,0X00);
  y[2] = y[0] | (y[1] << 8);
}
void L3G4200D_value_z()               //读z的值
{
  z[0] = L3G4200D_read(L3G4200D_OUT_Z_L,0X00);
  z[1] = L3G4200D_read(L3G4200D_OUT_Z_H,0X00);
  z[2] = z[0] | (z[1] << 8);
}
int main( void )
{
  IO_init();
  PD_ODR &= ~MASK_PD_ODR_ODR7;       //CE=0;open
  //PD_ODR |= MASK_PD_ODR_ODR7;
  SPI1_MOSI_init();
  L3G4200D_init();
  EIR = L3G4200D_read(L3G4200D_WHO_AM_I,0X00);
  status = L3G4200D_read(L3G4200D_STATUS_REG,0X00);
  while(!(status & 0X08));
  if(status & 0X01)
  {
    L3G4200D_value_x();
  }
  if(status & 0X02)
  {
    L3G4200D_value_y();
  }
  if(status & 0X04)
  {
    L3G4200D_value_z();
  }
  while(1)
  {
  }
}
感觉就没有读过gyros,  CE使能和不使能读出来都是65535.          

我决定的事,决定放弃。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

头像被屏蔽

83

主题

134

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
392
金钱
392
注册时间
2011-8-6
在线时间
10 小时
发表于 2012-11-17 14:34:08 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2012-11-17 16:01:27 | 显示全部楼层
楼主,是你玩死代码还是代码把你玩死了啊?
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

22

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2012-11-3
在线时间
0 小时
 楼主| 发表于 2012-11-17 17:34:07 | 显示全部楼层
回复【3楼】Tardis:
---------------------------------
我被玩死了,怎么改都不对................其实我是想玩死它的,奈何奈何.........
我决定的事,决定放弃。
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2012-11-19 09:23:21 | 显示全部楼层
回复【4楼】KFC:
---------------------------------
...
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-18 20:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表