STM32
直播中

jackhui

11年用户 1047经验值
私信 关注
[问答]

如何去编写IWDG独立看门狗的函数体

IWDG独立看门狗的初始化流程是怎样的?
如何去编写IWDG独立看门狗的函数体?


回帖(1)

潘斯凯

2021-9-26 10:56:38
  //内部时钟源128Khz,硬件2分频=64khz
  这里写代码片
  IWDG_Initializes(); //初始化
  IWDG_ReloadCounter(); //喂狗(重载计数值)
  初始化流程:
  void IWDG_Initializes(void)
  {
  IWDG_Enable(); //使能看门狗
  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //允许写分频值和重载值
  IWDG_SetPrescaler(IWDG_Prescaler_256); //分频值
  IWDG_SetReload(250); //重载值(8位寄存器 最大255)
  IWDG_ReloadCounter(); //重载计数值
  }
  这里写代码片
  函数体:
  void IWDG_Enable(void)
  {
  IWDG-》KR = IWDG_KEY_ENABLE;//0xCC
  }
  void IWDG_WriteAccessCmd(IWDG_WriteAccess_TypeDef IWDG_WriteAccess)
  {
  /* Check the parameters */
  assert_param(IS_IWDG_WRITEACCESS_MODE_OK(IWDG_WriteAccess));
  IWDG-》KR = (uint8_t)IWDG_WriteAccess; /* Write Access 0x55 */
  }
  void IWDG_SetPrescaler(IWDG_Prescaler_TypeDef IWDG_Prescaler)
  {
  /* Check the parameters */
  assert_param(IS_IWDG_PRESCALER_OK(IWDG_Prescaler));
  IWDG-》PR = (uint8_t)IWDG_Prescaler;
  }
  void IWDG_SetReload(uint8_t IWDG_Reload)
  {
  IWDG-》RLR = IWDG_Reload;
  }
  void IWDG_ReloadCounter(void)
  {
  IWDG-》KR = IWDG_KEY_REFRESH;//0xAA
  }
  /** IWDG prescaler enumaration */
  typedef enum
  {
  IWDG_Prescaler_4 = (uint8_t)0x00, /*!《 Used to set prescaler register to 4 */
  IWDG_Prescaler_8 = (uint8_t)0x01, /*!《 Used to set prescaler register to 8 */
  IWDG_Prescaler_16 = (uint8_t)0x02, /*!《 Used to set prescaler register to 16 */
  IWDG_Prescaler_32 = (uint8_t)0x03, /*!《 Used to set prescaler register to 32 */
  IWDG_Prescaler_64 = (uint8_t)0x04, /*!《 Used to set prescaler register to 64 */
  IWDG_Prescaler_128 = (uint8_t)0x05, /*!《 Used to set prescaler register to 128 */
  IWDG_Prescaler_256 = (uint8_t)0x06 /*!《 Used to set prescaler register to 256 */
  } IWDG_Prescaler_TypeDef;
举报

更多回帖

发帖
×
20
完善资料,
赚取积分