找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3150|回复: 0
打印 上一主题 下一主题
收起左侧

hmc5883l+ADXL345+BMP085 stm32驱动程序

[复制链接]
跳转到指定楼层
楼主
ID:163531 发表于 2017-2-5 14:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /*******************************************************************************
  2. HMC5883L + ADXL345 + BMP085 驱动函数
  3. 注意初始化PB6、PB7接口,配置RCC GPIO NVIC
  4. *******************************************************************************/
  5. #include "stm32f10x.h"
  6. #include "HMC5883L.h"
  7. #include "printf.h"
  8. #include  <math.h>    //Keil library  

  9. #define   uchar unsigned char
  10. #define   uint unsigned int      
  11. #define   OSS 0         //        BMP085使用

  12. #define        HMC5883L_Addr   0x3C        //器件地址
  13. //#define        HMC5883L_Addr_read   0x3d        //器件地址

  14. #define        ADXL345_Addr    0xA6        //器件地址

  15. #define        BMP085_Addr     0xee        //器件地址,写
  16. //#define        BMP085_Addr_read     0xef        //器件地址,读

  17. unsigned char BUF[8];                         //接收数据缓存区
  18. char  test=0;
  19. int   x,y;
  20. float angle;
  21. u8 ge,shi,bai,qian,wan,shiwan;           //显示变量
  22. int A_X,A_Y,A_Z;
  23. //***BMP085使用
  24. short ac1=408;
  25. short ac2=-72;
  26. short ac3=-14383;
  27. unsigned short ac4=32741;
  28. unsigned short ac5=32757;
  29. unsigned short ac6=23153;
  30. short b1=6190;
  31. short b2=4;
  32. short mb=32768;
  33. short mc=-8711;
  34. short md=2868;

  35. long  temperature;
  36. long  pressure;
  37. //********
  38. //************************************++++++++++++++++++++++++++++++++
  39. /*模拟IIC端口输出输入定义*/
  40. #define SCL_H         GPIOB->BSRR = GPIO_Pin_6
  41. #define SCL_L         GPIOB->BRR  = GPIO_Pin_6

  42. #define SDA_H         GPIOB->BSRR = GPIO_Pin_7
  43. #define SDA_L         GPIOB->BRR  = GPIO_Pin_7

  44. #define SCL_read      GPIOB->IDR  & GPIO_Pin_6
  45. #define SDA_read      GPIOB->IDR  & GPIO_Pin_7

  46. void module_init(void)
  47. {
  48.           I2C_GPIO_Config();
  49.           Init_HMC5883L();
  50.           Init_ADXL345();
  51.           Init_BMP085();
  52. }

  53. void conversion(long temp_data)  
  54. {     
  55.     shiwan=temp_data/100000+0x30 ;
  56.     temp_data=temp_data%100000;   //取余运算
  57.     wan=temp_data/10000+0x30 ;
  58.     temp_data=temp_data%10000;   //取余运算
  59.         qian=temp_data/1000+0x30 ;
  60.     temp_data=temp_data%1000;    //取余运算
  61.     bai=temp_data/100+0x30   ;
  62.     temp_data=temp_data%100;     //取余运算
  63.     shi=temp_data/10+0x30    ;
  64.     temp_data=temp_data%10;      //取余运算
  65.     ge=temp_data+0x30;        
  66. }
  67. /*******************************************************************************
  68. * Function Name  : I2C_GPIO_Config
  69. * Description    : Configration Simulation IIC GPIO
  70. * Input          : None
  71. * Output         : None
  72. * Return         : None
  73. ****************************************************************************** */
  74. void I2C_GPIO_Config(void)
  75. {
  76.   GPIO_InitTypeDef  GPIO_InitStructure;

  77.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6;
  78.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  79.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;  
  80.   GPIO_Init(GPIOB, &GPIO_InitStructure);

  81.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
  82.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  83.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  84.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  85. }

  86. /*******************************************************************************
  87. * Function Name  : I2C_delay
  88. * Description    : Simulation IIC Timing series delay
  89. * Input          : None
  90. * Output         : None
  91. * Return         : None
  92. ****************************************************************************** */
  93. void I2C_delay(void)
  94. {               
  95.    u8 i=15; //这里可以优化速度        ,经测试最低到5还能写入
  96.    while(i)
  97.    {
  98.      i--;
  99.    }  
  100. }

  101. void delay5ms(void)
  102. {
  103.                
  104.    int i=5000;  
  105.    while(i)
  106.    {
  107.      i--;
  108.    }  
  109. }
  110. /*******************************************************************************
  111. * Function Name  : I2C_Start
  112. * Description    : Master Start Simulation IIC Communication
  113. * Input          : None
  114. * Output         : None
  115. * Return         : Wheather         Start
  116. ****************************************************************************** */
  117. bool I2C_Start(void)
  118. {
  119.         SDA_H;
  120.         SCL_H;
  121.         I2C_delay();
  122.         if(!SDA_read)return FALSE;        //SDA线为低电平则总线忙,退出
  123.         SDA_L;
  124.         I2C_delay();
  125.         if(SDA_read) return FALSE;        //SDA线为高电平则总线出错,退出
  126.         SDA_L;
  127.         I2C_delay();
  128.         return TRUE;
  129. }
  130. /*******************************************************************************
  131. * Function Name  : I2C_Stop
  132. * Description    : Master Stop Simulation IIC Communication
  133. * Input          : None
  134. * Output         : None
  135. * Return         : None
  136. ****************************************************************************** */
  137. void I2C_Stop(void)
  138. {
  139.         SCL_L;
  140.         I2C_delay();
  141.         SDA_L;
  142.         I2C_delay();
  143.         SCL_H;
  144.         I2C_delay();
  145.         SDA_H;
  146.         I2C_delay();
  147. }
  148. /*******************************************************************************
  149. * Function Name  : I2C_Ack
  150. * Description    : Master Send Acknowledge Single
  151. * Input          : None
  152. * Output         : None
  153. * Return         : None
  154. ****************************************************************************** */
  155. void I2C_Ack(void)
  156. {      
  157.         SCL_L;
  158.         I2C_delay();
  159.         SDA_L;
  160.         I2C_delay();
  161.         SCL_H;
  162.         I2C_delay();
  163.         SCL_L;
  164.         I2C_delay();
  165. }   
  166. /*******************************************************************************
  167. * Function Name  : I2C_NoAck
  168. * Description    : Master Send No Acknowledge Single
  169. * Input          : None
  170. * Output         : None
  171. * Return         : None
  172. ****************************************************************************** */
  173. void I2C_NoAck(void)
  174. {      
  175.         SCL_L;
  176.         I2C_delay();
  177.         SDA_H;
  178.         I2C_delay();
  179.         SCL_H;
  180.         I2C_delay();
  181.         SCL_L;
  182.         I2C_delay();
  183. }
  184. /*******************************************************************************
  185. * Function Name  : I2C_WaitAck
  186. * Description    : Master Reserive Slave Acknowledge Single
  187. * Input          : None
  188. * Output         : None
  189. * Return         : Wheather         Reserive Slave Acknowledge Single
  190. ****************************************************************************** */
  191. bool I2C_WaitAck(void)          //返回为:=1有ACK,=0无ACK
  192. {
  193.         SCL_L;
  194.         I2C_delay();
  195.         SDA_H;                       
  196.         I2C_delay();
  197.         SCL_H;
  198.         I2C_delay();
  199.         if(SDA_read)
  200.         {
  201.       SCL_L;
  202.           I2C_delay();
  203.       return FALSE;
  204.         }
  205.         SCL_L;
  206.         I2C_delay();
  207.         return TRUE;
  208. }
  209. /*******************************************************************************
  210. * Function Name  : I2C_SendByte
  211. * Description    : Master Send a Byte to Slave
  212. * Input          : Will Send Date
  213. * Output         : None
  214. * Return         : None
  215. ****************************************************************************** */
  216. void I2C_SendByte(u8 SendByte) //数据从高位到低位//
  217. {
  218.     u8 i=8;
  219.     while(i--)
  220.     {
  221.         SCL_L;
  222.         I2C_delay();
  223.       if(SendByte&0x80)
  224.         SDA_H;  
  225.       else
  226.         SDA_L;   
  227.         SendByte<<=1;
  228.         I2C_delay();
  229.                 SCL_H;
  230.         I2C_delay();
  231.     }
  232.     SCL_L;
  233. }  
  234. /*******************************************************************************
  235. * Function Name  : I2C_RadeByte
  236. * Description    : Master Reserive a Byte From Slave
  237. * Input          : None
  238. * Output         : None
  239. * Return         : Date From Slave
  240. ****************************************************************************** */
  241. unsigned char I2C_RadeByte(void)  //数据从高位到低位//
  242. {
  243.     u8 i=8;
  244.     u8 ReceiveByte=0;

  245.     SDA_H;                              
  246.     while(i--)
  247.     {
  248.       ReceiveByte<<=1;      
  249.       SCL_L;
  250.       I2C_delay();
  251.           SCL_H;
  252.       I2C_delay();      
  253.       if(SDA_read)
  254.       {
  255.         ReceiveByte|=0x01;
  256.       }
  257.     }
  258.     SCL_L;
  259.     return ReceiveByte;
  260. }
  261. //ZRX         
  262. //单字节写入*******************************************

  263. bool Single_Write(unsigned char SlaveAddress,unsigned char REG_Address,unsigned char REG_data)                     //void
  264. {
  265.           if(!I2C_Start())return FALSE;
  266.     I2C_SendByte(SlaveAddress);   //发送设备地址+写信号//I2C_SendByte(((REG_Address & 0x0700) >>7) | SlaveAddress & 0xFFFE);//设置高起始地址+器件地址
  267.     if(!I2C_WaitAck()){I2C_Stop(); return FALSE;}
  268.     I2C_SendByte(REG_Address );   //设置低起始地址      
  269.     I2C_WaitAck();      
  270.     I2C_SendByte(REG_data);
  271.     I2C_WaitAck();   
  272.     I2C_Stop();
  273.     delay5ms();
  274.     return TRUE;
  275. }

  276. //单字节读取*****************************************
  277. unsigned char Single_Read(unsigned char SlaveAddress,unsigned char REG_Address)
  278. {   unsigned char REG_data;            
  279.         if(!I2C_Start())return FALSE;
  280.     I2C_SendByte(SlaveAddress); //I2C_SendByte(((REG_Address & 0x0700) >>7) | REG_Address & 0xFFFE);//设置高起始地址+器件地址
  281.     if(!I2C_WaitAck()){I2C_Stop();test=1; return FALSE;}
  282.     I2C_SendByte((u8) REG_Address);   //设置低起始地址      
  283.     I2C_WaitAck();
  284.     I2C_Start();
  285.     I2C_SendByte(SlaveAddress+1);
  286.     I2C_WaitAck();

  287.         REG_data= I2C_RadeByte();
  288.     I2C_NoAck();
  289.     I2C_Stop();
  290.     //return TRUE;
  291.         return REG_data;

  292. }                                                     


  293. /*
  294. ********************************************************************************
  295. ** 函数名称 : WWDG_Configuration(void)
  296. ** 函数功能 : 看门狗初始化
  297. ** 输    入        : 无
  298. ** 输    出        : 无
  299. ** 返    回        : 无
  300. ********************************************************************************
  301. */
  302. /*void WWDG_Configuration(void)
  303. {
  304.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);      
  305.   WWDG_SetPrescaler(WWDG_Prescaler_8);                      //  WWDG clock counter = (PCLK1/4096)/8 = 244 Hz (~4 ms)  
  306.   WWDG_SetWindowValue(0x41);                                 // Set Window value to 0x41
  307.   WWDG_Enable(0x50);                       // Enable WWDG and set counter value to 0x7F, WWDG timeout = ~4 ms * 64 = 262 ms
  308.   WWDG_ClearFlag();                               // Clear EWI flag
  309.   WWDG_EnableIT();                               // Enable EW interrupt
  310. }
  311. */

  312. void Delay(vu32 nCount)
  313. {
  314.   for(; nCount != 0; nCount--);
  315. }

  316. void Delayms(vu32 m)
  317. {
  318.   u32 i;

  319.   for(; m != 0; m--)      
  320.        for (i=0; i<50000; i++);
  321. }

  322. ///*
  323. //********************************************************************************
  324. //** 函数名称 : WWDG_IRQHandler(void)
  325. //** 函数功能 : 窗口提前唤醒中断
  326. //** 输    入        : 无
  327. //** 输    出        : 无
  328. //** 返    回        : 无
  329. //********************************************************************************
  330. //*/
  331. //
  332. //void WWDG_IRQHandler(void)
  333. //{
  334. //  /* Update WWDG counter */
  335. //  WWDG_SetCounter(0x50);
  336. //      
  337. //  /* Clear EWI flag */
  338. //  WWDG_ClearFlag();
  339. //  
  340. //}
  341.       

  342. //********************************************************************
  343. long bmp085ReadTemp(void)
  344. {   short  temp_ut;
  345.         Single_Write(BMP085_Addr,0xF4,0x2E);
  346.         Delayms(2);        // max time is 4.5ms
  347.         temp_ut = Single_Read(BMP085_Addr,0xF6);
  348.         temp_ut = (temp_ut<<8)| Single_Read(BMP085_Addr,0xF7);               
  349.         return (long) temp_ut ;
  350. }
  351. //*************************************************************

  352. long bmp085ReadPressure(void)
  353. {
  354.         long pressure = 0;
  355.         long mid=0;
  356.         Single_Write(BMP085_Addr,0xF4,0x34);
  357.         Delayms(2);        // max time is 4.5ms
  358.         pressure = Single_Read(BMP085_Addr,0xF6);
  359.         pressure = (pressure<<8)| Single_Read(BMP085_Addr,0xF7);
  360.         mid=Single_Read(BMP085_Addr,0xF8);
  361.         pressure=(pressure<<8)|        mid;      
  362. //        pressure &= 0x0000FFFF;      
  363.         return pressure;      
  364. }

  365. //******************
  366. void Send_ADXL345_data(int dis_data)
  367. { float temp ;
  368.         if(dis_data>0x7fff)dis_data-=0xffff;
  369.         if(dis_data<0)
  370.         {
  371.                dis_data=-dis_data;
  372.              USART_SendData(USART1,'-');
  373.                  Delayms(2);
  374.         }
  375.         else
  376.           {
  377.            USART_SendData(USART1,'+');
  378.            Delayms(2);
  379.           }
  380.         temp=(float)dis_data*3.9;  //计算数据和显示,查考ADXL345快速入门第4页
  381.         conversion(temp);          //转换出显示需要的数据         
  382. //            Usart1_SendData(qian);
  383. //                Usart1_SendData('.');
  384. //            Usart1_SendData(bai);
  385. //            USART1_SendData(shi);
  386. //            USART1_SendData(ge);
  387. //                USART1_SendData('g');
  388.                 printf(" %u . %u %u %u g \r\n",qian,bai,shi,ge);
  389. }
  390. //***************************************


  391. //*************************************************
  392. //*****************************************************

  393. //******************************************************
  394. void read_hmc5883l(void)
  395. {
  396.        Single_Write(HMC5883L_Addr,0x00,0x14);   //
  397.        Single_Write(HMC5883L_Addr,0x01,0x20);   //配置寄存器B,增益比1090counts/gauss
  398.        Single_Write(HMC5883L_Addr,0x02,0x00);   //
  399.              Delayms(10);

  400.        BUF[1]=Single_Read(HMC5883L_Addr,0x03);//OUT_X_H_A
  401.        BUF[2]=Single_Read(HMC5883L_Addr,0x04);//OUT_X_L_A

  402.            BUF[3]=Single_Read(HMC5883L_Addr,0x07);//OUT_Y_H_A
  403.        BUF[4]=Single_Read(HMC5883L_Addr,0x08);//OUT_Y_L_A

  404.        x=(BUF[1] << 8) | BUF[2]; //Combine MSB and LSB of X Data output register
  405.        y=(BUF[3] << 8) | BUF[4]; //Combine MSB and LSB of Z Data output register

  406.        if(x>0x7fff)  x-=0xffff;         
  407.        if(y>0x7fff)  y-=0xffff;         
  408.        angle= atan2(y,x) * (180 / 3.14159265) + 180; // angle in degrees
  409. }
  410. void Send_HMC5883L()
  411. {
  412.         conversion(angle);
  413.         printf(" HMC5883L angle=%f \r\n",angle);
  414. //        printf(" HMC5883L: %d %d %d \r\n",bai,shi,ge);
  415.         printf(" HMC5883L Over \r\n");
  416. }

  417. //****************************************
  418. void read_ADXL345(void)
  419. {

  420.        BUF[0]=Single_Read(ADXL345_Addr,0x32);//OUT_X_L_A
  421.        BUF[1]=Single_Read(ADXL345_Addr,0x33);//OUT_X_H_A

  422.            BUF[2]=Single_Read(ADXL345_Addr,0x34);//OUT_Y_L_A
  423.        BUF[3]=Single_Read(ADXL345_Addr,0x35);//OUT_Y_H_A

  424.            BUF[4]=Single_Read(ADXL345_Addr,0x36);//OUT_Z_L_A
  425.        BUF[5]=Single_Read(ADXL345_Addr,0x37);//OUT_Z_H_A

  426.            A_X=(BUF[1]<<8)+BUF[0];  //合成数据  
  427.            A_Y=(BUF[3]<<8)+BUF[2];  //合成数据
  428.            A_Z=(BUF[5]<<8)+BUF[4];  //合成数据
  429. }
  430. void  Send_ADXL345()
  431. {
  432.            printf(" ADXL345: X=%u  Y=%u  Z=%u \r\n",A_X,A_Y,A_Z);
  433. //           Send_ADXL345_data(A_X);
  434. //           USART1_SendData('Y');
  435. //           USART1_SendData('=');
  436. //           Send_ADXL345_data(A_Y);
  437. //           USART1_SendData('Z');
  438. //           USART1_SendData('=');
  439. //           Send_ADXL345_data(A_Z);
  440.            printf(" ADXL345 Over \r\n");
  441. }

  442. //*****************************************
  443. void read_BMP085(void)
  444. {
  445.            long ut;
  446.         long up;
  447.         long x1, x2, b5, b6, x3, b3, p;
  448.         unsigned long b4, b7;

  449. //        ac6=Single_Read(BMP085_Addr,0xB4);
  450. //        ac6=(ac6<<8)|Single_Read(BMP085_Addr_read,0xB5);
  451. //        ac5=Single_Read(BMP085_Addr_read,0xB2);
  452. //        ac5=(ac5<<8)|Single_Read(BMP085_Addr_read,0xB3);
  453. //        ac4=Single_Read(BMP085_Addr_read,0xB0);
  454. //        ac4=(ac4<<8)|Single_Read(BMP085_Addr_read,0xB1);
  455. //        ac3=Single_Read(BMP085_Addr_read,0xAE);
  456. //        ac3=(ac3<<8)|Single_Read(BMP085_Addr_read,0xAF);
  457. //        ac2=Single_Read(BMP085_Addr_read,0xAC);
  458. //        ac2=(ac2<<8)|Single_Read(BMP085_Addr_read,0xAD);
  459. //        ac1=Single_Read(BMP085_Addr_read,0xAA);
  460. //        ac1=(ac1<<8)|Single_Read(BMP085_Addr_read,0xAB);
  461.         ut = bmp085ReadTemp();           // 读取温度
  462.         up = bmp085ReadPressure();  // 读取压强
  463.         printf(" T=%f  P=%f  \r\n",ut,up);
  464.         x1 = ((long)ut - ac6) * ac5 >> 15;
  465.         x2 = ((long) mc << 11) / (x1 + md);
  466.         b5 = x1 + x2;
  467.         temperature = (b5 + 8) >> 4;
  468.       
  469.         b6 = b5 - 4000;
  470.         x1 = (b2 * (b6 * b6 >> 12)) >> 11;
  471.         x2 = ac2 * b6 >> 11;
  472.         x3 = x1 + x2;
  473.         b3 = (((long)ac1 * 4 + x3) + 2)/4;
  474.         x1 = ac3 * b6 >> 13;
  475.         x2 = (b1 * (b6 * b6 >> 12)) >> 16;
  476.         x3 = ((x1 + x2) + 2) >> 2;
  477.         b4 = (ac4 * (unsigned long) (x3 + 32768)) >> 15;
  478.         b7 = ((unsigned long) up - b3) * (50000 >> OSS);
  479.         if( b7 < 0x80000000)
  480.              p = (b7 * 2) / b4 ;
  481.            else  
  482.                     p = (b7 / b4) * 2;
  483.         x1 = (p >> 8) * (p >> 8);
  484.         x1 = (x1 * 3038) >> 16;
  485.         x2 = (-7357 * p) >> 16;
  486.          pressure = p + ((x1 + x2 + 3791) >> 4);
  487. }
  488. void  Send_BMP085()
  489. {
  490.         conversion(temperature);
  491.         printf(" temperature=%f \r\n",temperature);
  492. //        printf(" BMP085: T=%u %u . %u Degree \r\n",bai,shi,ge);
  493.         conversion(pressure);
  494.         printf(" pressure=%f KPa \r\n",pressure);
  495. //        printf(" P=%u %u %u . %u %u %u KPa \r\n",shiwan,wan,qian,bai,shi,ge);
  496.         printf(" BMP085 Over \r\n");      
  497. }

  498. //***************************
  499. void  Init_ADXL345(void)
  500. {
  501.    Single_Write(ADXL345_Addr,0x31,0x0B);   //测量范围,正负16g,13位模式
  502.    Single_Write(ADXL345_Addr,0x2C,0x0e);   //速率设定为100hz 参考pdf13页
  503.    Single_Write(ADXL345_Addr,0x2D,0x08);   //选择电源模式   参考pdf24页
  504.    Single_Write(ADXL345_Addr,0x2E,0x80);   //使能 DATA_READY 中断
  505.   // Single_Write(ADXL345_Addr,0x1E,0x00);   //X 偏移量 根据测试传感器的状态写入pdf29页
  506.   // Single_Write(ADXL345_Addr,0x1F,0x00);   //Y 偏移量 根据测试传感器的状态写入pdf29页
  507.   // Single_Write(ADXL345_Addr,0x20,0x05);   //Z 偏移量 根据测试传感器的状态写入pdf29页
  508.   printf(" ADXL345_initial \r\n");
  509. }
  510. //****************************
  511. void  Init_BMP085(void)
  512. {
  513.         ac1 = Single_Read(BMP085_Addr,0xAA);
  514.         ac1 = (ac1<<8)|Single_Read(BMP085_Addr,0xAB);

  515.     ac2 = Single_Read(BMP085_Addr,0xAC);
  516.         ac2 = (ac2<<8)| Single_Read(BMP085_Addr,0xAD);

  517.         ac3 = Single_Read(BMP085_Addr,0xAE);
  518.         ac3 = (ac3<<8)| Single_Read(BMP085_Addr,0xAF);

  519.         ac4 = Single_Read(BMP085_Addr,0xB0);
  520.         ac4 = (ac4<<8)| Single_Read(BMP085_Addr,0xB1);

  521.         ac5 = Single_Read(BMP085_Addr,0xB2);
  522.         ac5 = (ac5<<8)| Single_Read(BMP085_Addr,0xB3);

  523.         ac6 = Single_Read(BMP085_Addr,0xB4);
  524.         ac6 = (ac6<<8)| Single_Read(BMP085_Addr,0xB5);

  525.         b1 = Single_Read(BMP085_Addr,0xB6);
  526.         b1 = (b1<<8)| Single_Read(BMP085_Addr,0xB7);

  527.         b2 = Single_Read(BMP085_Addr,0xB8);
  528.         b2 = (b2<<8)| Single_Read(BMP085_Addr,0xB9);

  529.         mb = Single_Read(BMP085_Addr,0xBA);
  530.         mb = (mb<<8)| Single_Read(BMP085_Addr,0xBB);

  531.         mc = Single_Read(BMP085_Addr,0xBC);
  532.         mc = (mc<<8)| Single_Read(BMP085_Addr,0xBD);

  533.         md = Single_Read(BMP085_Addr,0xBE);
  534.         md = (md<<8)| Single_Read(BMP085_Addr,0xBF);
  535.    printf(" BMP085_initial \r\n");
  536. }
  537. //****************************
  538. void  Init_HMC5883L(void)
  539. {
  540.    Single_Write(HMC5883L_Addr,0x00,0x14);   //配置寄存器A,速率30Hz
  541.    Single_Write(HMC5883L_Addr,0x01,0x20);   //配置寄存器B,增益比1090counts/gauss
  542.    Single_Write(HMC5883L_Addr,0x02,0x00);   //连续测量模式
  543.    printf(" HMC5883L_initial \r\n");
  544. }


  545. //int main(void)
  546. //{
  547. //  RCC_Configuration();
  548. //  GPIO_Configuration();
  549. //  USART1_Configuration();
  550. //  I2C_GPIO_Config();
  551. //
  552. //  Init_HMC5883L();
  553. //  Init_ADXL345();
  554. //  Init_BMP085();
  555. //
  556. //  while(1)
  557. // {
  558. //        read_hmc5883l();
  559. //       Send_HMC5883L();
  560. //        read_ADXL345();
  561. //           Send_ADXL345();
  562. //        read_BMP085();                  
  563. //           Send_BMP085();               
  564. //        Delayms(300);      
  565. //  }
  566. //}
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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