【STM8S】STM8S之电量采集

原创 2016年08月30日 11:40:11

本篇博文最后修改时间:2016年08月30日,11:41。


一、简介

本文介绍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文件夹中)

//******************************************************************************        
//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文件夹中)

//******************************************************************************        
//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)添加驱动的路径

$PROJ_DIR$\..\USER  
注意USER文件夹是与“Project”、“FWlib”文件夹同级的自定义文件,用于存放香瓜写的代码。

2、应用层中调用

1)添加头文件(main.c中)

#include "Battery_Check.h"

2)初始化(main.c的main函数中)

  //电源电量采集
  Battery_Check_Init();

3)采集电量(main.c的main函数中)

  U16 nBattery_Check_Value = 0;

  //读取电量
  nBattery_Check_Value = Battery_Check_Read();   



版权声明:喝水不忘挖井人,转载请注明出处,897503845@qq.com。

相关文章推荐

STM8S_005_ADC采集单通道电压

Ⅰ、写在前面和前面51系列的芯片相比,STM8S芯片的优势之一在于外设资源要丰富且功能要强大的多。因此,本文讲述STM8S的一项比较实用的功能:ADC采集电压。 在物联网的产品中,大多数传感器都使用了...

STM8S_005_ADC采集单通道电压

Ⅰ、写在前面和前面51系列的芯片相比,STM8S芯片的优势之一在于外设资源要丰富且功能要强大的多。因此,本文讲述STM8S的一项比较实用的功能:ADC采集电压。 在物联网的产品中,大多数传感器都使用了...

uCOS-II任务之延时函数

uCOS-II任务延时函数 编写过单片机程序的都知道,延时函数是经常被用到的。 在uCOS-II里,系统也提供了这样的延时函数。一个是大众版的OSTimeDly(),一个是精致版的OSTimeDl...

关于STM8S使用硬件SPI收发问题

在调试STM8S的SPI时候,由于在学习板上

stm8s开发(九) EEPROM的使用:使用EEPROM存储数据!

EEPROM是单片机应用系统中经常会用到的存储器,它主要用来保存一些掉电后需要保持不变的数据。在以前的单片机系统中,通常都是在单片机外面再扩充一个EEPROM芯片,这种方法除了增加成本外,也降低了可靠...
  • DevinTT
  • DevinTT
  • 2017年07月12日 23:53
  • 433

STM8S003F使用IO口模拟串口(三)使用中断方式发送和接收数据

在前两篇文章中我们介绍了IO口模拟串口发送数据和接收数据,前两种方法都是使用定时器来进行发送和接收,没有用到中断,优点是逻辑简单,但是缺点很明显,只能进行单个字节的发送和接收,而且不能同时工作。因此在...

stm8s开发(一) 使用IAR新建工程

附上stm8s在IAR环境下的项目工程,包括了SPI、IIC、PWM、AWU、USART、EEPROM等片上硬件的初始化代码。 http://download.csdn.net/detail/devi...
  • DevinTT
  • DevinTT
  • 2016年03月07日 00:37
  • 2595

stm8s103f3p6的延时函数

使用stm8s时本来期望能够产生1us精度的脉冲,但是调来调去也没能实现。目前的情况是使用内部16MHz的RC时钟源,然后给到timer4,再经 8分频产生一个25us的中断,我能搞出来的最小中断周期...
  • k7arm
  • k7arm
  • 2017年06月25日 18:19
  • 765

STM8S---电源功耗管理之停机模式(halt)实现

官方资料  可以去网络搜索中文版,或者到官方网站上去下载英文版。   英文:  译文:主要内容简介 影响功耗的主要因素 电源系统 时钟管理 运行模式和低功耗模式 运行模式 等待模式 活跃停机模式 ...
  • FreeApe
  • FreeApe
  • 2015年07月22日 20:11
  • 5665

STM8S 中断唤醒,定时唤醒,窗口看门狗

原文:http://blog.csdn.net/liuyu60305002/article/details/7056525 一、 STM8S 外部中断进行唤醒 先了解一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【STM8S】STM8S之电量采集
举报原因:
原因补充:

(最多只允许输入30个字)