一、简介
本文介绍STM8S系列如何使用ADC的一个通道,对电量进行采集。
二、实验平台
编译软件:IAR for STM8 1.42.2
硬件平台:stm8s003f3p6开发板
仿真器:ST-LINK
库函数版本:STM8Sx_AN3298_FW_V4.0.0
三、版权声明
博主:甜甜的大香瓜
声明:喝水不忘挖井人,转载请注明出处。
原文地址:http://blog.csdn.NET/feilusia
联系方式:897503845@qq.com
香瓜BLE之CC2541群:127442605
香瓜BLE之CC2640群:557278427
香瓜BLE之Android群:541462902
香瓜单片机之STM8/STM32群:164311667
甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i
四、实验前提
1、在进行本文步骤前,请先阅读以下博文:
暂无
2、在进行本文步骤前,请先实现以下博文:
暂无
五、硬件原理图
由上图可知通过PB3口采集电压,其中采集的电压为锂电池经过分压后的电压。
锂电池电压范围为3V~4.2V。
六、实验步骤
1、工程中添加自己写的电量采集驱动
1)写一个电量采集驱动Battery_Check.c (存放在工程的USER文件夹中)
[cpp] view plain copy
- //******************************************************************************
- //name: Battery_Check.c
- //introduce: 电量检测驱动
- //author: 甜甜的大香瓜
- //changetime: 2016.07.25
- //email: 897503845@qq.com
- //******************************************************************************
- #include "stm8s.h"
- #include "Battery_Check.h"
-
- /*********************宏定义************************/
- #define BATTERY_CHECK_COUNT_PER_COLLECT 5 //每次采集的次数
-
- //******************************************************************************
- //name: Battery_Check_Read
- //introduce: 读电量
- //parameter: none
- //return: 返回16bit的电量,右对齐
- //author: 甜甜的大香瓜
- //email: 897503845@qq.com
- //changetime: 2016.07.25
- //******************************************************************************
- u16 Battery_Check_Read(void)
- {
- u16 nBattery_Check_Value = 0;
- u16 nNum = 0;
-
- //采集BATTERY_CHECK_COUNT_PER_COLLECT次,累加采集的电量值
- for(nNum = 0; nNum < BATTERY_CHECK_COUNT_PER_COLLECT; nNum++)
- {
- //开始转换
- ADC1_StartConversion();
-
- //累加读取adc的转换值
- nBattery_Check_Value += ADC1_GetConversionValue();
- }
-
- //求出电量平均值
- nBattery_Check_Value /= BATTERY_CHECK_COUNT_PER_COLLECT;
-
- //返回
- return nBattery_Check_Value;
- }
-
- //******************************************************************************
- //name: Battery_Check_Init
- //introduce: 电量检测初始化
- //parameter: none
- //return: none
- //author: 甜甜的大香瓜
- //email: 897503845@qq.com
- //changetime: 2016.07.25
- //******************************************************************************
- void Battery_Check_Init(void)
- {
- //寄存器复位默认值
- ADC1_DeInit();
-
- //单次转换、通道3、时钟分频器fmaster/2、关闭外部触发转换事件、右对齐数据、关闭指定通道的施密特触发
- ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_3, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL0, DISABLE);
-
- //使能
- ADC1_Cmd(ENABLE);
- }
2)写一个电量采集驱动头文件Battery_Check.h(存放在工程的USER文件夹中)
[cpp] view plain copy
- //******************************************************************************
- //name: Battery_Check.h
- //introduce: 电量检测的头文件
- //author: 甜甜的大香瓜
- //changetime: 2016.07.25
- //email: 897503845@qq.com
- //******************************************************************************
- #ifndef _BATTERY_CHECK_H_
- #define _BATTERY_CHECK_H_
-
- /*********************头文件************************/
- #include "stm8s.h"
-
- /*********************宏定义************************/
-
-
- /*********************外部函数声明************************/
- u16 Battery_Check_Read(void);
- void Battery_Check_Init(void);
-
- #endif
3)工程中添加Battery_Check.c
4)添加驱动的路径
[cpp] view plain copy
注意USER文件夹是与“Project”、“FWlib”文件夹同级的自定义文件,用于存放香瓜写的代码。
2、应用层中调用
1)添加头文件(main.c中)
[cpp] view plain copy
- #include "Battery_Check.h"
2)初始化(main.c的main函数中)
[cpp] view plain copy
- //电源电量采集
- Battery_Check_Init();
3)采集电量(main.c的main函数中)
[cpp] view plain copy
- U16 nBattery_Check_Value = 0;
-
- //读取电量
- nBattery_Check_Value = Battery_Check_Read();
|