找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3367|回复: 1
收起左侧

基于stm32f407zet6的电子手环程序 0.96OLED MPU6050 MAX30102 蓝牙

  [复制链接]
ID:840143 发表于 2021-11-16 14:56 | 显示全部楼层 |阅读模式
0.96OLED MPU6050 MAX30102 蓝牙

单片机源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "tim.h"
  5. #include "pwm.h"
  6. #include "spi.h"
  7. #include "iic.h"
  8. #include "led.h"
  9. #include "wk_up.h"
  10. #include "key.h"
  11. #include "rtc.h"
  12. #include "usart2.h"
  13. #include "24cxx.h"
  14. #include "w25qxx.h"
  15. #include "dht11.h"
  16. #include "algorithm.h"
  17. #include "max30102.h"
  18. #include "max30102test.h"
  19. #include "mpu6050.h"
  20. #include "inv_mpu.h"
  21. #include "inv_mpu_dmp_motion_driver.h"
  22. #include "ANO_TC.h"
  23. #include "draw_api.h"
  24. #include "featureset.h"
  25. #include "test.h"

  26. /*******************************************************************************
  27.                                                         STM32阶段项目:电子手环
  28. 2021/10/27        完成部分底层驱动,移植OLED图形库,用于后面0.96寸屏幕的显示,编译通过。

  29. 2021/10/28        增加RTC,DHT11,WK_UP休眠唤醒(有BUG,按一下会触发多次)。

  30. 2021/10/29        完成MPU6050的移植,DMP移植,匿名上位机通讯(V2.6版本),其他版本的上
  31.                         位机不不可用。

  32. 2021/10/30        完成OLED时钟显示界面,OLED图形库增加电量显示图标,信号显示图标,底层
  33.                         驱动基本完成。

  34. 2021/10/31        完成屏幕显示的雏形,心率和设置功能未添加(后续完善),很多细节未处理
  35.                         MPU6050必须要喊平稳才能校准。(后续增加MPU6050上传至更高版本的匿名上
  36.                         位机),原因:高版本的上位机拥有更好看的图形化界面。
  37.                        
  38. 2021/11/1        完善时钟,计步,姿态逻辑模块功能。移植MAX30102(测试未通过,初始化无
  39.                         反应),之前用轮询扫描按键,系统响应太慢,修改成外部中断。
  40.                         计划:增加蓝牙设置时间,亮度,定时息屏,抬起唤醒(屏幕由灭到亮,实际
  41.                         还没有休眠),闹钟功能。

  42. 2021/11/2        完善蓝牙设置时间,亮度,息屏,闹钟,休眠,抬起唤醒,跟随旋转。
  43.                         待完善:心率,按键设置功能。
  44.                         按键设置功能:亮度、时间设置已完成。
  45.                         待完善:日期设置,心率。
  46.                        
  47. 2021/11/3        完成设置功能,修复菜单循环显示出现乱码问题。
  48.                         待完善:心率检测。
  49.                        
  50. 2021/11/4        心率驱动完成,逻辑实现完成,项目基本完成。
  51. *****************************************************************************/
  52. /*******************************************************************************
  53. 实现功能:OLED显示,按键切换功能,抬起唤醒,自适应切换屏幕,心率血氧测量,计步功能。

  54. 实现过程:用STM43F407ZET6作为主控芯片,采用外部中断检测按键,用来切换功能,利用RTC
  55.                   得到当前时间和日期,利用MPU6050姿态传感器采集数据,经过姿态融合结算出欧
  56.                   拉角,分析欧拉角的值得到当前的状态,判断不同状态要进行不同的处理,驱动
  57.                   MAX30102得到心率血氧值,使用UART2连接蓝牙与手机通讯,自定义手机的发送格式
  58.                   利用串口中断接收手机发过来的指令,在中断服务函数中判断,并执行相应的功能。
  59. *******************************************************************************/


  60. #define ANO_OK                 0                //开启上传功能则将此宏改为1

  61. extern void OLED_ShowBatteryRatio(u8 x,u8 y,u8 ratio);
  62. extern void OLED_ShowSignal(u8 x,u8 y,u8 strength);

  63. //函数声明
  64. void MySystemInit(void);        //各种外设的初始化
  65. void TestTask(void);                //测试函数,测试使用

  66.                
  67. /*********************************主函数***************************************/
  68. int main(void)
  69. {        
  70.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
  71.         MySystemInit();//系统初始化
  72.         while(1)
  73.         {       
  74.                 MainShow();
  75.         }
  76. }


  77. //各种接口初始化
  78. void MySystemInit(void)
  79. {
  80.         delay_init(168);                          //初始化延时函数
  81.         uart_init(115200);                        //串口初始化
  82.         USART2_Init(9600);                        //蓝牙串口初始化
  83.         LED_Init();                                        //LED初始化
  84.         EXTI_InIt();                                //按键中断初始化
  85.         WK_UP_Init();                                //开机时按下KEY2按键,非正常开机,直接进入休眠状态
  86.         InitGraph();                                //OLED初始化
  87.         OLED_ON();
  88.        
  89.         ClearScreen();
  90.         DrawBitmap(0,0,Panda,128,64);//显示开机画面
  91.         UpdateScreen();

  92.         Tim6_Init(100-1,840-1);                //为图形库提供1ms时钟节拍
  93. //        W25QXX_Init();                                //Flash初始化
  94. //        AT24CXX_Init();                                //EEPROM初始化
  95.         maxim_max30102_init();
  96.         MPU_Init();                                        //初始化MPU6050
  97.         while(mpu_dmp_init())                //初始化MPU DMP
  98.         {
  99.                 LED2 =! LED2;                        //若DMP初始化不成功,则LED2闪烁 每隔200ms
  100.                 delay_ms(200);
  101.         }
  102.         ClearScreen();//清屏
  103.         printf("system init ok \r\n");       
  104. }


  105. /*************************************************END*******************************************************/
复制代码

Keil代码下载:
最终版.7z (431.47 KB, 下载次数: 233)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:783426 发表于 2021-11-20 16:09 | 显示全部楼层
感谢楼主的分享,最近刚开始接触到MAX30102,苦于店铺给的资料太杂,写的头都要秃了,感谢感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表