該代碼是磁力計stm32控制QMC5883L磁力計輸出角度與三個磁力分量,某寶一些標記有hmc5883L模塊實際是QMC5883L,輸出角度一直是45的可以試一下,你會感謝我的
單片機源程序如下:
- #include "HMC5883L.h"
- #include "I2C.h"
- #include "delay.h"
- void hmc_write_reg(u8 reg,u8 data)
- {
- IIC_Start();
- IIC_Send_Byte(WRITE_ADDRESS);
- IIC_Wait_Ack();
- IIC_Send_Byte(reg);
- IIC_Wait_Ack();
- IIC_Send_Byte(data);
- IIC_Wait_Ack();
- IIC_Stop();
- //delay_ms(5);
- }
- u8 hmc_read_reg(u8 reg)
- {
- u8 data;
- IIC_Start();
- IIC_Send_Byte(WRITE_ADDRESS);
- IIC_Wait_Ack();
- IIC_Send_Byte(reg);
- IIC_Wait_Ack();
- IIC_Stop();
- IIC_Start();
- IIC_Send_Byte(READ_ADDRESS);
- IIC_Wait_Ack();
- data=IIC_Read_Byte();
- IIC_NAck();
- IIC_Stop();
- return data;
- }
- void hmc_read_XYZ(short int *data)
- {
- // u16 temp;
- // temp=hmc_read_reg(DATAX_M);
- // *data++=(temp<<8)+hmc_read_reg(DATAX_L);
- // temp=hmc_read_reg(DATAY_M);
- // *data++=(temp<<8)+hmc_read_reg(DATAY_L);
- // temp=hmc_read_reg(DATAZ_M);
- // *data++=(temp<<8)+hmc_read_reg(DATAZ_L);
- *data++=((int16_t)hmc_read_reg(DATAX_M)<<8)|hmc_read_reg(DATAX_L);
- *data++=((int16_t)hmc_read_reg(DATAY_M)<<8)|hmc_read_reg(DATAY_L);
- *data++=((int16_t)hmc_read_reg(DATAZ_M)<<8)|hmc_read_reg(DATAZ_L);
- }
- void hmc_init(void)
- {
- hmc_write_reg(0X0B,0x01);
- hmc_write_reg(0X20,0x40);
- hmc_write_reg(0X21,0x01);
- hmc_write_reg(CONFIGA,0x1D);
- delay_ms(10);
- }
復制代碼
- #include "stm32f10x.h"
- #include "I2C.h"
- #include "HMC5883L.h"
- #include "delay.h"
- #include "math.h"
- #include "usart.h"
- //連接引腳PA8(SCL)PA11(SDA)
- short int data[3];
- double angle,x,y,z;
- int main(void)
- {
- delay_init();
- i2c_init();
- hmc_init();
- uart_init(115200);
- while(1)
- {
- hmc_read_XYZ(data);
- angle=atan2((double)data[0],(double)data[2])*(180 / 3.14159265)+180;
- x=(double)data[0];
- y=(double)data[1];
- z=(double)data[2];
- printf("%f %f %f %f\r\n",x,y,z,angle);
- delay_ms(100);
- }
- }
復制代碼
所有資料51hei提供下載:
STM32F1_QMC5883L.7z
(3.13 MB, 下載次數: 347)
2019-7-15 15:48 上傳
點擊文件名下載附件
|