ciu32f003_std_iwdg(2).h 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. /************************************************************************************************/
  2. /**
  3. * @file ciu32f003_std_iwdg.h
  4. * @author MCU Ecosystem Development Team
  5. * @brief IWDG STD库驱动头文件。
  6. * 提供IWDG相关的STD库操作函数声明、数据类型以及常量的定义。
  7. *
  8. *
  9. **************************************************************************************************
  10. * @attention
  11. * Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
  12. *
  13. **************************************************************************************************
  14. */
  15. /* 避免头文件重复引用 */
  16. #ifndef CIU32F003_STD_IWDG_H
  17. #define CIU32F003_STD_IWDG_H
  18. /************************************************************************************************/
  19. /**
  20. * @addtogroup CIU32F003_STD_Driver
  21. * @{
  22. */
  23. /**
  24. * @defgroup IWDG IWDG
  25. * @brief 独立看门狗的STD库驱动
  26. * @{
  27. *
  28. */
  29. /************************************************************************************************/
  30. #ifdef __cplusplus
  31. extern "C" {
  32. #endif
  33. /*------------------------------------------includes--------------------------------------------*/
  34. #include "ciu32f003_std_common.h"
  35. /*--------------------------------------------define--------------------------------------------*/
  36. /************************************************************************************************/
  37. /**
  38. * @defgroup IWDG_Constants IWDG Constants
  39. * @brief IWDG常量定义及宏定义
  40. * @{
  41. *
  42. */
  43. /************************************************************************************************/
  44. /* IWDG控制值定义 */
  45. #define IWDG_RELOAD (0x0000AAAAUL) /**< IWDG 喂狗 */
  46. #define IWDG_ENABLE (0x0000CCCCUL) /**< IWDG 使能 */
  47. #define IWDG_WRITE_ACCESS_ENABLE (0x00005555UL) /**< IWDG 写权限使能 */
  48. #define IWDG_WRITE_ACCESS_DISABLE (0x00000000UL) /**< IWDG 写权限关闭 */
  49. /* IWDG计数溢出时间定义 */
  50. #define IWDG_OVERFLOW_PERIOD_128 IWDG_CFG_OVP_128 /**< IWDG溢出时间为128ms */
  51. #define IWDG_OVERFLOW_PERIOD_256 IWDG_CFG_OVP_256 /**< IWDG溢出时间为256ms */
  52. #define IWDG_OVERFLOW_PERIOD_512 IWDG_CFG_OVP_512 /**< IWDG溢出时间为512ms */
  53. #define IWDG_OVERFLOW_PERIOD_1024 IWDG_CFG_OVP_1024 /**< IWDG溢出时间为1.024s */
  54. #define IWDG_OVERFLOW_PERIOD_2048 IWDG_CFG_OVP_2048 /**< IWDG溢出时间为2.048s */
  55. #define IWDG_OVERFLOW_PERIOD_4096 IWDG_CFG_OVP_4096 /**< IWDG溢出时间为4.096s */
  56. #define IWDG_OVERFLOW_PERIOD_8192 IWDG_CFG_OVP_8192 /**< IWDG溢出时间为8.192s */
  57. #define IWDG_OVERFLOW_PERIOD_16384 IWDG_CFG_OVP_16384 /**< IWDG溢出时间为16.384s */
  58. /**
  59. * @}
  60. */
  61. /*-------------------------------------------functions------------------------------------------*/
  62. /************************************************************************************************/
  63. /**
  64. * @defgroup IWDG_External_Functions IWDG External Functions
  65. * @brief IWDG对外函数
  66. * @{
  67. *
  68. */
  69. /************************************************************************************************/
  70. /**
  71. * @brief 启动IWDG计数
  72. * @note 使能IWDG后,IWDG无法停止
  73. * @retval 无
  74. */
  75. __STATIC_INLINE void std_iwdg_start(void)
  76. {
  77. IWDG->CR = IWDG_ENABLE;
  78. }
  79. /**
  80. * @brief 使能IWDG配置寄存器写权限
  81. * @retval 无
  82. */
  83. __STATIC_INLINE void std_iwdg_write_access_enable(void)
  84. {
  85. IWDG->CR = IWDG_WRITE_ACCESS_ENABLE;
  86. }
  87. /**
  88. * @brief 禁止IWDG配置寄存器写权限
  89. * @retval 无
  90. */
  91. __STATIC_INLINE void std_iwdg_write_access_disable(void)
  92. {
  93. IWDG->CR = IWDG_WRITE_ACCESS_DISABLE;
  94. }
  95. /**
  96. * @brief IWDG喂狗
  97. * @retval 无
  98. */
  99. __STATIC_INLINE void std_iwdg_refresh(void)
  100. {
  101. IWDG->CR = IWDG_RELOAD;
  102. }
  103. /**
  104. * @brief 配置溢出时间
  105. * @param overflow_period IWDG的溢出时间:
  106. * @arg IWDG_OVERFLOW_PERIOD_128
  107. * @arg IWDG_OVERFLOW_PERIOD_256
  108. * @arg IWDG_OVERFLOW_PERIOD_512
  109. * @arg IWDG_OVERFLOW_PERIOD_1024
  110. * @arg IWDG_OVERFLOW_PERIOD_2048
  111. * @arg IWDG_OVERFLOW_PERIOD_4096
  112. * @arg IWDG_OVERFLOW_PERIOD_8192
  113. * @arg IWDG_OVERFLOW_PERIOD_16384
  114. * @retval 无
  115. */
  116. __STATIC_INLINE void std_iwdg_set_overflow_period(uint32_t overflow_period)
  117. {
  118. IWDG->CFG = overflow_period;
  119. }
  120. /**
  121. * @brief 获取溢出时间
  122. * @retval uint32_t IWDG的溢出时间:
  123. * @arg IWDG_OVERFLOW_PERIOD_128
  124. * @arg IWDG_OVERFLOW_PERIOD_256
  125. * @arg IWDG_OVERFLOW_PERIOD_512
  126. * @arg IWDG_OVERFLOW_PERIOD_1024
  127. * @arg IWDG_OVERFLOW_PERIOD_2048
  128. * @arg IWDG_OVERFLOW_PERIOD_4096
  129. * @arg IWDG_OVERFLOW_PERIOD_8192
  130. * @arg IWDG_OVERFLOW_PERIOD_16384
  131. */
  132. __STATIC_INLINE uint32_t std_iwdg_get_overflow_period(void)
  133. {
  134. return(IWDG->CFG);
  135. }
  136. /**
  137. * @brief 获取计数值
  138. * @retval uint32_t IWDG的计数值
  139. */
  140. __STATIC_INLINE uint32_t std_iwdg_get_counter(void)
  141. {
  142. return(IWDG->CNT);
  143. }
  144. /**
  145. * @}
  146. */
  147. #ifdef __cplusplus
  148. }
  149. #endif
  150. /**
  151. * @}
  152. */
  153. /**
  154. * @}
  155. */
  156. #endif /* CIU32F003_STD_IWDG_H */