身上长痣是什么原因| 瘦脸针的危害有什么副作用| 白陶土样便见于什么病| 适当是什么意思| 代用茶是什么意思| 右胸是什么器官| 桃花劫是什么意思| 水钻是什么材质| 熟普属于什么茶| ube手术是什么意思| 办理无犯罪记录证明需要什么材料| 愚人节是什么时候| 低血压低是什么原因| 肝红素高是什么原因| 白头翁幼鸟吃什么| 局级是什么级别| 烹饪是什么意思| 嗳腐吞酸是什么意思| 什么样的雨珠| 芙蓉花长什么样| 炸东西用什么油| 窦性心律不齐是什么| 菲薄是什么意思| 蛇缠腰用什么药| 梦见和老公吵架是什么意思| 湾仔码头水饺为什么贵| 小孩的指甲脱落是什么原因| 脑出血什么原因引起的| 软开是什么| 护肝片什么时候吃最好| 淋巴结用什么药效果好| 新疆有什么水果| 菜花长什么样| 喝茶什么意思| 嘴酸是什么原因| 缺维生素c会得什么病| 保育是什么意思| 益生菌是什么东西| 日语一个一个是什么意思| 血糖高早餐吃什么最好| 拉红色的屎是什么原因| 化疗期间吃什么升白细胞快| dunhill是什么品牌| 6月出生是什么星座| 战战兢兢的意思是什么| 蛇肉吃了有什么好处| 梦见别人笑什么意思| 市检察长是什么级别| 糖类抗原125是什么意思| 男性检查男科都查什么| 日语八嘎是什么意思| 光是什么意思| 6月16日是什么星座| 血便是什么颜色| 左氧氟沙星氯化钠注射作用是什么| 益母草长什么样子图片| 6月五行属什么| 忌诸事不宜是什么意思| 女生考什么证书最实用| 孕晚期高血压对胎儿有什么影响| 身上有白点是什么原因| 10mg是什么意思| 破月是什么意思| 二甲双胍什么时候吃| 上火喝什么比较好| 阴道清洁度三度什么意思| 舌头烧灼感是什么原因| 转氨酶高吃什么好得快| ccu病房什么意思| 非诚勿扰是什么意思| 羊驼为什么吐口水| 突然发胖要警惕什么病| 生猴子是什么意思| b型血的人是什么性格| 盐酸舍曲林片治疗什么程度的抑郁| 无花果什么功效| 波菜不能和什么一起吃| 心机重的人弱点是什么| 孕酮是什么意思| 甘耳朵旁什么字| 三个女是什么字| 孵化器公司是干什么的| 胎毒是什么意思| 苦瓜有什么好处| 天地人和是什么意思| 湿气重的人喝四物汤会有什么| 奇门遁甲是什么意思| 肝功能七项是检查什么| 嘴无味是什么病的征兆| 欲言又止什么意思| 6月初三是什么日子| 包子有什么馅的| 吃豆角中毒什么症状| 做鸡蛋饼用什么面粉好| 什么是食物链| 怀孕养猫对胎儿有什么影响| 为什么晚上不能扫地| 81年属鸡的是什么命| 阿莫西林是治什么的| 五指毛桃什么人不能吃| 1987年是什么年| 烫伤抹什么管用| 胃寒吃什么药好| 恶心是什么意思| 胃出血吃什么食物好养胃| 梦见游泳是什么预兆| 高压低是什么原因| 什么叫副乳| 梅长苏是什么电视剧| 脸上皮肤痒是什么原因| 怀孕一个月有点见红是什么情况| 快递客服主要做什么| 亚瑟士和鬼冢虎的区别是什么| pure什么意思| 辽国是现在的什么地方| 乙肝两对半挂什么科| 绿五行属什么| 八月一号是什么星座| 牛肉烧什么好吃| 浑身疼痛什么原因| 1月22号是什么星座| 脑白质脱髓鞘改变是什么意思| 属狗的什么命| 老掉头发是什么原因| 吃止疼药有什么副作用| 男人吃生蚝补什么| 剪不断理还乱什么意思| 三个又是什么字| 陈晓和赵丽颖为什么分手| h皮带是什么牌子| 干火重吃什么药管用| l是什么字| 米诺地尔搽剂和米诺地尔酊有什么区别| 海参是补什么| 阿莫西林主要治疗什么| 薛之谦的真名叫什么| 怀孕一个月有点见红是什么情况| 土贝什么字| 九月初八是什么星座| 秦朝灭亡后是什么朝代| b型钠尿肽测定是什么检查| 偶发性房性早搏是什么意思| 屁股上长痘是什么原因| 海绵是什么材料做的| 垫底是什么意思| 陶和瓷有什么区别| 去离子水是什么水| 腰膝酸软是什么症状| 话唠是什么意思| 468是什么意思| 抑扬顿挫什么意思| 感冒冒虚汗是什么原因| 卵巢囊肿有什么症状| 什么是盐| 双抗是什么意思| 颈椎吃什么药| 咬牙切齿什么意思| 女孩第一次来月经需要注意什么| 五十八岁属什么生肖| 菲拉格慕属于什么档次| 排班是什么意思| 孩子感冒咳嗽吃什么药| 依达拉奉注射功效与作用是什么| 专科什么专业就业前景好| 查脂肪肝挂什么科室| 什么是割礼| 什么粥最养胃| 毒灵芝长什么样| 汤伤用什么药| 头部出汗多是什么原因| 为什么指甲会凹凸不平| 胡桃木色是什么颜色| 知音是什么意思| 射手男喜欢什么样的女生| 丈夫早亡的女人什么命| 尿蛋白十一是什么意思| 油粘米是什么米| 脑梗三项是检查什么| 脑梗吃什么鱼最好| 男同叫什么| ipi是什么意思| 脾胃不好吃什么调理| 屁臭是什么原因造成的| 台湾高山茶属于什么茶| 震仰盂什么意思| 你想什么| 六小龄童的真名叫什么| 昆明是什么城| 冬阴功汤是什么味道| 闭关什么意思| 鼻子和嘴巴连接的地方叫什么| tm是什么| 胃在什么位置| 为什么会流鼻血什么原因引起的| 手掌上的三条线分别代表什么| 嘴唇有点发黑是什么原因引起的| 梦见和妈妈吵架是什么意思| 身上痒吃什么药| 多吃木瓜有什么好处| 渡劫什么意思| 经常生闷气会得什么病| 壬子五行属什么| 蹂躏是什么意思| 银耳不能和什么一起吃| 手容易出汗是什么原因| 第一次坐飞机需要注意什么| ics是什么药| 半套什么意思| 女人辟邪带什么最好| 项羽姓什么| 心计是什么意思| 什么有力| 为什么会有耳石症| 隔离霜有什么作用| 明朝为什么会灭亡| 血糖高早餐吃什么好| 有什么植物| 经期头疼是什么原因怎么办| 少许是什么意思| 瓷娃娃什么意思| butterfly什么意思| 胃酸烧心吃什么药可以根治| 手串18颗代表什么意思| 女人阴道痒是什么原因| 大公鸡是什么牌子| cps是什么| 鹅和什么一起炖最好吃| seiko手表是什么牌子| 号是什么意思| 黄芪可以和什么一起泡水喝| 命里缺什么怎么看| 19朵玫瑰代表什么意思| 产妇吃什么最好| 嘴角有痣代表什么| 怀孕后期脚肿是什么原因| 第一次坐飞机要注意什么| 在岸人民币和离岸人民币什么意思| 浮水是什么意思| 梦见捡钱是什么预兆| 取保候审是什么意思还会判刑吗| 体内湿气重用什么药| 鼻炎流鼻血是什么原因| 梦见刷牙是什么预兆| 高挑是什么意思| 饭后散步有什么好处| 什么水果最好吃| 左耳朵发热代表什么预兆| 狗狗打喷嚏流鼻涕怎么办吃什么药| 向内求什么意思| h7n9是什么病毒| 慢性活动性胃炎是什么意思| ed2k用什么下载| 士加一笔是什么字| 屈原属什么生肖| 什么食物补气血| 课程是什么| 酱油是什么时候发明的| 嗓子疼挂什么科| 377是什么意思| 小产可以吃什么水果| 淋巴结节吃什么药最好| 梦见买肉是什么意思| 钟字五行属什么| 萎缩性胃炎吃什么药能治好| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 企业专区 ? TI ? MSPM03507驱动手势传感器PAJ7620

