NXP论坛小课堂第30期有个LPC55S69实现的翻页器,日天鼓励大家跟着大佬学,正好手头有块论坛活动从日天那薅来的LPC55S69开发板,动手开整。 首先从X宝买了个PAJ7620传感器,确实不贵,含运费才20多块。然后NXP开发系统是以前就安装好的,并且LPC55S69的SDK也已经安装了。记得SDK里面有个例子,就是用LPC55S69开发板模拟键盘鼠标的,所以没有完全按照论坛大佬视频里的步骤,而是采用了下面这个例子工程:
先把2个传感器文件直接拖入项目中:
然后修改一些程序。 主程序composite.c头部加上:
#include "app_paj7620.h"
主程序composite.c最后部分修改为: paj7620Init(); USB_DeviceApplicationInit(); while (1U) { paj7620_task(); #if USB_DEVICE_CONFIG_USE_TASK USB_DeviceTaskFn(g_UsbDeviceComposite.deviceHandle); #endif }
注意:paj7620_task();下面的语句不能去掉,这里和大佬的程序有点差别。 hid_keyboard.c文件头部加上:
#include "app_paj7620.h"
hid_keyboard.c文件中的回调函数USB_DeviceHidKeyboardAction()改为:
static usb_status_t USB_DeviceHidKeyboardAction(void) { s_UsbDeviceHidKeyboard.buffer[2] = 0x00U; if(g_PAJ7620 == 3) { s_UsbDeviceHidKeyboard.buffer[2] = KEY_PAGEUP; g_PAJ7620= 0; } if(g_PAJ7620 == 4) { s_UsbDeviceHidKeyboard.buffer[2] = KEY_PAGEDOWN; g_PAJ7620= 0; } returnUSB_DeviceSendRequest(s_UsbDeviceComposite->deviceHandle, USB_HID_KEYBOARD_ENDPOINT_IN, s_UsbDeviceHidKeyboard.buffer,USB_HID_KEYBOARD_REPORT_LENGTH); } 然后开始编译,肯定会报错,没有I2C驱动,打开配置窗口,注意外设开关要打开,否则没法配置。
在驱动页面勾选I2C和GINT:
确定后还会报错 :
继续添加CMP驱动:
回到主界面,此时编译应该没什么问题了。 大佬视频中介绍使用的是FLEXCOM3口,根据LPC55S69的原理图,把传感器用杜邦线连接到FLEXCOM3:
最后将编译好的程序下载到开发板,一运行,竟然报错。跟踪发现app_paj7620.c文件中下列语句返回错误: PRINTF("paj7620_i2c_writeI2C_MasterWriteBlocking Failed %x\r\n", reVal); 返回值为:0xa2d 这是个啥错误呢?继续跟踪发现fsl_i2c.h文件中有定义: kStatus_I2C_ArbitrationLost = MAKE_STATUS(kStatusGroup_FLEXCOMM_I2C, 5), /*!<Arbitration lost error. */ 仲裁丢失错误,一般是传感器没上电导致的。难道X宝上买了个次品?联系卖家技术,技术也是一脸懵,吃不准问题在哪,建议再拍个,确认问题后把前面买的那个退回去。 等新的传感器到手,一上电,问题依旧,运气不会这么差吧,2个传感器都是坏的?此时应该先排除传感器本身的问题了,会不会是其它原因导致的?想想毕竟和大佬所用的开发板不一样,虽然MCU芯片是一样的,会不会是flexcom3被占用了?换个I2C口吧,LPC55S69有3个I2C接口呢,用flexcom1试试。 把app_paj7620.h文件中的I2C口做如下修改: #definePAJ7620_SCL_PORT 0u #definePAJ7620_SCL_PIN 14u //#definePAJ7620_SCL_PIN 2u #definePAJ7620_SCL_FUNC IOCON_FUNC1 #definePAJ7620_SCL_PINCFG IOCON_MODE_INACT |IOCON_DIGITAL_EN #definePAJ7620_SDA_PORT 0u #definePAJ7620_SDA_PIN 13u //#definePAJ7620_SDA_PIN 3u #definePAJ7620_SDA_FUNC IOCON_FUNC1 #definePAJ7620_SDA_PINCFG IOCON_MODE_INACT |IOCON_DIGITAL_EN #definePAJ7620_I2C I2C1 #definePAJ7620_I2C_RST kFC1_RST_SHIFT_RSTn #definePAJ7620_I2C_CLKATTACH kFRO12M_to_FLEXCOMM1 #definePAJ7620_I2C_CLKFREQ 12000000UL #definePAJ7620_I2C_CLKSRC kCLOCK_Flexcomm1 #define PAJ7620_I2C_RATE 400000UL 传感器连接到FLEXCOM1口:
编译,下载,运行,没有任何问题,大功告成!
将USB连接线插到开发板的USB FULL SPEED接口,打开开发板的原理图,运行效果如下:
附件是工程源码,有兴趣的小伙伴可以尝试下。
|