你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

我在主程序中调用了一段 DMA发送程序 ,然后就出问题了

[复制链接]
smile雷少 提问时间:2016-5-15 14:04 /
我把程序 贴上了  各位大神帮我看看怎么回事   现在的问题是  dma无法正常发送,我没调用send函数时,led能正常显示 一旦调用了led都无法正确显示

#include "misc.h"
#include "stdio.h"
#include "math.h"
#include "stm32l1xx_adc.h"
#include "stm32l1xx_lcd.h"
#include "stm32l1xx_rcc.h"
#include "stm32l1xx_rtc.h"
#include "stm32l1xx_exti.h"
#include "stm32l1xx_pwr.h"
#include "stm32l1xx_syscfg.h"
#include "stm32l1xx_dbgmcu.h"
#include "stm32_tsl_api.h"
#include "stm32l15x_tsl_ct_acquisition.h"
#include "led.h"
#include "ClockConfig.h"
#include "IIC_Communication.h"
#include "afe4400.h"
#include "coef_filter.h"
#include "Usart.h"
#define N 50
#define sample_rate 250
#define Divided_Fre 2
#define High_pass_Orders 667
#define Low_pass_Orders 128
unsigned char Disp_Flag,readDataFlag;
int send(void);
long AFE44xx_SPO2_Data_buf[6],test,coef_IR[High_pass_Orders],coef_Red[High_pass_Orders],coef_low_IR[Low_pass_Orders],coef_low_Red[Low_pass_Orders];
float XRed[sample_rate],YIRed[sample_rate];
//uint32_t ;
//void delay_ms(uint32_t ms);
//******main*******//
int main(void)
{       
                        unsigned char i,k,Tmax,x,z,Win_Num,Str_Voltage[9]={0},spo2_value[9]={0};
      //unsigned int Fs;
                        unsigned int Freq_Dvider4;
      int T_data;
                        float Ynt=0.0,Ynt_Red,Fs,Lmax,Lmax_pre,Lmax_bac,Ynt_Disp,XRed_Sum,YIRed_Sum,XRed_Avg,YRed_Avg,R;//XRed[sample_rate],YIRed[sample_rate];
      double Lxy,Lxx,Lyy;
                        uint32_t j,T_pre,T_bac=1;
      uint16_t n;  
      n=0;readDataFlag=0;
      Freq_Dvider4=1;
      x=0;k=0;z=0;
                        ClockConfig();
                        Led_Init();                          //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
                        I2C_Configuration();
                        OLED_Init();                       
                        OLED_CLS();//ÇåÆÁ
                        AFE44xx_PowerOn_Init();       
                        for(i=0;i<5;i++)
                        {
                        OLED_ShowCN_12x12(2+i*12,0,i);//??????
                        }
                        for(i=5;i<10;i++)
                        {
                        OLED_ShowCN_12x12(2+(i-5)*12,2,i);//??????
                        }       
                        while(1)
                        {                       
                                if(readDataFlag)
                         {
                                readDataFlag = 0;
                                AFE44xx_SPO2_Data_buf[0] = AFE44xx_Reg_Read(0x2A);  //read RED data
                                AFE44xx_SPO2_Data_buf[1] = AFE44xx_Reg_Read(43);  //read Ambient data
                                AFE44xx_SPO2_Data_buf[2] = AFE44xx_Reg_Read(44);  //read IR Data
                                AFE44xx_SPO2_Data_buf[3] = AFE44xx_Reg_Read(45);  //read Ambient Data
                                AFE44xx_SPO2_Data_buf[4] = AFE44xx_Reg_Read(0x2E);  //read RED - Ambient Data
                                AFE44xx_SPO2_Data_buf[5] = AFE44xx_Reg_Read(47);  //read IR - Ambient Data3       
        /**************************************high pass filter*****************************************/                                                                 
                                coef_IR[0]=AFE44xx_SPO2_Data_buf[5];
                                coef_Red[0]=AFE44xx_SPO2_Data_buf[4];
                                for(j=0;j<High_pass_Orders;j++)
                                 {
                                Ynt=Ynt+B[j]*coef_IR[j];//IR
                                Ynt_Red=Ynt_Red+B[j]*coef_Red[j];//Red
                                 }
                                // AFE44xx_SPO2_Data_buf[5]=Ynt;
                                 for(j=0;j<High_pass_Orders-1;j++)
                                 {
                                 coef_IR[High_pass_Orders-1-j]=coef_IR[High_pass_Orders-1-j-1];//IR High_pass_Orders-1=933-1
                                 coef_Red[High_pass_Orders-1-j]=coef_Red[High_pass_Orders-1-j-1];//Red
                                 }
                                // Ynt_Disp=Ynt_Red+3000;
                                 //Ynt_Disp=Ynt+200;
                                 //Ynt_Disp=AFE44xx_SPO2_Data_buf[5];
                                 Ynt_Disp=Ynt+3000;
                /**************************************low pass filter*****************************************/                                                         
                                        coef_low_IR[0]=(long)Ynt;
                                  coef_low_Red[0]=(long)Ynt_Red;
                                        for(j=0;j<Low_pass_Orders;j++)
                                 {
                                        Ynt=Ynt+coef_low_IR[j]*B_low[j];//IR
                                        Ynt_Red=Ynt_Red+coef_low_Red[j]*B_low[j]; //Red
                                 }
                                        for(j=0;j<Low_pass_Orders-1;j++)       
           {                                 
                                        coef_low_IR[Low_pass_Orders-1-j]=coef_low_IR[Low_pass_Orders-1-j-1];       
                                        coef_low_Red[Low_pass_Orders-1-j]=coef_low_Red[Low_pass_Orders-1-j-1];                 
                                         }
                                         
//                                  Ynt=Ynt-3000;
//                                  Ynt_Red=Ynt_Red-3000;
        /**************************************compute Heart rate*****************************************/                                                                                         
                                 if(k<N)
                                 {       
                                         k++;
                                         if(Lmax<Ynt){Lmax=Ynt;Tmax=k;}//get the max value
                                 }
                                 else
                                 {
                                         Win_Num++;
                                         if(Tmax>4&&Tmax<N-4)//¶Ô·åÖµ»®¶¨Çø¼ä
                                         {
              z++;
                                                 if(z==1)
                                                 { T_pre=Win_Num*N-N+Tmax;Lmax_pre=Lmax;}
                                                 else if(z==2)
                                                 { Lmax_bac=Lmax;
                                                        T_bac=Win_Num*N-N+Tmax;
                                                        T_data=T_bac-T_pre;
                                                 if(T_data>125)
                                                 {
                                                         z=0;
                                                         Win_Num=0;
                                                         if(fabs(Lmax_pre-Lmax_bac)<150)
                                                         {
                                                        Fs=((250.0/(T_bac-T_pre))*60.0);
          //******************ÏÔʾÐÄÂÊ**************/       
                                Hex_to_dex_to_string((uint16_t)Fs,Str_Voltage,2);                       
                                OLED_ShowStr(60,2,Str_Voltage,3);                                //²âÊÔ6*12×Ö·û         
                                                         }
                                                 }
                                                 else z=1;
             }
            }
          k=0;
                                        Lmax=0;       
         }
//  //********************************************computer the spo2%***************************************************/       
//                         


                                 if(n<sample_rate)
                                 {
                                         XRed[n]=Ynt;
                                         YIRed[n]=Ynt_Red;       
            n++;                                         
          XRed_Sum+=Ynt;
                                        YIRed_Sum+= Ynt_Red;
         }
                                 else
                                 {  


                                n=0;
                                XRed_Avg=XRed_Sum/sample_rate*1.0;
                                YRed_Avg=YIRed_Sum/sample_rate*1.0;
                                for(j=0;j<sample_rate;j++)//
        {                                         
                                Lxy=(XRed[j]-XRed_Avg)*(YIRed[j]-YRed_Avg)*1.0+Lxy;
                                Lxx=(XRed[j]-XRed_Avg)*(XRed[j]-XRed_Avg)*1.0+Lxx;
                                Lyy=(YIRed[j]-YRed_Avg)*(YIRed[j]-YRed_Avg)*1.0+Lyy;                                         
        }
                                R=Lxy/sqrt(Lxx*Lyy)*100.0;
                                 send();//我在此处调用
   //**************ÏÔʾѪÑõÖµ%************/                                       
                                Hex_to_dex_to_string((uint16_t)R,spo2_value,5);
                                OLED_ShowStr(60,0,spo2_value,3);
                                Lxy=0.0;
                                Lxx=0.0;
                                Lyy=0.0;
                                 XRed_Sum=0;
                                 YIRed_Sum=0;                               
                                }
//                        if(n<sample_rate)
//                                {
//                                          XRed[n]=Ynt;
//                                         YIRed[n++]=Ynt_Red;               
//                                }
//         else
//                                 {
//                                         for(j=0;j<sample_rate;j++)
//                                         {
//        XRed_Sum=XRed[j]+XRed_Sum;
//        YIRed_Sum=YIRed[j]+YIRed_Sum;
//                                         }
//                                         n=0;
//                                XRed_Avg=XRed_Sum/sample_rate;
//                                YRed_Avg=YIRed_Sum/sample_rate;
//                                for(j=0;j<sample_rate;j++)//
//        {                                         
//                                Lxy=(XRed[j]-XRed_Avg)*(YIRed[j]-YRed_Avg)+Lxy;
//                                Lxx=(XRed[j]-XRed_Avg)*(XRed[j]-XRed_Avg)+Lxx;
//                                Lyy=(YIRed[j]-YRed_Avg)*(YIRed[j]-YRed_Avg)+Lyy;
//        }
//                                R=Lxy/sqrt(Lxx*Lyy)*100;
//        //**************ÏÔʾѪÑõÖµ%************/                                       
//                                Hex_to_dex_to_string((uint16_t)R,spo2_value,5);
//                                OLED_ShowStr(60,0,spo2_value,3);
//                                 XRed_Sum=0;
//                                 YIRed_Sum=0;                                       
//        }
                                 
  //*****************************PPG wave display***************************************************/                                 
                                 
                                if((Freq_Dvider4++)%Divided_Fre==0)
                                {
                                        Freq_Dvider4=1;
                                        if(Disp_Flag==1){OLED_SetPos_x(x);Disp_Flag=0;}


                                OLED_Disp(x++,Ynt_Disp);
                                if(x==128)
                                {
                                x=0;
                                OLED_CLS_Wave();
                                }
                                }
                               
                                 Ynt_Red=0;
                                 Ynt=0;
                         }
}
}
void EXTI0_IRQHandler(void)
{
        if(EXTI_GetITStatus(EXTI_Line0) != RESET)
        {
                        readDataFlag = 1;   
                        test++;               
                        if((test)%500==250)
                        GPIO_ResetBits(GPIOB,GPIO_Pin_12);
                        if((test)%500==0)
                        GPIO_SetBits(GPIOB,GPIO_Pin_12);
                        EXTI_ClearITPendingBit(EXTI_Line0);
        }
}