共6条 1/1 1 跳转至

MSPM03507驱动手势传感器PAJ7620

工程师
2025-08-04 22:01:55     打赏
百度 前后三个月的时间,Gogoing与他的战友们,完成了从默默无闻到天下闻名的转身,成为LPL史上首支冠军队伍。

【前言】

我的工程目的是使用手势传感器来实现无接触的控制,所以驱动PAJ7620U2为首要任务。在前面我已经 驱动好的oled屏的前提下,添加手势传感的驱动。

【I2C读写函数的封装】

因为有多个i2c的读写,所以在github上面找到了一个库,修改以后可以实现i2c的单、多数据的写入,多数据的读取。

其代码如下:

#include "i2c_app.h"

#define I2CT_FLAG_TIMEOUT         ((uint32_t)0x1000)
#define I2CT_LONG_TIMEOUT         ((uint32_t)(10 * I2CT_FLAG_TIMEOUT))

static __IO uint32_t  I2CTimeout = I2CT_LONG_TIMEOUT;

uint8_t i2c_app_write (I2C_Regs *i2c, uint8_t addr, uint8_t reg, uint8_t *dat, uint8_t len)
{
    DL_I2C_fillControllerTXFIFO(i2c, &reg, 1);
    DL_I2C_fillControllerTXFIFO(i2c, dat, len);
    I2CTimeout = I2CT_FLAG_TIMEOUT;
    while (!(DL_I2C_getControllerStatus(i2c) & DL_I2C_CONTROLLER_STATUS_IDLE)) if ((I2CTimeout--) == 0) return 1;

    DL_I2C_startControllerTransfer(i2c, addr, DL_I2C_CONTROLLER_DIRECTION_TX, len + 1);
    I2CTimeout = I2CT_FLAG_TIMEOUT;
    while (DL_I2C_getControllerStatus(i2c) & DL_I2C_CONTROLLER_STATUS_BUSY_BUS) if ((I2CTimeout--) == 0) return 2;

    if (DL_I2C_getControllerStatus(i2c) & DL_I2C_CONTROLLER_STATUS_ERROR) return 1;
    I2CTimeout = I2CT_FLAG_TIMEOUT;
    while (!(DL_I2C_getControllerStatus(i2c) & DL_I2C_CONTROLLER_STATUS_IDLE)) if ((I2CTimeout--) == 0) return 3;

    return 0;
}

