找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14689|回复: 25
打印 上一主题 下一主题
收起左侧

STM32和uCGUI实现人体心电采集波形显示(开源原理图和工程文件

  [复制链接]
跳转到指定楼层
楼主
本设计主要实现了以STM32为核心的人体心电采集系统软硬件的设计。软件设计过程是在STM32上移植的uCGUI做图形界面,并如实显示采集到的心电波形信号,有SD卡存储和USB数据传输功能,欢迎大家互相交流学习,有做不到的地方还需各路高手指导修正。

1、整体效果图




2、ucgui


3、界面显示


4、心电电路板和STM32


5、示波器显示心电波形


6、STM32显示心电波形


部分源码(完整版本请下载附件):
  1. #include "..APPincludes.h"


  2. // A/D 通道选择命令字和工作寄存器
  3. #define        CHX         0x90         //通道X+的选择控制字        
  4. #define        CHY         0xd0        //通道Y+的选择控制字

  5. //#define        CHX         0xd0         //通道X+的选择控制字        
  6. //#define        CHY         0x90        //通道Y+的选择控制字

  7. MATRIX  Matrix;//为了避免重复校准,可以保存该校准值

  8. //====================================================================================
  9. static void Delayus( int k)
  10. {
  11. int j;
  12.    
  13.     for(j=k;j > 0;j--);   
  14. }

  15. //====================================================================================
  16. void TP_Init(void)
  17. {
  18.   //PB10, PD9, PD10   CS,SI,CLK
  19.   GPIO_InitTypeDef GPIO_InitStructure;
  20.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10;
  21.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                 //推挽输出
  22.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  23.   GPIO_Init(GPIOB, &GPIO_InitStructure);

  24.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9|GPIO_Pin_10 ;  
  25.   GPIO_Init(GPIOD, &GPIO_InitStructure);

  26.   //PENIRQ, SO        
  27.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11;
  28.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
  29.   GPIO_Init(GPIOB, &GPIO_InitStructure);

  30.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_15;
  31.   GPIO_Init(GPIOE, &GPIO_InitStructure);
  32.   //start_touch();
  33. }

  34. void start_touch()   
  35. {           
  36.         TP_DCLK_L();   
  37.         TP_CS_H();         
  38.         TP_DIN_H();  
  39.         TP_DCLK_H();   
  40.         TP_CS_L();         
  41. }

  42. //====================================================================================
  43. static void WR_CMD (u8 cmd)
  44. {
  45. //u8 buf;
  46.          
  47. }


  48. //====================================================================================
  49. static u16 RD_AD(void)
  50. {
  51.   u16 buf=0;
  52. u8 i;
  53.    
  54.     TP_DIN_L(); //TP_DIN(0);
  55.     TP_DCLK_H(); //TP_DCLK(1);
  56.     for(i=0; i<12; i++)
  57.     {        buf <<= 1;
  58.         
  59.         TP_DCLK_H(); //TP_DCLK(0);         
  60.         Delayus(5);
  61.         TP_DCLK_L(); //TP_DCLK(1);
  62.         
  63.         if(TP_DOUT)        buf |= 1;
  64.         
  65.         Delayus(5);
  66.         
  67.     }
  68.     TP_CS_H(); //TP_CS(1);
  69.     //buf>>=4;//只有12位有效
  70.     //buf&=0x0fff;
  71.     return(buf);
  72. }





  73. #define ReadLoop 13 //必须>2
  74. #define LOSS_DATA 5 //前后丢掉数据个数
  75. u16 Read_XY(u8 xy)
  76. {
  77. u16 i, j;
  78. u16 buf[ReadLoop];
  79. uint32 sum;
  80. u16 val;
  81.    
  82.     for(i=0; i<readloop; i++)
  83.     {
  84.        WR_CMD(xy);
  85.        //while(TP_BUSY);
  86.        Delayus(5);
  87.        buf[i]=RD_AD();
  88.       
  89.        //sum += buf[i];
  90.     }
  91.    
  92.     //排序
  93.     for(i=0; i<readloop-1; i++)
  94.     {
  95.        for(j=i+1; j<readloop; j++)
  96.        {
  97.           if(buf[i]>buf[j])
  98.           {
  99.              val=buf[i];
  100.              buf[i]=buf[j];
  101.              buf[j]=val;
  102.           }
  103.        }
  104.     }
  105.    
  106.     sum=0;
  107.     for(i=LOSS_DATA; i<readloop-1-loss_data; i++)
  108.        sum += buf[i];
  109.     val=sum/(ReadLoop-2*LOSS_DATA);
  110.    
  111.     return (val);   
  112. }

  113. //====================================================================================
  114. uint8 TP_GetAdXY(u16 *x, u16 *y)
  115. {
  116. //u16 adx,ady;
  117.    
  118.     *y=Read_XY(CHX);
  119.     *x=Read_XY(CHY);
  120.     //*x=adx;
  121.     //*y=ady;
  122.     if(*x<100 || *y<100)
  123.        return(0);
  124.     else
  125.        return(1);
  126. }

  127. /*
  128. 功能:读取触摸屏读坐标,该坐标未做转换,不能直接使用

  129. 返回:0=无效坐标
  130.       1=有效坐标

  131. 说明:本函数连续采样2次,2次采样结果+-5范围内才算有效
  132. */
  133. uint8 TP_GetAdXY2(u16 *x, u16 *y, uint32 delay)
  134. {u16 x1,y1;
  135. u16 x2,y2;
  136. u8 flag;

  137.     flag=TP_GetAdXY(&x1, &y1);
  138.    
  139.     if(flag==0)
  140.        return(0);
  141.    
  142. //    if(delay>=OS_TIME)
  143. //       os_dly_wait(delay/OS_TIME);//300ms后再采样1次
  144.    
  145.     //do{
  146.        flag=TP_GetAdXY(&x2, &y2);
  147.     //}while(flag);
  148.    
  149.     if(flag==0)
  150.        return(0);
  151.    
  152.     if( ( (x2<=x1 && x1<x2+50) ||="" (x1<="x2" &&="" x2<x1+50)="" )="" 前后两次采样在+-5内
  153.      && ( (y2<=y1 && y1<y2+50) ||="" (y1<="y2" &&="" y2<y1+50)="" )="" )
  154.     {
  155.         *x=(x1+x2)/2;
  156.         *y=(y1+y2)/2;
  157.         return(1);
  158.     }
  159.     else
  160.        return(0);
  161. }

  162. ///*
  163. //功能:读取触摸屏在LCD的坐标,该坐标已经转换为可用的视图坐标
  164. //返回:0=不在显示区域
  165. //      1=在显示区域
  166. //*/
  167. //uint8 TP_GetLCDXY(u16 *x, u16 *y)
  168. //{POINT   displayPoint;
  169. // POINT   TouchSample;
  170. // uint16 xt,yt;        
  171. // uint8 flag;
  172. //
  173. //    flag=TP_GetAdXY2(&xt, &yt, 0);
  174. //    if(flag)
  175. //    {
  176. //       TouchSample.x=xt/4; TouchSample.y=yt/4;
  177. //       getDisplayPoint( &displayPoint, &TouchSample, &Matrix );
  178. //      
  179. //       if(IsDisplayArea(&displayPoint)) //判断是否在显示区域
  180. //       {
  181. //          flag=1;
  182. //          *x=displayPoint.x;
  183. //          *y=displayPoint.y;
  184. //       }
  185. //       else
  186. //          flag=0;
  187. //    }
  188. //   
  189. //    return(flag);
  190. //}
复制代码

描述:工程文件 My_MiniSTM32VET_ECG_uCGUI_DEMO.rar (3.57 MB, 下载次数: 341)

描述:ECG&STM32电路原理图: 人体心电采集系统电路原理图.zip (210.65 KB, 下载次数: 246)

评分

参与人数 2黑币 +11 收起 理由
AAA_MCU + 6 很给力!
fengye20101112 + 5

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏13 分享淘帖 顶4 踩
回复

使用道具 举报

沙发
ID:124631 发表于 2016-6-2 11:05 | 只看该作者
顶一个
回复

使用道具 举报

板凳
ID:124604 发表于 2016-6-3 17:29 | 只看该作者
太棒了!
回复

使用道具 举报

地板
ID:124675 发表于 2016-6-4 00:49 | 只看该作者
谢谢分享
回复

使用道具 举报

5#
ID:122102 发表于 2016-6-6 08:17 | 只看该作者
感谢楼主分享
回复

使用道具 举报

6#
ID:138931 发表于 2016-12-28 17:57 | 只看该作者
号帖子,有时间做一个
回复

使用道具 举报

7#
ID:79034 发表于 2017-1-3 12:35 | 只看该作者
看到开源的好帖就的顶,让大家都看看。。。
回复

使用道具 举报

8#
ID:169125 发表于 2017-3-8 15:19 | 只看该作者
学习了这个贴对我帮助很大

评分

参与人数 1黑币 +5 收起 理由
fengye20101112 + 5

查看全部评分

回复

使用道具 举报

9#
ID:236322 发表于 2017-9-28 13:50 | 只看该作者
赞一个,学习学习
回复

使用道具 举报

10#
ID:68875 发表于 2018-3-21 20:52 | 只看该作者
谢谢分享
回复

使用道具 举报

11#
ID:296103 发表于 2018-3-23 20:53 | 只看该作者
学习了这个贴对我帮助很大
回复

使用道具 举报

12#
ID:299488 发表于 2018-3-30 16:01 | 只看该作者
学习了
回复

使用道具 举报

13#
ID:262100 发表于 2018-5-18 16:34 | 只看该作者
楼主,你的例程我下下来编译报了个错误
hw_config.c(17): error:  #5: cannot open source input file "stm32f10x_lib.h": No such file or directory
楼主的工程中是不是少添加了这个.h的?
回复

使用道具 举报

14#
ID:53978 发表于 2018-5-26 21:34 | 只看该作者
这个好棒 顶
回复

使用道具 举报

15#
ID:370231 发表于 2018-7-26 15:08 | 只看该作者
涨见识了,厉害厉害
回复

使用道具 举报

16#
ID:398578 发表于 2018-9-16 10:59 | 只看该作者

顶一个
回复

使用道具 举报

17#
ID:477599 发表于 2019-2-18 10:06 | 只看该作者
请问编程环境是keil吗
回复

使用道具 举报

18#
ID:227731 发表于 2019-5-25 18:00 | 只看该作者
谢谢分享。
回复

使用道具 举报

19#
ID:685272 发表于 2020-1-12 11:12 | 只看该作者
好东西,谢谢
回复

使用道具 举报

20#
ID:239620 发表于 2020-5-27 13:29 | 只看该作者
下载下来学习一下,感谢分享
回复

使用道具 举报

21#
ID:377382 发表于 2020-5-27 22:49 | 只看该作者
谢谢分享
回复

使用道具 举报

22#
ID:630379 发表于 2021-3-25 13:37 | 只看该作者
很棒,试试看能不能改改
回复

使用道具 举报

23#
ID:95059 发表于 2022-6-17 23:50 | 只看该作者
下载下来了,可是没编译过去,有4个错误,咋办呢?"..\ObjFlash\STM32-FD-ucgui.axf" - 4 Error(s), 21 Warning(s).
回复

使用道具 举报

24#
ID:95059 发表于 2022-6-17 23:51 | 只看该作者
chen.michael 发表于 2019-2-18 10:06
请问编程环境是keil吗

是的。打开了文件,文件挺大的
回复

使用道具 举报

25#
ID:1074983 发表于 2023-5-2 17:23 | 只看该作者
lanxichang 发表于 2022-6-17 23:50
下载下来了,可是没编译过去,有4个错误,咋办呢?"..\ObjFlash\STM32-FD-ucgui.axf" - 4 Error(s), 21 War ...

你好,我下载了之后没有看到project文件,想问问你是在哪里打开的呀
回复

使用道具 举报

26#
ID:1074983 发表于 2023-5-2 17:24 | 只看该作者
lanxichang 发表于 2022-6-17 23:51
是的。打开了文件,文件挺大的

你好,请问在哪里打开呀,我咋没看到project文件呢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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