DMA和ADC代码
- //DMA1各通道配置
- //外设->存储器/16位数据宽度
- //DMA_CHx:DMA通道CHx
- //cpar:外设地址
- //cmar:存储器地址
- //cndtr:数据传输量(因为我是一个16位的数据,所以是一)
复制代码 主函数代码
- extern u16 SendBuff[2]; //数据缓存区
-
- u16 MYGet_Adc()
- {
- u32 temp_val=0;
- u8 t;
- for(t=0;t<5;t++)
- {
- temp_val+=SendBuff[0];
- delay_ms(5);
- }
- return temp_val/5;
- }
-
-
- int main(void)
- {
- u16 adcx = 0;//用于显示的数据
- float temp;
- delay_init();
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- uart_init(115200); //波特率
- LED_Init();
- LCD_Init();
- Adc_Init();
-
- POINT_COLOR=BLUE;//字体颜色
- LCD_ShowString(20,0,300,24,24,"MODE: ADC-DMA");
- LCD_ShowString(20,24,300,24,24,"ADC_CH0_VAL:");
- LCD_ShowString(20,48,300,24,24,"ADC_CH0_VOL:0.000V");
-
- POINT_COLOR=RED;
- MYDMA_Config(DMA1_Channel1,(u32)&ADC1->DR, 1,1);//配置说明见上
-
- DMA_Cmd(DMA1_Channel1, ENABLE); //开启DMA通道
- while(1)
- {
-
-
-
-
- adcx = MYGet_Adc();//??è?DMAêy?Y
-
- LCD_ShowxNum(164,24,adcx,4,24,0);//直接读取的值
- temp=(float)adcx*(3.3/4096);
- adcx=temp;
- LCD_ShowxNum(164,48,adcx,1,24,0);//转化为电压
- temp-=adcx;
- temp*=1000;
- LCD_ShowxNum(184,48,temp,3,24,0X80);
-
- LED1 = ~LED1;//提示程序正常运行
- delay_ms(250);
-
-
- }
- }
复制代码 dma中断函数输出数组的第二位值,一直是0;
|