uint8_t i2c_app_read (I2C_Regs *i2c, uint8_t addr, uint8_t reg, uint8_t *dat, uint8_t len)
{

    DL_I2C_fillControllerTXFIFO(i2c, &reg, 1);
    I2CTimeout = I2CT_FLAG_TIMEOUT;
    while (!(DL_I2C_getControllerStatus(i2c) & DL_I2C_CONTROLLER_STATUS_IDLE)) if ((I2CTimeout--) == 0) return 1;
    DL_I2C_startControllerTransfer(i2c, addr, DL_I2C_CONTROLLER_DIRECTION_TX, 1);
//    DL_I2C_startControllerTransferAdvanced(i2c, addr, DL_I2C_CONTROLLER_DIRECTION_TX, 1,
//                                           I2C_MCTR_START_ENABLE, I2C_MCTR_STOP_DISABLE, I2C_MCTR_ACK_ENABLE);
    I2CTimeout = I2CT_FLAG_TIMEOUT;
    while (DL_I2C_getControllerStatus(i2c) & DL_I2C_CONTROLLER_STATUS_BUSY_BUS) if ((I2CTimeout--) == 0) return 2;
    if (DL_I2C_getControllerStatus(i2c) &
        DL_I2C_CONTROLLER_STATUS_ERROR) {
        /* LED will remain high if there is an error */
        __BKPT(0);
    }
    /* Wait for I2C to be Idle */
    while (!(
        DL_I2C_getControllerStatus(i2c) & DL_I2C_CONTROLLER_STATUS_IDLE))
        ;
    /* Add delay between transfers */
    delay_cycles(1000);

    DL_I2C_startControllerTransfer(i2c, addr, DL_I2C_CONTROLLER_DIRECTION_RX, len);

    for (uint8_t i = 0; i < len; i++)
    {
        I2CTimeout = I2CT_FLAG_TIMEOUT;
        while (DL_I2C_isControllerRXFIFOEmpty(i2c)) if ((I2CTimeout--) == 0) return 3;
        dat[i] = DL_I2C_receiveControllerData(i2c);
    }

    return 0;
}

i2capp.h如下:

#ifndef I2C_APP_H
#define I2C_APP_H

#include "ti_msp_dl_config.h"

uint8_t i2c_app_read    (I2C_Regs *i2c, uint8_t addr, uint8_t reg, uint8_t *dat, uint8_t len);
uint8_t i2c_app_write   (I2C_Regs *i2c, uint8_t addr, uint8_t reg, uint8_t *dat, uint8_t len);

#endif

封装好后,只需要传感i2c序号,写入从机的地址(为7bit地址),buf的地址,以及buf的长度。

将其加入到工程之中:

image.png

【PAJ7620驱动】

根据i2c的驱动封装,我这里只需要修改PAJ7620如下几个函数的代码,即可以完成:

/******************************************************************************
function:	
	I2C Write and Read
******************************************************************************/
static void DEV_I2C_WriteByte(I2C_Regs * PAJ7620U2_I2C,uint8_t add_, uint8_t data_)
{
	uint8_t Buf[1] = {0};
	Buf[0] = data_;
	i2c_app_write(I2C1, 0x73, add_,Buf, 2);
}

static void DEV_I2C_WriteWord(I2C_Regs * PAJ7620U2_I2C,uint8_t add_, uint16_t data_)
{
	uint8_t Buf[2] = {0};
	Buf[0] = data_ >> 8; 
	Buf[1] = data_;
	i2c_app_write(I2C1, 0x73, add_,Buf, 2);
}

