本帖最后由 df_flying 于 2016-4-18 21:59 编辑
GD32F207拿到手已经有段时间了。前短时间给了一个初用贴,这次再给一个平衡小车的底层接口的试用贴,用到的各个模块分别有:I2C(gpio模拟)、timer(周期定时器)、timer-PWM(PWM控制)、timer-input(编码器输入)、spi(gpio模拟写OLED用)、uart(串口调试和蓝牙通信)、AD(外部电压测量)。完全基于GD库哦~仔细翻翻GD小光盘带的资料,其实还是很全的,但是真的需要仔细找。也奇怪,既然有例程,何必藏着呢,那就用GD库吧,支持国货! 首先还是个人习惯,很多程序还是从空白程序开始,看了下DG例程,自己简单重新新建了一个Template,里面分立的建了三个基本功能:LED、USART和SYSTICK,直接下开发板就可以用了,直接删减相应的.C文件即可使用。 初始模版好了,首先是最重要的传感器,就地取材,就用MPU6050了,既然一开始模拟gpio通了,正好我也少花点时间,移植下官方的DMP,这个花了点时间,问题出现在MDP内部fifo的溢出,后来参考了其他网友的解决方法,给个截图,遇到过的朋友应该一看就知道。 这里会返回一个-2,有网友说这是因为读取不及时导致内部FIFO溢出,这里正好清除了一下,再次读取就OK了,修改read代码如下 给出MPU6050的读取数据 可以看出来MPU内部DMP的数据一开始很不稳定啊,这个过程得有好几S,稳定了,就OK了,不过你也可以通过寄存器,直接读取初始值,然后自己用算法拟合一个欧拉角,对比下。 接下来顺便把AD和OLED加进去,OLED用的是一个没有原始资料的东西,不过对比下某宝的卖的,应该像是SPI控制的,好在还能找个参考程序,就只能照葫芦画瓢用GPIO模拟一个了,原始程序在ST跑的72M下图红圈没有加延时,同样的放到GD里面运行不了,在这里加个延时,就OK了。AD程序基本可以直接参考资料给的,还使用了DMA传输。其实就是检测下电池电压,有点大材小用了。 接下来是个大的范围TIMER,这里使用了TIMER4的两个通道做电机控制,输出频率是10K,分别使用TIMER3通道1和TIMER2通道2做编码器的输入,用一个TIMER也可以,这里使用了两个。还有个TIMER5作为内部周期定时器5ms,TIMER的调试还算顺利,直接上结果,counta和countb 是编码器的输入,这里接的就是TIMER4的两路PWM,因为是同样的频率,这里的结果同样的增长。 还剩个蓝牙,这里用了个某宝上的直接透传模块,还有个APP可以链接,使用了串口2与蓝牙模块链接,使用了接收中断,中断函数里直接显示接收到的数据,这里APP的处理就是将手机的屏幕划分为9宫格,然后触摸一个地方传送一个数字,触摸结束(松手),默认发送一个0,这样可以根据数字的顺序,简单的软件实现划屏操作。 硬件焊接的匆忙,调了一下好像还是存在问题的,不过整体已经出来了~,好了,附上各阶段的测试代码,和整体底层代码。上层的算法层等硬件调试OK了 再另贴给出
|