標題:
ADS1292心電監(jiān)測裝置的STM32f4源碼,SPI通信 源程序
[打印本頁]
作者:
cuo_jue
時間:
2020-10-9 15:17
標題:
ADS1292心電監(jiān)測裝置的STM32f4源碼,SPI通信 源程序
ADS1292通過SPI發(fā)送數(shù)據(jù)給STM32f4,。單片機利用串口發(fā)消息給串口助手
單片機源程序如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "ADS1292.h"
#include "Timer.h"
#include "dma.h"
#define SEND_BUF_SIZE 8200 //發(fā)送數(shù)據(jù)長度,最好等于sizeof(TEXT_TO_SEND)+2的整數(shù)倍.
int main(void)
{
u8 res,i,sum;
u8 data_to_send[60];//串口發(fā)送緩存
u8 usbstatus=0;
u32 cannle[2]; //存儲兩個通道的數(shù)據(jù)
s32 p_Temp[2]; //數(shù)據(jù)緩存
data_to_send[0]=0xAA;
data_to_send[1]=0xAA;
data_to_send[2]=0xF1;
data_to_send[3]=8;
//初始化系統(tǒng)時鐘 72M
SystemInit();
delay_init(168); //初始化延時函數(shù)
// delay_init();
delay_ms(100);
uart_init(115200); //串口初始化
//uart1_init(115200);//串口初始化為115200
// DMA_Config(DMA1_Channel4,(u32)&USART1->DR,(u32)data_to_send);//串口1DMA設置
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.
USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE); //DMA
// LED_Init();
// LED_Init1();
ADS1292_Init(); //初始化ads1292
while(Set_ADS1292_Collect(0))//0 正常采集 //1 1mV1Hz內(nèi)部側(cè)試信號 //2 內(nèi)部短接噪聲測試
{
printf("1292寄存器設置失敗\r\n");
delay_ms(1000);
// DS3 =!DS3;
// DS4 =!DS4;
}
printf("寄存器設置成功\r\n");
delay_ms(1000);
// DS3 =LEDOFF;
// DS4 =LEDOFF;
TIM2_Init(10000,7200);//系統(tǒng)指示
//TIM4_Init(2000,7200);//按鍵消抖
EXTI->IMR |= EXTI_Line8;//開DRDY中斷
while(1)//循環(huán)發(fā)送數(shù)據(jù)
{
LED1 =0;
if(ads1292_recive_flag)
{
cannle[0]=ads1292_Cache[3]<<16 | ads1292_Cache[4]<<8 | ads1292_Cache[5];//獲取原始數(shù)據(jù)
cannle[1]=ads1292_Cache[6]<<16 | ads1292_Cache[7]<<8 | ads1292_Cache[8];
p_Temp[0] = get_volt(cannle[0]); //把采到的3個字節(jié)轉(zhuǎn)成有符號32位數(shù)
p_Temp[1] = get_volt(cannle[1]); //把采到的3個字節(jié)轉(zhuǎn)成有符號32位數(shù)
//有符號數(shù)為再轉(zhuǎn)為無符號,無符號數(shù)為邏輯右移
cannle[0] = p_Temp[0];
cannle[1] = p_Temp[1];
data_to_send[4]=cannle[0]>>24; //25-32位
data_to_send[5]=cannle[0]>>16; //17-24
data_to_send[6]=cannle[0]>>8; //9-16
data_to_send[7]=cannle[0]; //1-8
data_to_send[8]=cannle[1]>>24; //25-32位
data_to_send[9]=cannle[1]>>16; //17-24
data_to_send[10]=cannle[1]>>8; //9-16
data_to_send[11]=cannle[1]; //1-8
for(i=0;i<12;i++)
sum += data_to_send[i];
data_to_send[12] = sum; //校驗和
// DMA_Enable(DMA1_Channel4,13);//串口1DMA
MYDMA_Enable(DMA2_Stream7,SEND_BUF_SIZE);//開始一次DMA傳輸!
ads1292_recive_flag=0;
sum = 0;
}
}
}
/*功能:把采到的3個字節(jié)轉(zhuǎn)成有符號32位數(shù) */
s32 get_volt(u32 num)
{
s32 temp;
temp = num;
temp <<= 8;
temp >>= 8;
return temp;
}
復制代碼
所有資料51hei提供下載:
心電監(jiān)測.7z
(307.02 KB, 下載次數(shù): 159)
2020-10-9 18:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
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