ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

DMA与ADC的配置

2021-12-21 19:31:23  阅读:131  来源: 互联网

标签:DMA --- 存储器 SUM 配置 ---- ADC


(一)STM32中的搬运工-----DMA
    特点:不需要CPU的干预
    作用:实现存储器和外设之间或者存储器和存储器之间的高速数据传输
    
   1》DMA搬运数据的宽度   字节——8bit   半字——16bit  全字——32bit
   
   2》利用DMA实现存储器到存储器的数据传输
    1,打开时钟----DMA1
    2,初始化DMA
        ----外设基地址
        ----存储器基地址
        ----传输方向
        ----传输数目
        ----外设地址是否递增
        ----存储器地址是否递增
        ----外设传输的数据宽度
        ----存储器传输的数据宽度
        ----模式---正常或循环
        ----优先等级
        ----存储器到存储器是否使能
    3,使能DMA
    4,判断是否传输完成
    5,清除标志位,检验是否传输成功
    
-----------------------------------------------
(二)模拟数字转换器-----ADC

    1>模拟量是随着时间的变化,电压值是连续变化的,数字量是离散的。
    2>ADC就是用来读电压值
    3>规则转换:ADC按照事先设定好的依次进行转换
      注入转换:类似于中断,当注入转换发起时,先进行注入转换,注入转换完成后在进行规则转换
      
    4>参考STM3210x中文参考手册
    
    1>检测AD按键的键值和光敏电阻,编程步骤:
        1,打开时钟----ADC1,DMA1,GPIOC,AFIO
        2,ADC预分频器---6分频
        3,初始化GPIOC
            ----GPIO_Pin_0|GPIO_Pin_1
            ----模拟输入
        4,初始化ADC1
            ----ADC独立模式
            ----连续转换
            ----使用扫描模式
            ----不使用外部触发
            ----右对齐方式
            ----2个通道
        5,初始化DMA1
            ----外设基地址------&ADC1->DR
            ----存储器基地址----ADC_DATA[][]---数组
            ----传输方向--------外设作为数据来源
            ----传输数目--------100
            ----外设地址是否递增--否
            ----存储器地址是否递增--是
            ----外设传输的数据宽度--半字——16bit
            ----存储器传输的数据宽度-半字——16bit
            ----模式---正常或循环---循环
            ----优先等级---高级
            ----存储器到存储器是否使能---否
        6,使能ADC的DMA
        7,使能DMA1的通道1-----通过DMA的通道一览表去查看
        8,配置通道10和通道11的转换顺序和采样时间
        9,使能ADC1
        10,重置校准寄存器
        11,等待重置校准寄存器成功-----reset 代表成功
        12,开始校准
        13,等待校准成功-----reset 代表成功
        14,启动---软件触发ADC1
        
        
        uint16_t ADC_RG_VALUE(void)
        {
            uint32_t SUM=0;
            uint8_t i;
            for(i=0;i<DATA_size;i++){
                SUM=SUM+ADC_DATA[i][0];
            }
            return (uint16_t)(SUM/DATA_size);
        }


        uint16_t ADC_KEY_VALUE(void)
        {
            uint32_t SUM=0;
            uint8_t i;
            for(i=0;i<DATA_size;i++){
                SUM=SUM+ADC_DATA[i][1];
            }
            return (uint16_t)(SUM/DATA_size);
        }

标签:DMA,---,存储器,SUM,配置,----,ADC
来源: https://blog.csdn.net/LIYOU0Z0/article/details/122071497

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有