-第 2 页-
0、友情提示
《零死角玩转 STM32》系列教程由初级篇、中级篇、高级篇、系统篇、
四个部分组成,根据野火 STM32 开发板旧版教程升级而来,且经过重新深入编
写,重新排版,更适合初学者,步步为营,从入门到精通,从裸奔到系统,让
您零死角玩转 STM32。M3 的世界,与野火同行,乐意惬无边。
另外,野火团队历时一年精心打造的《STM32 库开发实战指南》将于今
年 10 月份由机械工业出版社出版,该书的排版更适于纸质书本阅读以及更有利
于查阅资料。内容上会给你带来更多的惊喜。是一本学习 STM32 必备的工具
书。敬请期待!
-第 3 页-
10、重力感应/三轴加速(MMA7455)
10.1 实验描述及工程文件清单
实验描述
控制倾角传感器(MMA7455)测量加速度和倾角,通过串口
打印测量得的数据。
硬件连接
PB6-I2C1_SCL
PB7-I2C1_SDA
用到的库文件
startup/start_stm32f10x_hd.c
CMSIS/core_cm3.c
CMSIS/system_stm32f10x.c
FWlib/stm32f10x_gpio.c
FWlib/stm32f10x_rcc.c
FWlib/stm32f10x_usart.c
FWlib/stm32f10x_i2c.c
用户编写的文件
USER/main.c
USER/stm32f10x_it.c
USER/usart1.c
USER/I2C_MMA.c
在这个加速度传感器例程中野火采用使用了集成模块,只需要把模块的电
源线和 SDA,SCL 端口连接到开发板上的 I2C 总线即可。EEPROM 的也使用了
I2C 总线,所以可以参照 EEPROM 的件原理图。
-第 4 页-
野火 STM32 开发板 2.4G 无线模块接口图:
10.2 MMA7455 简介
MMA7455 是一款数字三轴加速度传感器,可以利用测量出来的重力加速
度在某方向上的分量来计算器件与水平面间的夹角,测量倾角是很多有趣应用
的基础。
本实验采用 I2C 方式与传感器通讯,控制传感器用 2g 的量程。
在测量前对传感器进行校准。
10.3 代码分析
首先要添加用的库文件,在工程文件夹下 Fwlib 下我们需添加以下库文
件:
1. stm32f10x_gpio.c
2. stm32f10x_rcc.c
3. stm32f10x_usart.c
4. stm32f10x_i2c.c
还要在 stm32f10x_conf.h 中把相应的头文件添加进来:
1. #include "stm32f10x_gpio.h"
2. #include "stm32f10x_i2c.h"
3. #include "stm32f10x_rcc.h"
4. #include "stm32f10x_usart.h"
配置好所需的库文件之后,我们就从 main 函数开始分析:
1. *
2. * 函数名:main
3. * 描述 :主函数
4. * 输入 :无
-第 5 页-
5. * 输出 :无
6. * 返回 :无
7. */
8. int main(void)
9. {
10. /* 配置系统时钟为 72M */
11. SystemInit();
12.
13. /* 串口 1 初始化 */
14. USART1_Config();
15.
16. /*重力传感器初始化*/
17. I2C_MMA_Init() ;
18.
19. /*重力传感器校准*/
20. I2C_MMA_Cal();
21.
22. printf("\r\n--------这是一个重力传感器测试程序---------\r\n");
23.
24.
25. /* 检测倾角*/
26. I2C_MMA_Test(&X_Value);
27. I2C_MMA_Test(&Y_Value);
28. I2C_MMA_Test(&Z_Value);
29.
30. printf("\r\n--------X 方向的数据----------\r\n");
31. I2C_MMA_Printf(&X_Value);
32.
33. printf("\r\n--------Y 方向的数据----------\r\n");
34. I2C_MMA_Printf(&Y_Value);
35.
36. printf("\r\n--------Z 方向的数据----------\r\n");
37. I2C_MMA_Printf(&Z_Value);
38.
39. /*进入省电模式*/
40. if(I2C_MMA_Standby()== SUCCESS )
41.
42. printf("\r\n Acceleration enter standby mode! \r\n");
43. else
44. printf("\r\n Standby mode ERROR! \r\n");
45.
46. }
系统库函数 SystemInit(); 将系统时钟设置为 72M, USART1_Config(); 配置串
口,关于这两个函数的具体讲解可以参考前面的教程,这里不再详述。
1. /*
2. * 函数名:I2C_MMA_Init
3. * 描述 :I2C 外设(MMA7455)初始化
4. * 输入 :无
5. * 输出 :无
6. * 调用 :外部调用
7. */
8. void I2C_MMA_Init(void)
9. {
10. I2C_GPIO_Config();
11. I2C_Mode_Config();
12. }