初级会员

- 积分
- 101
- 金钱
- 101
- 注册时间
- 2011-4-20
- 在线时间
- 0 小时
|
做了ADC和DMA的实验后,我想做一个两者结合的。就是使用ADC1的通道123测量三个不同的电压值,通过DMA传输显示在LCD上。
思路如下:ADC主要配置 ADC1->CR1|=0<<16; //独立工作模式
ADC1->CR1|=1<<8; //扫描模式
ADC1->CR2|=1<<1; //连续转换模式
A DC1->CR2|=1<<8; //使用DMA模式
ADC1->SQR1&=2<<20; //3个转换在规则序列中
ADC1->SQR3|=1<<0; //通道channel作为规则序列1
ADC1->SQR3|=1<<5; //通道channe2作为规则序列2
ADC1->SQR3|=1<<10; //通道channe3作为规则序列3
ADC1->CR2|=1<<22; //软件启动规则转换通道
while(!(ADC1->SR&1<<1));//等待转换结束DMA主要配置:
DMA_CHx->CCR|=~(1<<4); //从外设读
DMA_CHx->CCR&=1<<5; //循环模式
DMA_CHx->CCR&=~(1<<6); //外设地址非增量模式
DMA_CHx->CCR|=1<<7; //存储器增量模式
DMA_CHx->CCR&=1<<8; //外设数据宽度为16位
DMA_CHx->CCR&=1<<10; //存储器数据宽度16位
设置了一个存储数组: uint16_t ad_value[3];
主函数中: DMA_Loop_Config(DMA1_Channel1,(uint32_t)&ADC1->DR,(uint32_t)ad_value,3);//DMA通道1循环传输设置
DMA_CHx->CCR|=1<<0; //开启DMA传输
等待channel转换完成,EOC置一,产生DMA请求,把channel采样值传给ad_value[0]
接着把channe2采样值传给ad_value[1]
把channe3采样值传给ad_value[3]
这样一直循环采样传输下去
在while(1)里进行显示。。。这个思路结束。。好晕啊。。行不行的啊?
|
|