標題: ADS1292心電監(jiān)測裝置的STM32f4源碼,SPI通信 源程序 [打印本頁]

作者: cuo_jue    時間: 2020-10-9 15:17
標題: ADS1292心電監(jiān)測裝置的STM32f4源碼,SPI通信 源程序
ADS1292通過SPI發(fā)送數(shù)據(jù)給STM32f4,。單片機利用串口發(fā)消息給串口助手

單片機源程序如下:
  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        //發(fā)送數(shù)據(jù)長度,最好等于sizeof(TEXT_TO_SEND)+2的整數(shù)倍.




  9. int main(void)
  10. {

  11. u8 res,i,sum;        
  12.                 u8 data_to_send[60];//串口發(fā)送緩存
  13.                 u8 usbstatus=0;        
  14.                 u32 cannle[2];        //存儲兩個通道的數(shù)據(jù)
  15.                 s32        p_Temp[2];        //數(shù)據(jù)緩存
  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. //初始化系統(tǒng)時鐘         72M        
  22.                 SystemInit();        
  23.         delay_init(168);    //初始化延時函數(shù)
  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內(nèi)部側(cè)試信號 //2 內(nèi)部短接噪聲測試
  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);//系統(tǒng)指示
  50.                 //TIM4_Init(2000,7200);//按鍵消抖
  51.                
  52.                 EXTI->IMR |= EXTI_Line8;//開DRDY中斷                        
  53.                 while(1)//循環(huán)發(fā)送數(shù)據(jù)               
  54.                 {
  55.                                 LED1 =0;
  56.                                 if(ads1292_recive_flag)
  57.                                 {                                                                                
  58.                                                         cannle[0]=ads1292_Cache[3]<<16 | ads1292_Cache[4]<<8 | ads1292_Cache[5];//獲取原始數(shù)據(jù)               
  59.                                                         cannle[1]=ads1292_Cache[6]<<16 | ads1292_Cache[7]<<8 | ads1292_Cache[8];
  60.                                                 
  61.                                                         p_Temp[0] = get_volt(cannle[0]);        //把采到的3個字節(jié)轉(zhuǎn)成有符號32位數(shù)
  62.                                                         p_Temp[1] = get_volt(cannle[1]);        //把采到的3個字節(jié)轉(zhuǎn)成有符號32位數(shù)
  63.                                        
  64.                                                         //有符號數(shù)為再轉(zhuǎn)為無符號,無符號數(shù)為邏輯右移
  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個字節(jié)轉(zhuǎn)成有符號32位數(shù) */
  87. s32 get_volt(u32 num)
  88. {               
  89.                         s32 temp;                        
  90.                         temp = num;
  91.                         temp <<= 8;
  92.                         temp >>= 8;
  93.                         return temp;
  94. }
復制代碼

所有資料51hei提供下載:
心電監(jiān)測.7z (307.02 KB, 下載次數(shù): 159)


作者: thb0430    時間: 2020-10-10 20:19
為什么我串口顯示1292寄存器設置失敗

作者: dzz    時間: 2020-10-11 20:06
thb0430 發(fā)表于 2020-10-10 20:19
為什么我串口顯示1292寄存器設置失敗

同問,挺急的。
作者: ghyj    時間: 2020-10-12 12:05
找到原因了嗎
作者: HUIH    時間: 2022-4-8 16:58
ghyj 發(fā)表于 2020-10-12 12:05
找到原因了嗎

在采集模式的函數(shù)里res初始為0,寫入寄存器成功則res=1,返回res的值,到主函數(shù)的while循環(huán)里=1就出不來了,一直打印循環(huán)里的寄存器設置失敗。可以改一下循環(huán)條件,或者改一下res值的設置




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1