static uint8_t DEV_I2C_ReadByte(I2C_Regs * PAJ7620U2_I2C,uint8_t add_)
{
    uint8_t state;
	uint8_t Buf[1];
	Buf[0] = add_;
	state = i2c_app_read(I2C1, 0x73, add_,Buf, 1);
	if(state == 0)
	{
	    return Buf[0];
	}
	else
	    return state;
}

static uint16_t DEV_I2C_ReadWord(I2C_Regs * PAJ7620U2_I2C,uint8_t add_)
{
    uint8_t Buf[2]={0, 0};
    i2c_app_read(I2C1, 0x73, add_,Buf, 2);
    return ((Buf[1] << 8) | (Buf[0] & 0xff));
}

这样就可以成功的驱动他了,接上逻辑分析仪,捕获到数据为读写正常的:

image.png

在主程序中添加测试代码:

#include "ti_msp_dl_config.h"
#include "\drivers\PAJ7620U2.h"
#include "\oled\oled.h"

int main(void)
{
    SYSCFG_DL_init();

    /* Set LED to indicate start of transfer */
    OLED_Init();
    OLED_Clear();
    OLED_ShowString(0,0,"hello world",16,1);
    OLED_Refresh_Gram();
    uint8_t OBJ_BRIGHTNESS = 0;      // Object Brightness (Max. 255)
    uint16_t OBJ_SIZE = 0;               // Object Size (Max. 900)
    uint16_t ID = PAJ7620U2_init(I2C1);
    /* If write and read were successful, toggle LED */
    while (1) {
        delay_cycles(1000);
        OLED_Clear();
        OBJ_BRIGHTNESS = PAJ7620U2_PS_ReadObjBrightness(I2C1);    // Object Brightness (Max. 255)
        OBJ_SIZE = PAJ7620U2_PS_ReadObjSize(I2C1);                            // Object Size (Max. 900)
        OLED_Printf(0,0,16,1,"BRIGHT:%d",OBJ_BRIGHTNESS);
        OLED_Printf(0,24,16,1,"OBJ_SIZE:%d",OBJ_SIZE);
        OLED_Refresh_Gram();
    }
}

下载程序后,未测检到手势时的数值:

4670da2bf1f3ed7685f878370aa46be.jpg

手靠近到传感器的数据:

b0a6dac746fdf6f581b0484c5b184ba.jpg

到此说明手势传感器驱动正常。




关键词: Ti     MSPM0G3507     I2C     PAJ7620    

高工
2025-08-04 10:29:07     打赏
2楼

谢谢分享


专家
2025-08-04 20:29:29     打赏
3楼

谢谢分享


专家
2025-08-04 20:33:09     打赏
4楼

谢谢分享


专家
2025-08-04 20:34:29     打赏
5楼

谢谢分享


专家
2025-08-04 12:38:08     打赏
6楼

不错,学习了


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
店里来猫是什么兆头 岌岌可危是什么意思 阳光明媚下一句接什么 端午是什么时候 幼儿园什么时候放暑假
外婆菜是什么 胃火喝什么茶降火 椰子煲鸡汤放什么材料 心脏右束支传导阻滞是什么意思 前列腺是什么器官
吃什么补血补气最快 6月3号是什么星座 为什么做爱那么舒服 忽冷忽热是什么症状 谷丙转氨酶什么意思
氯化钠注射作用是什么 鸡血藤有什么功效 空调室内机漏水是什么原因 尿频是什么原因导致的 绿豆可以和什么一起煮
荔枝吃了有什么好处hcv9jop4ns9r.cn 脂蛋白高是什么意思hcv8jop7ns3r.cn 尖锐湿疣吃什么药hcv8jop0ns5r.cn 心意是什么意思hcv8jop5ns6r.cn 抗甲状腺球蛋白抗体高是什么意思shenchushe.com
羊齿状结晶代表什么hcv7jop6ns8r.cn 86年属虎是什么命gangsutong.com mua什么意思hcv8jop2ns1r.cn 观音菩萨原名叫什么名hcv9jop1ns5r.cn 老年人脚肿挂什么科jasonfriends.com
什么是植发hcv9jop0ns1r.cn 肠息肉吃什么药hcv8jop5ns6r.cn 头痛到医院挂什么科hcv9jop5ns0r.cn 为什么气血不足sanhestory.com 缠头是什么意思hcv9jop0ns0r.cn
喝什么泡水降血压最好hcv8jop7ns5r.cn 甲亢是一种什么病hcv7jop9ns4r.cn 牙疼吃什么好hcv8jop4ns0r.cn 什么人容易得淋巴癌hcv8jop7ns3r.cn 炎字五行属什么hcv8jop6ns6r.cn
百度