//************DMA通信*****************//
int send(void)
{
        float SendBuff[2];               //ÉèÖ÷¢ËÍ»º³åÇø
        float Fs=0.0, R=0.0;
        RS232_Init(9600);                //³õʼ»¯RS232
        MYDMA_Config(DMA1_Channel7,(uint32_t)&USART2->DR,(uint32_t)SendBuff,8);
        DMA_ITConfig(DMA1_Channel7, DMA_IT_TC, ENABLE);
        AFE44xx_PowerOn_Init();       
        while(1)
        {         
                        SendBuff[0]=Fs;
                        SendBuff[1]=R;
                        USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE);                      
                        MYDMA_Enable(DMA1_Channel7);                               


                       
                        while(DMA_GetITStatus(DMA1_FLAG_TC7)==RESET)
                        {


                        }
                        DMA_ClearITPendingBit(DMA1_FLAG_TC7);
               
        }
}



收藏 评论16 发布时间:2016-5-15 14:04

举报

16个回答
z258121131 回答时间:2016-5-16 09:05:03
会不会引脚重复啦

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

zjg_lizhen 回答时间:2016-5-16 09:18:46
同感
风子 回答时间:2016-5-16 09:25:42
者主函数写的真是,,完全不想看
xueshawu1 回答时间:2016-5-16 09:40:49
!!!!!!!!!!!!!!!
wtliu 回答时间:2016-5-16 10:20:46
查查寄存器,变量或管脚的定义有没有重复的。

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

power568 回答时间:2016-5-16 11:17:13
1. 你的Send函数中有个while(1),调用该函数后程序在此循环了循环执行,不会跳出函数,后面调用的显示函数肯定也不会执行...
2. 很久没有见过这么长的函数了,特别是主函数,建议你将程序分模块吧,看起来更清晰易懂...

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

荣丰宇 回答时间:2016-5-16 11:18:53
完全看不懂程序要做什么啊~~~
还有 send里面while(1)是什么

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

ahuaahua 回答时间:2016-5-16 12:04:39
1、按照你贴出来的代码,在send()里面的死循环是跳不出来的。
2、为什么要在send()里面初始化RS232_Init(9600)?,是引脚重复使用吗?引脚定义不清楚
3、调试一下,看看PC停在哪里就知道了。

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

欣辰天下 回答时间:2016-5-16 15:35:35
调用send函数里面有个无限循环啊,当然不会正常了。

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版