- <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);
|