本人有一个项目需要用到两个16路开关对传感器进行扫描,需要用到ADC然后通过串口发送。结果发现传送速度真的很慢,而且已经开启了DMA。求问大佬怎样才能提高传输速度- #include "adc.h"
- #include "delay.h"
- #include "usart.h"
- #include "high.h"
- #include "DMA.h"
- extern __IO uint16_t ADC_ConvertedValue;
- u8 FSR_BUF[514];
-
- // void control()
- // {
- // vcc1_en=0;
- // gnd1_en=0;
- // }
-
- int channel[16][4]=
- {
- {0,0,0,0},//channel 0
- {1,0,0,0},//channel 1
- {0,1,0,0},//channel 2
- {1,1,0,0},//channel 3
- {0,0,1,0},//channel 4
- {1,0,1,0},//channel 5
- {0,1,1,0},//channel 6
- {1,1,1,0},//channel 7
- {0,0,0,1},//channel 8
- {1,0,0,1},//channel 9
- {0,1,0,1},//channel 10
- {1,1,0,1},//channel 11
- {0,0,1,1},//channel 12
- {1,0,1,1},//channel 13
- {0,1,1,1},//channel 14
- {1,1,1,1} //channel 15
- };
-
- void getadc()
- {
- volatile int k=1;
- volatile int i,j,a,p,m;
- float temp;
-
- FSR_BUF[0]=238;
- FSR_BUF[513]=255;
-
- vcc1_en=0;
- gnd1_en=0;
- vcc2_en=1;
- gnd2_en=1;
- for(i=0;i<16;i++)
- {
- vcc1_s0=channel[i][0];
- vcc1_s1=channel[i][1];
- vcc1_s2=channel[i][2];
- vcc1_s3=channel[i][3];
- for(j=0;j<16;j++)
- {
- gnd1_s0=channel[j][0];
- gnd1_s1=channel[j][1];
- gnd1_s2=channel[j][2];
- gnd1_s3=channel[j][3];
- delay_ms(1);
- temp=(float) ADC_ConvertedValue*(3.3/4096);
- p=-7.89551702691597*temp*temp*temp*temp*temp+84.1041604009715*temp*temp*temp*temp-378.645330958236*temp*temp*temp+937.394903665604*temp*temp-1350.80007444151 *temp+956.225199319509;
- if (p>250||p<=0)
- {
- p=0;
- }
- FSR_BUF[k]=p;
- k++;
- }
- }
-
- vcc1_en=1;
- gnd1_en=1;
- vcc2_en=0;
- gnd2_en=0;
- for(i=0;i<16;i++)
- {
- vcc2_s0=channel[i][0];
- vcc2_s1=channel[i][1];
- vcc2_s2=channel[i][2];
- vcc2_s3=channel[i][3];
-
- for(j=0;j<16;j++)
- {
- gnd2_s0=channel[j][0];
- gnd2_s1=channel[j][1];
- gnd2_s2=channel[j][2];
- gnd2_s3=channel[j][3];
- delay_ms(1);
- temp=(float) ADC_ConvertedValue*(3.3/4096);
- p=-7.89551702691597*temp*temp*temp*temp*temp+84.1041604009715*temp*temp*temp*temp-378.645330958236*temp*temp*temp+937.394903665604*temp*temp-1350.80007444151 *temp+956.225199319509;
- if (p>250||p<=0)
- {
- p=0;
- }
-
- FSR_BUF[k]=p;
- k++;
- }
- }
-
-
- USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);
- MYDMA_Enable(DMA1_Channel4);
- }
-
-
-
- int main(void)
- {
- delay_init();
- //delay_ms(1); //延时函数初始化
- uart_init(9600); //串口初始化为9600
- ADC1_Init(); //ADC初始化
- HIGH_Init();
- //control();
- MYDMA_Config(DMA1_Channel4,(u32)&USART1->DR,(u32)FSR_BUF,514);//DMA1通道4,外设为串口1,存储器为SendBuff,长(TEXT_LENTH+2)*100.
- while(1)
- {
- getadc();
- delay_ms(4);
- }
- }
复制代码
|