找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 5360|回复: 4
收起左侧

ADS1292心电监测装置的STM32f4源码,SPI通信 源程序

[复制链接]
ID:591749 发表于 2020-10-9 15:17 | 显示全部楼层 |阅读模式
ADS1292通过SPI发送数据给STM32f4,。单片机利用串口发消息给串口助手

单片机源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"   
  5. #include "ADS1292.h"
  6. #include "Timer.h"
  7. #include "dma.h"


  8. #define SEND_BUF_SIZE 8200        //发送数据长度,最好等于sizeof(TEXT_TO_SEND)+2的整数倍.




  9. int main(void)
  10. {

  11. u8 res,i,sum;        
  12.                 u8 data_to_send[60];//串口发送缓存
  13.                 u8 usbstatus=0;        
  14.                 u32 cannle[2];        //存储两个通道的数据
  15.                 s32        p_Temp[2];        //数据缓存
  16.         
  17.                 data_to_send[0]=0xAA;
  18.                 data_to_send[1]=0xAA;
  19.                 data_to_send[2]=0xF1;        
  20.                 data_to_send[3]=8;

  21. //初始化系统时钟         72M        
  22.                 SystemInit();        
  23.         delay_init(168);    //初始化延时函数
  24.         //                delay_init();        
  25.                 delay_ms(100);
  26.         
  27.         uart_init(115200);         //串口初始化

  28.                 //uart1_init(115200);//串口初始化为115200               
  29.                
  30. //                DMA_Config(DMA1_Channel4,(u32)&USART1->DR,(u32)data_to_send);//串口1DMA设置
  31.                 MYDMA_Config(DMA2_Stream7,DMA_Channel_4,(u32)&USART1->DR,(u32)data_to_send,SEND_BUF_SIZE);//DMA2,STEAM7,CH4,外设为串口1,存储器为SendBuff,长度为:SEND_BUF_SIZE.
  32.                 USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE); //DMA        
  33.                  
  34.         //        LED_Init();                        
  35. //   LED_Init1();                        
  36.                 ADS1292_Init();        //初始化ads1292                                       
  37.                 while(Set_ADS1292_Collect(0))//0 正常采集  //1 1mV1Hz内部侧试信号 //2 内部短接噪声测试
  38.                 {        
  39.                                 printf("1292寄存器设置失败\r\n");
  40.                                 delay_ms(1000);               
  41. //                                DS3 =!DS3;        
  42.         //                        DS4 =!DS4;        
  43.                 }        
  44.                 printf("寄存器设置成功\r\n");
  45.                 delay_ms(1000);               
  46. //                DS3 =LEDOFF;               
  47.         //        DS4 =LEDOFF;
  48.                
  49.                 TIM2_Init(10000,7200);//系统指示
  50.                 //TIM4_Init(2000,7200);//按键消抖
  51.                
  52.                 EXTI->IMR |= EXTI_Line8;//开DRDY中断                        
  53.                 while(1)//循环发送数据               
  54.                 {
  55.                                 LED1 =0;
  56.                                 if(ads1292_recive_flag)
  57.                                 {                                                                                
  58.                                                         cannle[0]=ads1292_Cache[3]<<16 | ads1292_Cache[4]<<8 | ads1292_Cache[5];//获取原始数据               
  59.                                                         cannle[1]=ads1292_Cache[6]<<16 | ads1292_Cache[7]<<8 | ads1292_Cache[8];
  60.                                                 
  61.                                                         p_Temp[0] = get_volt(cannle[0]);        //把采到的3个字节转成有符号32位数
  62.                                                         p_Temp[1] = get_volt(cannle[1]);        //把采到的3个字节转成有符号32位数
  63.                                        
  64.                                                         //有符号数为再转为无符号,无符号数为逻辑右移
  65.                                                         cannle[0] = p_Temp[0];
  66.                                                         cannle[1]        = p_Temp[1];
  67.                                                         data_to_send[4]=cannle[0]>>24;                //25-32位
  68.                                                         data_to_send[5]=cannle[0]>>16;          //17-24
  69.                                                         data_to_send[6]=cannle[0]>>8;                //9-16
  70.                                                         data_to_send[7]=cannle[0];                         //1-8

  71.                                                         data_to_send[8]=cannle[1]>>24;                //25-32位
  72.                                                         data_to_send[9]=cannle[1]>>16;          //17-24
  73.                                                         data_to_send[10]=cannle[1]>>8;                //9-16
  74.                                                         data_to_send[11]=cannle[1];                         //1-8
  75.                                                         
  76.                                                         for(i=0;i<12;i++)
  77.                                                                         sum += data_to_send[i];                                                        
  78.                                                         data_to_send[12] = sum;        //校验和                                                                                                                                                
  79. //                                                        DMA_Enable(DMA1_Channel4,13);//串口1DMA
  80.                                                         MYDMA_Enable(DMA2_Stream7,SEND_BUF_SIZE);//开始一次DMA传输!                                                                                                                                 
  81.                                                         ads1292_recive_flag=0;
  82.                                                         sum = 0;        
  83.                                 }
  84.                 }               
  85. }


  86. /*功能:把采到的3个字节转成有符号32位数 */
  87. s32 get_volt(u32 num)
  88. {               
  89.                         s32 temp;                        
  90.                         temp = num;
  91.                         temp <<= 8;
  92.                         temp >>= 8;
  93.                         return temp;
  94. }
复制代码

所有资料51hei提供下载:
心电监测.7z (307.02 KB, 下载次数: 159)

评分

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

查看全部评分

回复

举报

ID:545902 发表于 2020-10-10 20:19 | 显示全部楼层
为什么我串口显示1292寄存器设置失败
回复

举报

ID:353953 发表于 2020-10-11 20:06 来自触屏版 | 显示全部楼层
thb0430 发表于 2020-10-10 20:19
为什么我串口显示1292寄存器设置失败

同问,挺急的。
回复

举报

ID:828561 发表于 2020-10-12 12:05 | 显示全部楼层
找到原因了吗
回复

举报

ID:1014240 发表于 2022-4-8 16:58 | 显示全部楼层

在采集模式的函数里res初始为0,写入寄存器成功则res=1,返回res的值,到主函数的while循环里=1就出不来了,一直打印循环里的寄存器设置失败。可以改一下循环条件,或者改一下res值的设置
回复

举报

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

本版积分规则

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

Powered by 单片机教程网

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