笔者之前使用mpu6050的时候发现经常会受到外部干扰导致数据有丢失或者不精准的情况,于是就去淘宝找了一圈mpu,筛选下来最后选择了维特。
但是蛋疼的是维特自己的sdk用的都是标准库而且也比较久没有更新了。感兴趣或者想开发的话可以去他们官网找找他们的手册看看。
在一系列骚操作之后发现传感器跑iic跑不动,原先以为是iic的问题没有使用上拉电阻导致的数据串扰,后来点了一下发现不是这个问题。(咨询了一下技术客服发现这个传感器不支持iic好家伙-不支持你好歹把丝印删一下啊)所以一定一定要先咨询客服支不支持你要的通讯方式。
然后又换了一个高级一点的型号现在终于可以跑起来了,但是是标准库和我目前的开发完全对接不了心血来潮改hal库!
改起来难度也不大,这里先用iic的例子来改一下。
/**
* 函数功能: iic初始化函数
* 输入参数: 无
* 返 回 值: 无
* 说 明:无
*/
void IIC_Init(void)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOB_CLK_ENABLE(); //使能PB端口时钟
GPIO_Initure.Pin = GPIO_PIN_14|GPIO_PIN_15;
GPIO_Initure.Mode = GPIO_MODE_OUTPUT_PP; //推挽输出
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
IIC_SCL_SET();
IIC_SDA_SET();
}这里主要是改了一下模拟iic的初始化方式这个比较简单就不细讲了。
下面讲一下比较难搞的部分,笔者这边被他们自己的sdk坑了好几次发现他们的sdk底层写的是没有问题的就是一些配置没有注释很难看得懂。
WitInit(WIT_PROTOCOL_NORMAL, 0x50);
WitSerialWriteRegister(SensorUartSend);//没有报错 返回值为0
WitRegisterCallBack(SensorDataUpdata);//没有报错返回值为0
WitDelayMsRegister(Delayms);//没有报错 返回值为0
这里一定要改初始化里面的配置,我们跳转到他的定义去看看
#define WIT_PROTOCOL_NORMAL 0
#define WIT_PROTOCOL_MODBUS 1
#define WIT_PROTOCOL_CAN 2
#define WIT_PROTOCOL_I2C 3
还是比较容易看的懂的,可以看到支持的方式还蛮多的,前提是手头的传感器支持。
然后是这里的配置要改一下
剩下的配置咋改的忘记了有问题和我联系或者找他们的技术客服就行他们还挺热情的。
至于hal库的移植笔者这边移植好了之后给他们技术发了一份,据说当时有学生让帮忙改hal那边的技术收400给我惊呆了。
详细的应用我后续空闲了会出一期基于他们这个东西做的一个小玩具,如果有兴趣可以关注一波蹲一下我的后续。
预告一下: