找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2933|回复: 0
收起左侧

Stm32 DMA-ADC实现源码与说明

[复制链接]
ID:332057 发表于 2018-5-17 13:23 | 显示全部楼层 |阅读模式
方法:    打开超级终端,配置超级终端为 115200 8-N-1,将编译好的程序下载到板子,即可看到超级终端打印出如下信息:当调节的滑动变阻器时,ADC1 转换的电压值则会改变。
              板载的是 20K 的精密电阻,旋转的圈数要多点才能看到 ADC 值的明显变化。(如下)

com.PNG

单片机源程序如下:
  1. /*******************************************************************************
  2. --------------------------------------------------------------------------------
  3. * 实 验 名                 : LCD-ADC-DMA实验
  4. * 实验说明       : 通过将程序下载进去后点击复位,配置端口PA1内的ADC,将电位器变化值转换为
  5.                                         电压值,通过配置DMA,将ADC和DMA连在一起,使其自动进行转换搬运。主函数
  6.                                         直接调用即可。LED指示灯闪烁效果,
  7.                                         按下复位开关重新运行,其他子函数注释
  8.                                         可以参考之前的函数注释
  9. * 连接方式       :         
  10. * 注    意                 :         所用函数在头文件.c文件内
  11. *******************************************************************************/

  12. #include "public.h"
  13. #include "dma.h"
  14. #include "systick.h"
  15. #include "gui.h"
  16. #include "led.h"
  17. #include "printf.h"


  18. /****************************************************************************
  19. * Function Name  : main
  20. * Description    : Main program.
  21. * Input          : None
  22. * Output         : None
  23. * Return         : None
  24. ****************************************************************************/
  25. int main()                          
  26. {        
  27.         u16 value;
  28.         u8 i,j,dat[6];
  29.         float ad;
  30.         dma_init();          //DMA初始化
  31.         TFT_Init();         //TFT彩屏初始化
  32.         LED_Init();          //端口初始化
  33.         printf_init();        //printf初始化
  34.         TFT_ClearScreen(BLACK);           //清屏
  35.         GUI_Show12ASCII(10,10,"This is a ADC1-DMA1 Check!",YELLOW,BLACK);
  36.         GUI_Show12ASCII(10,27,"PA1 is AD Input!",YELLOW,BLACK);
  37.         GUI_Show12ASCII(10,100,"The AD Volage is:",YELLOW,BLACK);
  38.         while(1)
  39.         {
  40.                 value=0;
  41.                 for(i=0;i<10;i++)//读取10次的AD数值取其平均数较为准确        
  42.                 {
  43.                         value=value+adc_data[0];               
  44.                 }
  45.                 delay_ms(500);
  46.                 value=value/10;
  47.                 ad=value*3.3/4095;
  48.                 value=(u16)(ad*100);
  49.                 dat[0]=value/100+0x30;
  50.                 dat[1]='.';
  51.                 dat[2]=value%100/10+0x30;
  52.                 dat[3]=value%100%10+0x30;
  53.                 dat[4]='V';
  54.                 dat[5]='\0';
  55.                 GUI_Show12ASCII(160,100,dat,YELLOW,BLACK);
  56.                 if(j>1)
  57.                 {
  58.                         j=0;
  59.                         GPIO_SetBits(GPIOC,GPIO_Pin_0);
  60.                 }
  61.                 else
  62.                 {
  63.                         j++;
  64.                         GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  65.                 }
  66.                                                                
  67.         }                        
  68. }

复制代码

所有资料51hei提供下载:
LCD-ADC-DMA.7z (746.83 KB, 下载次数: 37)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表