首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

stm32f4中通过dma采集adc(2)

stm32f4中通过dma采集adc(2)

  • <pre code_snippet_id="610744" snippet_file_name="blog_20150303_2_6443924"
    class="cpp" name="code">/*********************************************************************
  • *                         电源模块驱动层文件
  • *                       (c)copyright 2015,jdh
  • *                         All Right Reserved
  • *新建日期:2014/10/20 by jdh
  • *修改日期:2015/1/27 by jdh
  • **********************************************************************/

  • /*********************************************************************
  • *                           头文件
  • **********************************************************************/

  • #include "drv_power.h"

  • /*********************************************************************
  • *                           静态变量
  • **********************************************************************/

  • /*********************************************************************
  • *                           adc转换结果存放地址
  • **********************************************************************/

  • #define LEN_ADC_BUF         10
  • static __IO uint16_t ADC_Converted_Value[LEN_ADC_BUF] = {0};   

  • /*********************************************************************
  • *                           静态函数
  • **********************************************************************/

  • /*********************************************************************
  • *                           初始io
  • **********************************************************************/

  • static
    void init_io(void);  

  • /*********************************************************************
  • *                           初始ADC
  • **********************************************************************/

  • static
    void init_adc(void);  

  • /*********************************************************************
  • *                           函数
  • **********************************************************************/

  • /*********************************************************************
  • *                           初始化电源模块
  • **********************************************************************/

  • void drv_power_init(void)  
  • {  
  •     //初始化io
  •     init_io();  
  •     //初始化adc
  •     init_adc();  
  • }  

  • /*********************************************************************
  • *                           电源控制
  • *参数:state:1开机,0:关机
  • **********************************************************************/

  • void drv_power_set(uint8_t state)  
  • {  
  •     if (state)  
  •     {  
  •         GPIO_SetBits(GPIOI, GPIO_Pin_7);   
  •     }  
  •     else
  •     {  
  •         GPIO_ResetBits(GPIOI, GPIO_Pin_7);   
  •     }  
  • }  

  • /*********************************************************************
  • *                           电池adc检测使能
  • *参数:state:允许检测,0:不允许检测
  • **********************************************************************/

  • void drv_power_adc_set(uint8_t state)  
  • {  
  •     if (state)  
  •     {  
  •         GPIO_ResetBits(GPIOF, GPIO_Pin_2);        
  •     }  
  •     else
  •     {  
  •         GPIO_SetBits(GPIOF, GPIO_Pin_2);  
  •     }  
  • }  

  • /*********************************************************************
  • *                           得到电池电压
  • *返回:电池电压,单位mv
  • **********************************************************************/

  • uint16_t drv_power_get_voltage(void)  
  • {   
  •     uint8_t i = 0;   
  •     uint32_t sum = 0;   
  •     uint16_t voltage = 0;  

  •     for (i = 0;i < LEN_ADC_BUF;i++)   
  •     {   
  •         sum += ADC_Converted_Value;      
  •     }   

  •     sum /= LEN_ADC_BUF;  
  •     voltage = sum * REF_AD * RATE_AD / 4096;  

  •     return voltage;   
  • }   

  • /*********************************************************************
  • *                           初始io
  • **********************************************************************/

  • static
    void init_io(void)  
  • {  
  •     //定义IO初始化结构体
  •     GPIO_InitTypeDef GPIO_InitStructure;  

  •     //初始化时钟
  •     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOI, ENABLE);  
  •     //管脚模式:输出口
  •     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;     
  •     //类型:推挽模式
  •     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;   
  •     //上拉下拉设置
  •     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      
  •     //IO口速度
  •     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;  
  •     //管脚指定
  •     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;  
  •     //初始化
  •     GPIO_Init(GPIOI, &GPIO_InitStructure);  

  •     //初始化时钟
  •     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);  
  •     //管脚模式:输出口
  •     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;     
  •     //类型:推挽模式
  •     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;   
  •     //上拉下拉设置
  •     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      
  •     //IO口速度
  •     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;  
  •     //管脚指定
  •     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;  
  •     //初始化
  •     GPIO_Init(GPIOF, &GPIO_InitStructure);  
  •     //打开adc检测
  •     drv_power_adc_set(1);  
  • }  

  • /*********************************************************************
  • *                           初始ADC
  • **********************************************************************/

  • static
    void init_adc(void)  
  • {  
  •     GPIO_InitTypeDef GPIO_InitStructure;  
  •     DMA_InitTypeDef DMA_InitStructure;   
  •     ADC_InitTypeDef ADC_InitStructure;   
  •     ADC_CommonInitTypeDef ADC_CommonInitStructure;  

  •     //采样脚IO口设置   
  •     //初始化时钟
  •     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);  
  •     //管脚模式:输入口
  •     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;      
  •     //上拉下拉设置
  •     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;      
  •     //管脚指定
  •     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;  
  •     //初始化
  •     GPIO_Init(GPIOF, &GPIO_InitStructure);  
继承事业,薪火相传
返回列表