STM32之DS1682
生活随笔
收集整理的這篇文章主要介紹了
STM32之DS1682
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/******************************************************************************
* 文 件 名 稱:BspDS1682.c
* 文件功能概述:實現DS1682接口聲明
* 文 件 作 者:xxx
* 版 本:V1.0.0.0
* 修 訂 記 錄:2017-6-30創(chuàng)建
******************************************************************************/
#include "BspDS1682.h"E_I2Cx eDs1682I2c[E_DS1682_Max] = {E_I2C_1};
uint8 u8Ds1682SubAddr[E_DS1682_Max]={0xD6};
/** 用于記錄總上電次數*/
static uint16 stTotalPwrUpCount[E_DS1682_Max] = {0};/** 用于記錄當前總的運行時間,單位是250ms*/
static uint32 stTotalRunTime[E_DS1682_Max] = {0};/** 用于記錄上電時刻的總運行時間*/
static uint32 stCurRunTimeBase[E_DS1682_Max] = {0};
/** 用于記錄本次上電的總運行時間*/
static uint32 stCurRunTime[E_DS1682_Max] = {0};/******************************************************************************** 函 數 名:uint16 DS1682GetPwrUpCount(E_DS1682 eDs1682)* 參 數:無* 返 回:stTotalPwrUpCount :總上電次數* 創(chuàng) 建 人:xxx* 創(chuàng)建時間:2017-6-30* 詳 述:獲取單板的總上電次數,完成初始化之后調用該函數* 修改記錄:2017-6-30創(chuàng)建
*******************************************************************************/
uint16 DS1682GetPwrUpCount(E_DS1682 eDs1682)
{return stTotalPwrUpCount[eDs1682];
}/******************************************************************************** 函 數 名:uint32 DS1682GetAllRunTime(E_DS1682 eDs1682)* 參 數:無* 返 回:stTotalRunTime :總運行時間* 創(chuàng) 建 人:xxx* 創(chuàng)建時間:2017-6-30* 詳 述:獲取單板的總運行時間,完成初始化之后調用該函數,以250ms為單位* 修改記錄:2017-6-30創(chuàng)建
*******************************************************************************/
uint32 DS1682GetAllRunTime(E_DS1682 eDs1682)
{uint8 data[4]={0,0,0,0};uint8 RegAddr = 0; RegAddr = DS1682_REG_TTA_BYTE_0;I2CxReadBytes(eDs1682I2c[eDs1682],u8Ds1682SubAddr[eDs1682],&RegAddr,1,data,4);stTotalRunTime[eDs1682] = ((data[3]<<24)|(data[2]<<16)|(data[1]<<8)|data[0]);return stTotalRunTime[eDs1682];
}/******************************************************************************** 函 數 名:uint32 DS1682GetCurRunTime(E_DS1682 eDs1682)* 參 數:無* 返 回: 0xffffffff :發(fā)生錯誤非0xffffffff :當次上電后的運行時間 * 創(chuàng) 建 人:xxx* 創(chuàng)建時間:2017-6-30* 詳 述:獲取本次上電單板的運行時間,完成初始化之后調用該函數,以250ms為單位* 修改記錄:2017-6-30創(chuàng)建
*******************************************************************************/
uint32 DS1682GetCurRunTime(E_DS1682 eDs1682)
{uint32 value = 0;value = DS1682GetAllRunTime(eDs1682);if(value >= stCurRunTimeBase[eDs1682]){stCurRunTime[eDs1682] = (value - stCurRunTimeBase[eDs1682]);return stCurRunTime[eDs1682]; }return 0xFFFFFFFF;
}/******************************************************************************** 函 數 名:sint8 DS1682Init(E_DS1682 eDs1682)* 參 數:無* 返 回: -1 :發(fā)生錯誤 0 :正常返回* 創(chuàng) 建 人:xxx* 創(chuàng)建時間:2017-6-30* 詳 述:實現DS1682的初始化* 修改記錄:2017-6-30創(chuàng)建
*******************************************************************************/
sint8 DS1682Init(E_DS1682 eDs1682)
{uint8 data[2]={0,0};uint8 RegAddr = 0;if(I2CxInit(eDs1682I2c[eDs1682]) == -1){return -1;}else{}RegAddr = DS1682_REG_ECNT_LOW;I2CxReadBytes(eDs1682I2c[eDs1682],u8Ds1682SubAddr[eDs1682],&RegAddr,1,data,2);stTotalPwrUpCount[eDs1682] = ((data[1]<<8) | data[0]);if(stTotalPwrUpCount[eDs1682] == 0xffff){return -1;}else{}/*獲取此時的運行總時間,作為本次上電的基準時間*/stCurRunTimeBase[eDs1682] = DS1682GetAllRunTime(eDs1682); return 0;
}
?
頭文件
/****************************************************************************** * 文 件 名 稱:BspDS1682.h * 文件功能概述:實現DS1682接驅動口聲明 * 文 件 作 者:xxx * 版 本:V1.0.0.0 * 修 訂 記 錄:2017-6-30創(chuàng)建 ******************************************************************************/#ifndef __BSP_DS1682_H__ #define __BSP_DS1682_H__/*----------------------------------------------** 包含頭文件 **----------------------------------------------*/ #include "..\BspInterface.h" /*----------------------------------------------** 宏定義 **----------------------------------------------*/typedef enum {DS1682_REG_CONFIG = 0x00,DS1682_REG_ATP_BYTE_0,DS1682_REG_ATP_BYTE_1,DS1682_REG_ATP_BYTE_2,DS1682_REG_ATP_BYTE_3,DS1682_REG_TTA_BYTE_0,DS1682_REG_TTA_BYTE_1,DS1682_REG_TTA_BYTE_2,DS1682_REG_TTA_BYTE_3,DS1682_REG_ECNT_LOW,DS1682_REG_ECNT_HIGH,DS1682_REG_MEM_BYTE_1,DS1682_REG_MEM_BYTE_2,DS1682_REG_MEM_BYTE_3,DS1682_REG_MEM_BYTE_4,DS1682_REG_MEM_BYTE_5,DS1682_REG_MEM_BYTE_6,DS1682_REG_MEM_BYTE_7,DS1682_REG_MEM_BYTE_8,DS1682_REG_MEM_BYTE_9,DS1682_REG_MEM_BYTE_10,DS1682_REG_RST = 0X1D,DS1682_REG_WR_DISABLE,DS1682_REG_WR_MEM_DISABLE, }eDS1682_REG;/*----------------------------------------------** 常量定義 **----------------------------------------------*//*----------------------------------------------** 外部變量說明 **----------------------------------------------*//*----------------------------------------------** 全局變量 **----------------------------------------------*//*----------------------------------------------** 模塊級變量 **----------------------------------------------*/ typedef enum {E_DS1682_1=0x00,E_DS1682_Max,E_DS1682_Invalid }E_DS1682; /*----------------------------------------------** 外部函數原型說明 **----------------------------------------------*//*----------------------------------------------** 內部函數原型說明 **----------------------------------------------*/ sint8 DS1682Init(E_DS1682 eDs1682);uint32 DS1682GetAllRunTime(E_DS1682 eDs1682);uint32 DS1682GetCurRunTime(E_DS1682 eDs1682);uint16 DS1682GetPwrUpCount(E_DS1682 eDs1682);#endif總結
以上是生活随笔為你收集整理的STM32之DS1682的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 视频号主页,实现一键添加个人微信功能,留
- 下一篇: 智慧养老解决方案是未来带领老人走向健康的