GY-273 三轴电子指南针STM32F1x开发
一、指南针型号
1.1 GY-273 QMC5883L电子指南针罗盘模块 三轴磁场传感器
1.2 模块线的连接
注意:
1)这个模块使用时,焊在板子上才好,不要用杜邦线接,会不灵敏。
2)调试时候,可以杜邦线用一下。
GY-273连接单片机 | |
---|---|
VCC | 5V |
GND | GND |
SCL | PA 11 |
SDA | PA 12 |
DRDY | 不接 |
串口调试模块 | |
---|---|
5V | 5V |
TXD | PA10 |
RXD | PA9 |
GND | GND |
ST-LINK | |
---|---|
SWCLK | 缺口靠左-左排-上至下-第5 个针 |
SWDIO | 缺口靠左-左排-上至下-第4 个针 |
GND | 缺口靠左-右排-上至下-最后1个针 |
3.3v | 缺口靠左-右排-上至下-第2 个针 |
二、程序开发
程序链接:
最新版:点击 3—GY273.zip,去我资源 库里面找 吧。
这版修改了上版的问题,最新的亲测,有效。
上一版(stm32f10x 电子指南针GY-273.zip),做一个参考吧!
2.1 main 函数
#include "stm32f10x.h"
#include "usart.h"
#include "delay.h"
#include "sys.h"
#include "GY273.h"
extern double gy273_data;
extern void gy273_work(void);
int main(void) {
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600);
Init_HMC5883(); //GY273 初始化
while(1){
gy273_work();
printf("gy273_data is %f \r\n",gy273_data);
}
}
2.2 .h文件
#ifndef GY273_H
#define GY273_H
#include "sys.h"
#include "delay.h"
// 第一部分:IIC通信 的协议驱动函数
//IO方向设置
#define SDA_IN() {GPIOA->CRH&=0XFFF0FFFF;GPIOA->CRH|=8<<16;}
#define SDA_OUT() {GPIOA->CRH&=0XFFF0FFFF;GPIOA->CRH|=3<<16;}
//IO操作函数
#define IIC_SCL PAout(11) //SCL
#define IIC_SDA PAout(12) //SDA
#define READ_SDA PAin(12) //输入SDA
// 第二部分:GY273 的设置函数
#define uchar unsigned char
#define uint unsigned int
#define SlaveAddress 0x3C //定义器件5883在IIC总线中的从地址
typedef unsigned char BYTE;
typedef unsigned short WORD;
// 第一部分:IIC通信 的协议驱动函数
//IIC所有操作函数
void IIC_Init(void); //初始化IIC的IO口
void IIC_Start(void); //发送IIC开始信号
void IIC_Stop(void); //发送IIC停止信号
void IIC_Send_Byte(u8 txd); //IIC发送一个字节
u8 IIC_Read_Byte(unsigned char ack);//IIC读取一个字节
u8 IIC_Wait_Ack(void); //IIC等待ACK信号
void IIC_Ack(void); //IIC发送ACK信号
void IIC_NAck(void); //IIC不发送ACK信号
void IIC_Write_One_Byte(u8 daddr,u8 addr,u8 data);
u8 IIC_Read_One_Byte(u8 daddr,u8 addr);
// 第二部分:GY273 的设置函数
void Multi_read_HMC5883(void); //连续读出HMC5883内部角度数据,地址范围0x3~0x5
void Single_Write_HMC5883(uchar REG_Address,uchar REG_data); //单个写入数据
//uchar Single_Read_HMC5883(uchar REG_Address); //单个读取内部寄存器数据
void Init_HMC5883(void); //初始化5883
void conversion(uint temp_data);
void gy273_work(void);
#endif
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY