- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
硬件环境
Robomaster 开发板 C型
STLink V2
XT30电源
CubeMX配置
基本的配置请参考《RoboMaster开发板C型嵌入式软件 教程文档》中0.4.2和13.4.1。
Development-Board-C-Examples/RoboMaster开发板C型嵌入式软件教程文档.pdf at master …
/RoboMaster/Development-Board-C-Examples/blob/master/RoboMaster%E5%BC…
需要注意的是,配置完成后,SPI_MOSI是这样的,而且没有配置CS1_Accel和CS1_Gyro ,
开发板原理图中SPI_MOSI对应PA7 ,CS1_ Accel对应PA4 ,CS1_Gyro对应PB0,
所以要在Pinout view中修改到正确的位置。
另外,PA4和PB0的GPIO output level要设置为High,意思是设置默认输出电平为高电平。至于为什
么,举例来说,PA4对应CS1_Accel ,PA4的默认电平为高电平,当需要片选加速度计的时候,将
PA4设置为低电平,然后进行一系列的读取操作,读取完成之后,再将PA4设置为高电平来取消片
选。可以看到,默认状态下不片选时PA4和PB0是要保持高电平状态的,所以我们才把GPIO output
level设置为High。
KEIL配置
这里最好改为Level 0,否则在debug的时候watch到的accelerometer会提示not in scope。
加速度计程序代码
接下来的教程会用到BOSCH官方给的文档《BMI088 6-axis Motion Tracking for High-performance
Applications》,文档版本1.8,下载地址如下。
/media/boschsensortec/downloads/datasheets/bst-bmi088…
/media/boschsensortec/downloads/datasheets/bst-bmi088-ds001.pdf
上图说的是,加速度计三轴x、y、z的加速度值各自分成高八位和低八位,x轴低八位存储在0x12 ,x
轴高八位在0x13 ,y轴低八位在0x14 ,y轴高八位在0x15 ,z轴低八位在0x16 ,z后高八位在0x17。
我们之后的任务就是读取0x12到0x17这六个寄存器的值,然后各自的低八位和高八位拼接。
上图说的是,PA4置0 ,图中的CSB变低,SPI开始工作。PA4置1,图中的CSB变高,SPI停止工
作。
下图说的是,PA4置0 ,SPI开始工作。master给slave发送8个比特:Bit #0和Bit #1-7,Bit #0决定是
写还是读,Bit #1-7表示slave的某个寄存器的地址,比如0x12。如果Bit #0是0 ,写,master给slave
发送8个比特:Bit #8-15,这个值会被写入0x12寄存器里,PA4置1,SPI停止工作,操作完成。如果
Bit #0是1,读,master从slave接收8个比特:Bit #8-15,这个值是0x12寄存器里的值,加速度计比
较特殊,它的Bit #8-15是无效值,所以需要master从slave再接收8个比特:Bit #16-23,这个值才是
0x12寄存器里的值,PA4置1,SPI停止工作,操作完成。PA4也可以不置1,master从slave再接收8
个比特: Bit #24-31 ,这个值是0x13寄存器里的值。
上图说的是,向寄存器0x7E 写入值0xB6 ,加速度计的各个寄存器的值会恢复为默认值,这个叫做
软件复位,需要1ms来完成。复位除了软件复位,还有硬件复位比如上电。每次复位后都要向寄存
器0x7D写入值0x04 ,以便获取加速度计的值,。
下图解释了为什么。因为上电之后,陀螺仪会进入正常模式。而加速度计会进入暂停模式,暂停模
式里加速度计的整个模拟部分关断,不执行数据采集,寄存器的值不更新,但仍然可以读取。向寄
存器ACC_PWR_CTRL(即寄存器0x7D)写入值0x04 ,使加速度计进入正常模式,需要450us ,即
0.45ms ,HAL_Delay()函数最小只能延时1ms,所以我们程序里这里按1ms来延时,影响不大。
下图说的是,不仅是软件复位,加速度计的硬件复位(上电) 之后也需要1ms时间。
前边说的啰里啰唆,其实代码思路还是很简单的,就大致三步。软件复位,从暂停模式进入正常模
式,读寄存器的值并拼接。陀螺仪的代码更简单只有两步。软件复位,读寄存器
原创力文档


文档评论(0)