0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PT32L007F8P7K& QMA6100P IIC 通讯源代码分享

Rickluo ? 来源:Rickluo ? 作者:Rickluo ? 2024-06-07 09:53 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

/**
******************************************************************************
* @file qma6100p.c
* @author Yangzhiqiang@qst
* @version V1.0
* @date 2020-5-27
* @brief qma6100p
******************************************************************************
* @attention
*
*
******************************************************************************
*/

#include "qma6100p.h"
#include "PT32x007x.h"
#include "string.h"


#define MT6701_ADDR (0x0C)
#define fabs(x) (x < 0 ? -x : x)

void delay_us(uint32_t delay)
{
uint32_t i,j,k;
for(i=0;i {
for(j=0;j<100;j++)
{
k++;
}
}
}
//---------------------------------------

void Acce_Write_Byte(unsigned int WriteAddr, u8 data)
{
// int i;
/******************等待从机ready***************/
I2C_GenerateEvent(I2C,I2C_Event_Start,DISABLE);
I2C->CCR |= I2C_CCR_SI | I2C_CCR_ACK;
I2C_Cmd(I2C,DISABLE);
I2C_Cmd(I2C,ENABLE);

I2C_GenerateEvent(I2C,I2C_Event_Start,ENABLE);
while(I2C_GetFlagStatus(I2C,I2C_FLAG_StartOk)!= SET);
// printf("---%s %d---n", __func__, __LINE__) ;
I2C_SendAddr(I2C, MT6701_ADDR);//器件地址,写
while(I2C_GetFlagStatus(I2C,I2C_FLAG_MASGetAckW)!=SET);
printf("%s %drn", __func__, __LINE__) ;
I2C_SendData(I2C,WriteAddr);//发送要写的字地址
while(I2C_GetFlagStatus(I2C,I2C_FLAG_MDSGetAck)!=SET);
// printf("---%s %d---n", __func__, __LINE__) ;

I2C_SendData(I2C, data);
while(I2C_GetFlagStatus(I2C,I2C_FLAG_MDSGetAck) != SET);

/******************发送停止位***************/
I2C_GenerateEvent(I2C,I2C_Event_Stop,ENABLE);
}

//uint8_t I2C_EE_Read(u8* pBuffer,u16 ReadAddr, u16 DeviceAddr, u16 data_size)
uint8_t Acce_Read_Byte(u16 ReadAddr)
{
// int i;
uint8_t date = 0 ;
/******************等待从机ready***************/
//printf("---%s %d---n", __func__, __LINE__) ;
I2C_GenerateEvent(I2C,I2C_Event_Start,ENABLE);
while(I2C_GetFlagStatus(I2C,I2C_FLAG_StartOk)!= SET);
// printf("---%s %d---n", __func__, __LINE__) ;
I2C_SendAddr(I2C, MT6701_ADDR);//器件地址,写
while(I2C_GetFlagStatus(I2C,I2C_FLAG_MASGetAckW)!=SET);

I2C_SendData(I2C,ReadAddr);//发送要读的页地址
while(I2C_GetFlagStatus(I2C,I2C_FLAG_MDSGetAck)!=SET);

I2C_GenerateEvent(I2C,I2C_Event_Stop,ENABLE);

/******************接收数据***************/
I2C_GenerateEvent(I2C,I2C_Event_Start,ENABLE);
while(I2C_GetFlagStatus(I2C,I2C_FLAG_StartOk)!= SET);

I2C_SendAddr(I2C, MT6701_ADDR|0x01);//器件地址,读
while(I2C_GetFlagStatus(I2C,I2C_FLAG_MASGetAckR)!=SET);

I2C->CCR=I2C_CCR_ACK|I2C_CCR_SI;//主机发送NACK
while(I2C_GetFlagStatus(I2C,I2C_FLAG_MDGSendNack) != SET);
date = I2C_ReceiveData(I2C);

/******************发送停止位***************/
I2C_GenerateEvent(I2C,I2C_Event_Stop,ENABLE);

return date ;
}
//---------------------------------------
uint8_t MT6813_read_reg(uint8_t Reg)
{
u8 RegVal = 0;
RegVal = Acce_Read_Byte(Reg);
return RegVal;
}

void MT6813_write_reg(uint8_t Reg,uint8_t Val)
{
Acce_Write_Byte(Reg, Val);
}

void MT6701_INIT(void)
{
uint8_t Buff[2];

// Buff[0] = MT6813_read_reg(0x22);
// if(Buff[0] == 0x60)
// {
// printf("RG 0x22=%xrn",Buff[0]);
// return;
// }

MT6813_write_reg(0x22, 0x60); //
delay_us(10) ;
MT6813_write_reg(0x24, 0x80); //
delay_us(10) ;
MT6813_write_reg(0x27, 0xB8);
delay_us(10) ;

Buff[0] = MT6813_read_reg(0x22);
printf("RG 0x22 C=%xrn",Buff[0]);

Buff[0] = MT6813_read_reg(0x24);
printf("RG 0x24 D=%xrn",Buff[0]);

//save eeprom
MT6813_write_reg(0x09, 0xB3);
MT6813_write_reg(0x0A, 0x05);
}

short angle_now;
uint8_t MT6701_GetData(uint8_t *Magnet)
{
uint8_t Buff[6];
int data;

float angle;

Buff[0] = MT6813_read_reg(0x03);
Buff[1] = MT6813_read_reg(0x04);

Magnet[0] = Buff[0];
Magnet[1] = Buff[1];

data = (short)((Magnet[0]<<8)|(Magnet[1]));
data = data>>2;

angle = (float)(data*0.022);
if(angle<0)
{
angle = 360+angle;
}

// if((short)angle != angle_now)
// {

// angle_now = (short)angle;
// printf("angle=%drn",angle_now);
// }

printf("angle=%.2frn",angle);
return angle_now;

}

uint8_t Zero_point_programming(void)
{
uint8_t Buff[2],ZH,ZL;
int data ;

Buff[0] = MT6813_read_reg(0x32);
ZH = Buff[0] & 0xf0;
MT6813_write_reg(0x32, ZH);
MT6813_write_reg(0x33, 0x00);

Buff[0] = MT6813_read_reg(0x03);

data = (short)((Buff[0]<<8)|(Buff[1]));
data = data>>2; //14bit
data = data>>2; //12bit

ZH = ZH | (uint8_t)(data >> 8) ;
ZL = (uint8_t)(data & 0x0f) ;

MT6813_write_reg(0x32, ZH);
MT6813_write_reg(0x33, ZL);

//save eeprom
MT6813_write_reg(0x09, 0xB3);
MT6813_write_reg(0x0A, 0x05);

Buff[0] = MT6813_read_reg(0x32);

if((Buff[0] == ZH) && (Buff[1] == ZL))
{
return 1;
}

return 0;

}

wKgZomZiZ7KAAjovABwP93LgbTY229.png

PT32L007是一款Cortex M0 内核的MCU,该系列产品最高主频可达64MHz,1.8~5.5v,-40~105℃,Flash 64Kbyte,SRAM 16Kbyte,深度睡眠电流低至 500nA,支持16位低功耗定时器,12bit ADCUART x 2,I2C,SPI,Timer x 6,18 GPIO,封装TSSOP20/QFN20,广泛应用于消费电子、手持设备、消防安防、仪器仪表物联网工业控制等领域。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    18075

    浏览量

    371000
  • 通讯
    +关注

    关注

    9

    文章

    927

    浏览量

    35803
  • IIC
    IIC
    +关注

    关注

    11

    文章

    306

    浏览量

    39674
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    案例研究:Atola Taskforce 2 借助 MB699VP-B &amp;amp;amp; MB705M2P-B 优化取证设备数据采集

    案例研究:AtolaTaskforce2借助MB699VP-B&amp;MB705M2P-B优化取证设备数据采集概述AtolaTechnology是作为数据取证解决方案领域的领导者,开发
    的头像 发表于 08-14 17:00 ?157次阅读
    案例研究:Atola Taskforce 2 借助 MB699VP-B &<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>; MB705M2<b class='flag-5'>P</b>-B 优化取证设备数据采集

    【微五科技CF5010RBT60开发板试用体验】硬件IIC点亮OLED小屏幕

    ,uint8_t *buf,uint8_t len) { p_i2chandle-&;gt;SR1 = 0; p_i2chandle-&;gt;CR1 |= I2C_CR1
    发表于 08-08 11:01

    【版本控制教程】如何使用Unreal Engine 5 + UE源代码控制(Perforce P4)

    项目越大,越需要靠谱的版本控制系统。Perforce P4不仅是Epic官方推荐的源代码控制工具,更是大厂团队协作的核心支持之一。如何配置P4+UE?手把手教你怎么用↓↓↓
    的头像 发表于 06-25 11:22 ?354次阅读
    【版本控制教程】如何使用Unreal Engine 5 + UE<b class='flag-5'>源代码</b>控制(Perforce <b class='flag-5'>P</b>4)

    东鸿ES-P1:P1智能电表的&amp;quot;数据破壁者&amp;quot;

    东鸿ES-P1电能追踪器解决欧洲P1电表数据获取难题。即插即用接口,直连欧洲电表P1端口。无线同步实时用电数据至本地设备,随时查看能耗趋势与成本分析,为节能管理提供智能化方案。产品兼容欧洲主流电表标准,安装便捷且保障数据安全,适
    的头像 发表于 06-23 17:33 ?419次阅读

    k32l2b31写入LPUART1-&amp;gt;STAT |= (1&amp;lt;&amp;lt;25)会导致semihost_hardfault是为什么?

    我想在 k32l2b31 上激活 LIN Break 检测 必须在状态寄存器中设置位 LKDE i try LPUART1-&amp;gt;STAT |= (1&amp;lt;&amp
    发表于 04-08 06:36

    PT8P2104 MCU规格书

    1. 产品概述? ? ?PT8P2104 是一款 RISC 内核, 触摸 IO 型 8 位 MCU,其内置 1K*14bit OTP ROM、72*8bitSRAM、TOUCH、TIM
    发表于 03-17 17:52 ?0次下载

    PT8P3103 MCU规格书

    PT8P3103 是一款 RISC 内核,A/D 型 8 位 MCU,其内置 2K*16bit OTP ROM、112*8bit SRAM、12 位高精度 ADC、RTC、TIMER、
    发表于 03-17 17:24 ?0次下载

    PT8P1101 MCU规格书

    PT8P1101 是一款 RISC 内核, IO 型 8 位 MCU,其内置 1K*14bit OTP ROM、48*8bitSRAM、TIMER、PWM、LVD 等功能。主要应用于应
    发表于 03-17 17:23 ?0次下载

    【瑞萨RA2L1入门学习】开箱+Keil环境搭建+点灯+点亮OLED

    【开箱】 瑞萨 RA2L1 开发板使用 R7FA2L1AB2DFL 芯片 基于 ARM Cortex M23 内核,主频 48M,Flash 256K,RAM 32K 片上资源已经足够
    发表于 01-25 12:10

    《DNESP32S3使用指南-IDF版_V1.6》第三十二章 IIC_QMA6100P实验

    信号;STOP,表示IIC停止信号。l 读寄存器QMA6100P的读寄存器时序如下图所示。图32.1.3.2 QMA6100P读寄存器时序图中,同样是先发送
    发表于 12-26 09:45

    基于CW32L010F8P6的电机驱动板简易测试

    基于CW32L010F8P6的一款开源电机驱动板,可驱动无刷电机(无感或有感),直流电机或步进电机。
    的头像 发表于 11-19 09:38 ?1248次阅读
    基于CW32<b class='flag-5'>L010F8P</b>6的电机驱动板简易测试

    CMS中微半导 SC8P052AD408SP、 SC8P052AD406ST 消费类小家电OTP单品机

    ℃~+85℃。SC8P052系列包含SC8P052AD408SP、 SC8P052AD406ST。 产品特性: &amp;gt;OTP 时钟16MHz/2T@3.0V~5.5V 时钟
    发表于 11-13 17:51

    罗德与施瓦茨AREG-P解决方案提高汽车雷达生产效率

    罗德与施瓦茨(以下简称“R&amp;S”)为其汽车雷达目标模拟器 R&amp;S AREG800A 推出新选件。新型 R&amp;S AREG-P 为汽车雷达传感器从研发到生产创造了无
    的头像 发表于 10-21 10:14 ?901次阅读

    onsemi LV/MV MOSFET 产品介绍 &amp;amp;amp; 行业应用

    01直播介绍直播时间2024/10/281430直播内容1.onsemiLV/MVMOSFET产品优势&amp;市场地位。2.onsemiLV/MVMOSFETRoadmap。3.onsemiT10
    的头像 发表于 10-13 08:06 ?995次阅读
    onsemi LV/MV MOSFET 产品介绍 &<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>; 行业应用

    测测万用表?合宙功耗分析仪Air9000&amp;amp;amp;Air9000P齐出动

    测测万用表?合宙功耗分析仪Air9000&amp;Air9000P齐出动
    的头像 发表于 09-11 18:24 ?1590次阅读
    测测万用表?合宙功耗分析仪Air9000&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;Air9000<b class='flag-5'>P</b>齐出动