哎,带小宝宝太忙着,有点对不住管理员nmg。。今天趁着姑娘睡了,赶紧起来搞一下。
有些事情要做好还是要看当前的情况/环境了,这次基于lpc54100的6lowpan网络感觉有点完成不了了,事情蛮多的,需要做的底层的事情也是蛮多的,只能做一点算一点咯,关于之前的计划有打算搞定一个通用的传感器framework,基本上算是events-driven那一套东西了,不过得让api接口更加智能化一些,需要好好考虑一下framework的事情了。
恩,要有传感器,硬件基本上ok了,选择一个mems传感器会更加符合时代的主题,大家都在玩嘛,四轴什么的。选一个手机用的传感器,st的算是出货量蛮大的IC了,lis3dh应该有蛮多熟悉这颗ic的,好像大家会喜欢mpu6050这种吧,不晓得为啥,怎么不自己选一个自己喜欢的呢。LIS3DH官方提供了linux的驱动,基本上是给android手机用的嘛,得要有的。去年看过一款st的9轴传感器,蛮不错的,可惜好像还是样片,有个惯导定位的项目也因为这个没有落地。
期间搞过一些关于mems算法调试的通用平台,基本上linux下面的,个人基本上工作上linux桌面会选ubuntu为主吧。简单说说调试平台,基本上是gnuplot+mysql+p2p无线传输+mems节点,软件上基本上是《file操作 + mysql 管理 + gnuplot脚本 + 串口数据流》。
一些mysql的操作和测试
- 1、安装mysql
- sudo apt-get install mysql-server-5.5
- 2、登陆mysql
- mysql -u root -p
- 3、创建accDB
- create database accDB;
- show databases;
- drop database accDB;
- show databases;
- 4、创建accRow数据表
- create table accRow(acc_time datetime,acc_x int,acc_y int,acc_z int);
- 5、插入测试数据
- use accRow
- insert into accRow values(now(),1,1,1);
虽然时间比较紧,还是得慢慢来,东西要做好,论坛的事情也是要用心的哦,认真做事情你会感觉到还蛮开心的。
好了,来电图:
哎,家里的电脑装起来,开发蛮爽了。
一些配置:
- HAL_I2C_Init();
- LIS3DH_GetWHO_AM_I(&dump);
- DEBUGOUT("LIS3DH ID:%x\n", dump);
-
- /* Set ODR (turn ON device) */
- response = LIS3DH_SetODR(LIS3DH_ODR_400Hz);
- if (response == 1) {
- DEBUGOUT("SET_ODR_OK\r\n");
- }
-
- /* Set PowerMode */
- response = LIS3DH_SetMode(LIS3DH_NORMAL);
- if (response == 1) {
- DEBUGOUT("SET_MODE_OK\r\n");
- }
-
- /* Set Fullscale */
- response = LIS3DH_SetFullScale(LIS3DH_FULLSCALE_2);
- if (response == 1) {
- DEBUGOUT("SET_FULLSCALE_OK\r\n");
-
- }
-
- /* Set axis Enable */
- response = LIS3DH_SetAxis(LIS3DH_X_ENABLE | LIS3DH_Y_ENABLE | LIS3DH_Z_ENABLE);
- if (response == 1) {
- DEBUGOUT("SET_AXIS_OK\r\n");
- }
I2C初始化,采用的I2C1,大家换个口看看,我被坑到了,需要注意这个NXP驱动的写法,真是高级,用过这么多库,这玩意感触最深。
第一次使用st的感觉他的库蛮好的,后面用atmel的R21感觉他的库很不错,比st的好多了,水平也高不少,很类似linux下的东西。
如今用NXP的,感觉这玩意真心不错,比atmel的还给力,感觉这就是以后这种MCU厂家合并/并购的目的吧,以后这种外设库更加的合理丰富,更加具有可用性,因为各家的越来越多的人,优秀的开发人员共同开发统一的外设驱动库,当然NXP的也会是一个大趋势,
ROM和periph这种。
- /**
- * @brief HAL_I2C_Init
- * @note 软件I2C配置函数
- * @param None
- * @retval None
- */
- void HAL_I2C_Init(void)
- {
- uint32_t memSize, *devMem;
- Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 25, (IOCON_FUNC1 | IOCON_DIGITAL_EN));
- Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 26, (IOCON_FUNC1 | IOCON_DIGITAL_EN));
-
- Chip_Clock_EnablePeriphClock(LPC_I2CM_CLOCK);
- Chip_SYSCON_PeriphReset(LPC_I2CM_RESET);
-
- /* Get needed size for driver context memory */
- memSize = ROM_I2CM_GetMemSize();
- if (memSize > sizeof(drvData)) {
- DEBUGOUT("Can't allocate memory for I2C driver context\r\n");
- }
- /* Or just use malloc(memSize) */
- devMem = drvData;
-
- /* Initialize driver */
- i2cmInit.pUserData = NULL;
- i2cmInit.base = (uint32_t) LPC_I2C_PORT;
- i2cmHandle = ROM_I2CM_Init(devMem, &i2cmInit);
- /* Error initializing I2C */
- if (i2cmHandle == NULL) {
- DEBUGOUT("Error initializing ROM\r\n");
- }
-
- /* Set I2C clock rate */
- actualRate = ROM_I2CM_SetClockRate(i2cmHandle, Chip_Clock_GetAsyncSyscon_ClockRate(), I2C_BITRATE);
- DEBUGOUT("Actual I2C master rate = %dHz\r\n", actualRate);
-
- }
恩,就这样了,nmg不要催我了哦,有时间我就跟新一点,做事情认真的人,催也不行哦