STM32之ADM706驱动

ADM706是一款硬件看门狗,驱动如下:

/******************************************************************************
* 文 件  名 称:BspADM706.c
* 文件功能概述:实现ADM706接口声明
* 文 件  作 者:
* 版        本:V1.0.0.0
* 修 订  记 录:2017-6-30创建
******************************************************************************/
#include "..\inc\BspADM706.h"

/*
 * 用于记录ADM706的端口信息
 */
static S_GpioCtrl stADM706Ctrl[E_ADM706_Max] = 
{
  { RCC_AHB1Periph_GPIOC, GPIOC, GPIO_Pin_13 }
};

/*
 * 用于记录喂狗模式:中断喂狗或应用喂狗
 */
static E_FEED_DOG_MODE stFeedDogMode[E_ADM706_Max] =
{ E_FEED_DOG_Invalid };
/*******************************************************************************
 * 函 数 名:void WatchDogInit(E_ADM706 eADM706)
 * 参    数:E_ADM706 eADM706:详见E_ADM706
 * 返    回:无
 * 创 建 人:
 * 创建时间:2017-6-30
 * 详    述:看门狗初始化
 * 修改记录:2017-6-30创建
*******************************************************************************/
void WatchDogInit(E_ADM706 eADM706)
{
  if(eADM706 < E_ADM706_Max)
  {
    GPIO_InitTypeDef GPIO_InitStructure;
	  RCC_AHB1PeriphClockCmd(stADM706Ctrl[eADM706].GPIOxSource, ENABLE);
     
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    
    GPIO_InitStructure.GPIO_Pin = stADM706Ctrl[eADM706].GPIOxPinx;
    GPIO_Init(stADM706Ctrl[eADM706].GPIOx, &GPIO_InitStructure);
	  
    stFeedDogMode[eADM706] = E_FEED_DOG_IN_APP;
    
	  WatchDogFeed(eADM706);
    WatchDogFeed(eADM706);
   }
   else
   {
     /* do nothing */
   }

}

/*******************************************************************************
 * 函 数 名:void WatchDogFeed(E_ADM706 eADM706)
 * 参    数:E_ADM706 eADM706:详见E_ADM706
 * 返    回:无
 * 创 建 人:
 * 创建时间:2017-6-30
 * 详    述:喂狗操作
 * 修改记录:2017-6-30创建
*******************************************************************************/
void WatchDogFeed(E_ADM706 eADM706)
{
  if(eADM706 < E_ADM706_Max)
  {
    GPIOxToggleBit(stADM706Ctrl[eADM706].GPIOx, stADM706Ctrl[eADM706].GPIOxPinx);
  }
  else
  {
    /* do nothing */
  }
}

/*******************************************************************************
 * 函 数 名:void WatchDogFeed(void)
 * 参    数:无
 * 返    回:无
 * 创 建 人:
 * 创建时间:2017-6-30
 * 详    述:喂狗操作(所有的硬件看门狗)
 * 修改记录:2017-6-30创建
*******************************************************************************/
void WatchDogFeedAll(void)
{
  E_ADM706 eADM706 = E_ADM706_Invalid;
  
  for(eADM706=E_ADM706_1; eADM706<E_ADM706_Max; eADM706++)
  {
    WatchDogFeed(eADM706);
  }
}

/*******************************************************************************
 * 函 数 名:void WatchDogSetMode(E_ADM706 eADM706,E_FEED_DOG_MODE FeedDogMode)
 * 参    数:E_ADM706 eADM706:详见E_ADM706
             E_FEED_DOG_MODE FeedDogMode : 
                               E_FEED_DOG_IN_INT:在中断中喂狗
                               E_FEED_DOG_IN_APP:在应用程序中喂狗
 * 返    回:无
 * 创 建 人:
 * 创建时间:2017-6-30
 * 详    述:设置喂狗的方式,可以选择在中断中喂狗或者在应用程序中喂狗
 * 修改记录:2017-6-30创建
*******************************************************************************/
void WatchDogSetMode(E_ADM706 eADM706,E_FEED_DOG_MODE FeedDogMode)
{
  if(eADM706 < E_ADM706_Max)
  {
    stFeedDogMode[eADM706] = FeedDogMode;
  }
  else
  {
    /* do nothing */
  }
}

/*******************************************************************************
 * 函 数 名:E_FEED_DOG_MODE WatchDogGetMode(E_ADM706 eADM706)
 * 参    数:E_ADM706 eADM706:详见E_ADM706
 * 返    回:当前的喂狗方式:E_FEED_DOG_IN_INT 或 E_FEED_DOG_IN_APP
 * 创 建 人:
 * 创建时间:2017-6-30
 * 详    述:获取当前的喂狗方式
 * 修改记录:2017-6-30创建
*******************************************************************************/
E_FEED_DOG_MODE WatchDogGetMode(E_ADM706 eADM706)
{
  if(eADM706 < E_ADM706_Max)
  {
    return stFeedDogMode[eADM706];
  }
  else
  {
    return E_FEED_DOG_Invalid;
  }
}

头文件如下:

/******************************************************************************
* 文 件  名 称:BspADM706.h
* 文件功能概述:实现ADM706驱动接口声明
* 文 件  作 者:
* 版        本:V1.0.0.0
* 修 订  记 录:2017-6-30创建
******************************************************************************/

#ifndef __BSP_ADM706_H__
#define __BSP_ADM706_H__


/*----------------------------------------------*
 * 包含头文件                                   *
 *----------------------------------------------*/
#include "..\BspInterface.h"
/*----------------------------------------------*
 * 宏定义                                       *
 *----------------------------------------------*/

/*----------------------------------------------*
 * 常量定义                                     *
 *----------------------------------------------*/
 typedef enum
{
  E_ADM706_1=0x00,
  
  E_ADM706_Max,
  
  E_ADM706_Invalid
}E_ADM706;

typedef enum
{
  E_FEED_DOG_IN_INT,
  E_FEED_DOG_IN_APP,
  
  E_FEED_DOG_Invalid
}E_FEED_DOG_MODE;
/*----------------------------------------------*
 * 外部变量说明                                 *
 *----------------------------------------------*/

/*----------------------------------------------*
 * 全局变量                                     *
 *----------------------------------------------*/

/*----------------------------------------------*
 * 模块级变量                                   *
 *----------------------------------------------*/

/*----------------------------------------------*
 * 外部函数原型说明                             *
 *----------------------------------------------*/

/*----------------------------------------------*
 * 内部函数原型说明                             *
 *----------------------------------------------*/
void WatchDogInit(E_ADM706 eADM706);

void WatchDogFeed(E_ADM706 eADM706);

void WatchDogFeedAll(void);

void WatchDogSetMode(E_ADM706 eADM706, E_FEED_DOG_MODE FeedDogMode);

E_FEED_DOG_MODE WatchDogGetMode(E_ADM706 eADM706);

#endif

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值