标题: STM32双通道ADC采集DMA转换源程序 [打印本页]

作者: fengguang87    时间: 2016-6-20 10:54
标题: STM32双通道ADC采集DMA转换源程序
本程序用的是STM32F103RC芯片,ADC用DMA方式获取ADC数据。

本实验将实现如下功能:利用STM32的ADC1通道0来采样外部电压值,并在TFTLCD模块上显示出来。实现一个简单的电压表的功能。

本实验可以SWD下载仿真.


  1. //////////////////////////////////////////////////////////////////////////////////
  2. #include "dma.h"         
  3. u16 DMA1_MEM_LEN;//保存DMA每次数据传送的长度                     
  4. //DMA1的各通道配置
  5. //这里的传输形式是固定的,这点要根据不同的情况来修改
  6. //从存储器->外设模式/8位数据宽度/存储器增量模式
  7. //DMA_CHx:DMA通道CHx
  8. //cpar:外设地址
  9. //cmar:存储器地址
  10. //cndtr:数据传输量  
  11. void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
  12. {
  13.         u32 DR_Base;  //做缓冲用,不知道为什么.非要不可
  14.         RCC->AHBENR|=1<<0;//开启DMA1时钟
  15.         __nop();                    //等待 DMA1 时钟稳定
  16.     __nop();                    //经测试最少 2 个 nop
  17.     __nop();
  18.         DR_Base=cpar;
  19.         DMA_CHx->CPAR=DR_Base;          //DMA1 外设地址
  20.         DMA_CHx->CMAR=(u32)cmar; //DMA1,存储器地址
  21.         DMA1_MEM_LEN=cndtr;      //保存DMA传输数据量
  22.         DMA_CHx->CNDTR=cndtr;    //DMA1,传输数据量
  23.         DMA_CHx->CCR=0X00000000;//复位
  24.         DMA_CHx->CCR|=0<<4;       //从外设读
  25.         DMA_CHx->CCR|=1<<5;       //循环模式
  26.         DMA_CHx->CCR|=0<<6;  //外设地址非增量模式
  27.         DMA_CHx->CCR|=1<<7;  //存储器增量模式
  28.         DMA_CHx->CCR|=1<<8;  //外设数据宽度为16位
  29.         DMA_CHx->CCR|=1<<10; //存储器数据宽度16位
  30.         DMA_CHx->CCR|=2<<12; //中等优先级  //最高优先级
  31.         DMA_CHx->CCR|0<<14; //非存储器到存储器模式                          
  32. }
  33. //开启一次DMA传输
  34. void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx)
  35. {
  36.         DMA_CHx->CCR&=~(1<<0);       //关闭DMA传输
  37.         DMA_CHx->CNDTR=DMA1_MEM_LEN; //DMA1,传输数据量
  38.         DMA_CHx->CCR|=1<<0;          //开启DMA传输
  39. }         

复制代码



双通道ADC采集DMA转换.rar

1.19 MB, 下载次数: 30, 下载积分: 黑币 -5

代码






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1