OpenEdv-开源电子网

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

国产电子罗盘QMC5883L基于STM32

[复制链接]

9

主题

33

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3464
金钱
3464
注册时间
2019-5-15
在线时间
258 小时
发表于 2019-6-2 11:38:10 | 显示全部楼层 |阅读模式
网上很多HMC5883L的程序,没找到国产的QMC5883的程序,自己在HMC5883上面修改最终弄出来的QMC5883,共同学习,相互探讨。
#include "include.h"
u8 IIC_buf[14];
void QMC5883L_I2C_Init_IO(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;       
       
        RCC_APB2PeriphClockCmd(QMC5883L_I2C_RCC_APBxPeriph_GPIOx,ENABLE);

        GPIO_InitStructure.GPIO_Pin=QMC5883L_I2C_SCL|QMC5883L_I2C_SDA;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_Init(QMC5883L_GPIO_I2C,&GPIO_InitStructure);

        QMC5883L_I2C_SCL_H;
        QMC5883L_I2C_SDA_H;
}

void QMC5883L_I2C_SDA_OUT()
{
     GPIO_InitTypeDef GPIO_InitStructure;       
       
        GPIO_InitStructure.GPIO_Pin=QMC5883L_I2C_SDA;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_Init(QMC5883L_GPIO_I2C,&GPIO_InitStructure);
}


void QMC5883L_I2C_SDA_IN(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;       
       
        GPIO_InitStructure.GPIO_Pin=QMC5883L_I2C_SDA;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
        GPIO_Init(QMC5883L_GPIO_I2C,&GPIO_InitStructure);
}

//产生起始信号
void QMC5883L_I2C_Start(void)
{
     QMC5883L_I2C_SDA_OUT();
       
        QMC5883L_I2C_SDA_H;
        QMC5883L_I2C_SCL_H;
        delay_us(4);
        QMC5883L_I2C_SDA_L;
        delay_us(4);
        QMC5883L_I2C_SCL_L;
}

//产生停止信号
void QMC5883L_I2C_Stop(void)
{
   QMC5883L_I2C_SDA_OUT();

   QMC5883L_I2C_SCL_L;
   QMC5883L_I2C_SDA_L;
   delay_us(4);
   QMC5883L_I2C_SCL_H;
   QMC5883L_I2C_SDA_H;
   delay_us(4);
}

//主机产生应答信号ACK
void QMC5883L_I2C_Ack(void)
{
   QMC5883L_I2C_SCL_L;
   QMC5883L_I2C_SDA_OUT();
   QMC5883L_I2C_SDA_L;
   delay_us(2);
   QMC5883L_I2C_SCL_H;
   delay_us(2);
   QMC5883L_I2C_SCL_L;
}

//主机不产生应答信号NACK
void QMC5883L_I2C_NAck(void)
{
   QMC5883L_I2C_SCL_L;
   QMC5883L_I2C_SDA_OUT();
   QMC5883L_I2C_SDA_H;
   delay_us(2);
   QMC5883L_I2C_SCL_H;
   delay_us(2);
   QMC5883L_I2C_SCL_L;
}
//等待从机应答信号
//返回值:1 接收应答失败
//                  0 接收应答成功
u8 QMC5883L_I2C_Wait_Ack(void)
{
        u8 tempTime=0;

        QMC5883L_I2C_SDA_IN();

        QMC5883L_I2C_SDA_H;
        delay_us(1);
        QMC5883L_I2C_SCL_H;
        delay_us(1);

        while(GPIO_ReadInputDataBit(QMC5883L_GPIO_I2C,QMC5883L_I2C_SDA))
        {
                tempTime++;
                if(tempTime>250)
                {
                        QMC5883L_I2C_Stop();
                        return 1;
                }         
        }

        QMC5883L_I2C_SCL_L;
        return 0;
}
//I2C 发送一个字节
void QMC5883L_I2C_Send_Byte(u8 txd)
{
        u8 i=0;

        QMC5883L_I2C_SDA_OUT();
        QMC5883L_I2C_SCL_L;//拉低时钟开始数据传输

        for(i=0;i<8;i++)
        {
                if((txd&0x80)>0) //0x80  1000 0000
                        QMC5883L_I2C_SDA_H;
                else
                        QMC5883L_I2C_SDA_L;

                txd<<=1;
                QMC5883L_I2C_SCL_H;
                delay_us(2); //发送数据
                QMC5883L_I2C_SCL_L;
                delay_us(2);
        }
}

//I2C 读取一个字节

u8 QMC5883L_I2C_Read_Byte(void)
{
   u8 i=0,receive=0;

   QMC5883L_I2C_SDA_IN();
   for(i=0;i<8;i++)
   {
                   QMC5883L_I2C_SCL_L;
                delay_us(2);
                QMC5883L_I2C_SCL_H;
                receive<<=1;
                if(GPIO_ReadInputDataBit(QMC5883L_GPIO_I2C,QMC5883L_I2C_SDA))
                   receive++;
                delay_us(1);       
   }
        return receive;
}





HMC5883.rar

3.57 KB, 下载次数: 266

1234

梦想!是个神奇的东西!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2017-9-5
在线时间
78 小时
发表于 2022-3-16 09:17:46 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

286

帖子

0

精华

高级会员

Rank: 4

积分
949
金钱
949
注册时间
2018-4-21
在线时间
264 小时
发表于 2023-5-14 11:28:51 来自手机 | 显示全部楼层
感谢分享,看看
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 09:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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