找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2230|回复: 0
收起左侧

HMC5883+MPU6050+STM32智能车(简单款)源程序

[复制链接]
ID:640768 发表于 2021-8-6 10:43 | 显示全部楼层 |阅读模式
#include "include.h"

#include  <math.h>

uint8_t BUF[8];
double angle;
int16_t X_HMC,Y_HMC,Z_HMC,x,y,z;
int16_t x_offest=10,y_offest=175;
double y_gain=0.967;

//******************************************************
//连续读出HMC5883内部角度数据,地址范围0x3~0x5
//******************************************************
void Multiple_Read_HMC5883L(void)
{         
    u8 i;
    I2C_Start();                          //起始信号
    I2C_SendByte(HMC5883L_ADDRESS);                   //发送设备地址+写信号
      I2C_WaitAck();
    I2C_SendByte(0x03);                   //发送存储单元地址,从0x3开始   
      I2C_WaitAck();
    I2C_Start();                          //起始信号
    I2C_SendByte(HMC5883L_ADDRESS+1);     //发送设备地址+读信号
      I2C_WaitAck();
      for (i=0; i<6; i++)                   //连续读取6个地址数据,存储中BUF
    {
        BUF[ i] = I2C_RadeByte();          //BUF[0]存储数据
        if (i == 5)
           I2C_NoAck();                   //最后一个数据需要回NOACK
        else
           I2C_Ack();                     //回应ACK
    }
    I2C_Stop();                           //停止信号
    delay5ms();

    x=BUF[0] << 8 | BUF[1]; //Combine MSB and LSB of X Data output register
    z=BUF[2] << 8 | BUF[3]; //Combine MSB and LSB of Z Data output register
    y=BUF[4] << 8 | BUF[5]; //Combine MSB and LSB of Y Data output register

    X_HMC = 1 *(x + x_offest);
    Y_HMC = (double)(y_gain * (y +y_offest));
    Z_HMC = (double)(1.073 * (z +30));

    angle= atan2((double)Y_HMC,(double)X_HMC) * (180 / 3.14159265) + 180; // angle in degrees
    angle*=-10;
}      

void Init_HMC5883L()
{
     Single_Write(HMC5883L_ADDRESS,0x02,0x00);  
}

  1. #include "include.h"



  2. int main(void)
  3. {
  4.           SystemInit();
  5.           delay_init(72);
  6.           LED_Init();
  7.           //OLED_Init();
  8.           //Draw_LibLogo();
  9.           KEY_Init();
  10.           //ADC1_Init();
  11.           delay(0XFFF);
  12.           I2C_INIT();
  13.           delay(0XFFF);
  14.           InitMPU6050();      //MPU6050初始化
  15.           //Init_HMC5883L();    //地磁初始化
  16.          // MS5611_Init();
  17.           //TIM4_Cap_Init();    //PWM输入捕获初始化
  18.                 TIM4_Cap_Init(100,72);
  19.     //Moto_Init();                    //电机初始化
  20.           Nvic_Init();     
  21.           usart1_config();    //串口1初始化
  22.           //usart3_config();    //串口3初始化
  23.           delay(0XFFF);
  24.           //ALGH_set();         //设置油门形成
  25.                 //OLED_Fill(0x00);
  26.           TIM6_Init(1000);          //定时2.5MS  
  27.                 TIM3_Init(1);
  28.                 TIM2_Init(1);
  29.           //PID_INIT();         //加载PID参数
  30.     while(1)
  31.           {     
  32.                         //TODO
  33. //                        if(getLIR())
  34. //                        {
  35. //                                LED1(ON);LED2(OFF);LED3(ON);LED4(OFF);
  36. //                        }
  37. //                        else
  38. //                        {
  39. //                        LED1(OFF);LED2(OFF);LED3(OFF);LED4(OFF);
  40. //                        }
  41.                         
  42.           }
  43. }



复制代码

初学电子,如有错误,请大家多多指导,代码仅供参考: stm32-smart-car-20200509.7z (210.06 KB, 下载次数: 47)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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