HAL_TIMER.h 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520
  1. /***********************************************************************
  2. * Filename : hal_timer.h
  3. * Description : timer driver header file
  4. * Author(s) : Eric
  5. * version : V1.0
  6. * Modify date : 2016-03-24
  7. ***********************************************************************/
  8. #ifndef __HAL_TIMER_H__
  9. #define __HAL_TIMER_H__
  10. #include "ACM32Fxx_HAL.h"
  11. #define IS_TIMER_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) \
  12. || ((INSTANCE) == TIM4) || ((INSTANCE) == TIM6) || ((INSTANCE) == TIM7)\
  13. || ((INSTANCE) == TIM14) || ((INSTANCE) == TIM15) || ((INSTANCE) == TIM16)\
  14. | ((INSTANCE) == TIM17) )
  15. /****************** TIM Instances : supporting the break function *************/
  16. #define IS_TIM_BREAK_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || \
  17. ((INSTANCE) == TIM15) || \
  18. ((INSTANCE) == TIM16) || \
  19. ((INSTANCE) == TIM17))
  20. /************** TIM Instances : supporting Break source selection *************/
  21. #define IS_TIM_BREAKSOURCE_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || \
  22. ((INSTANCE) == TIM15) || \
  23. ((INSTANCE) == TIM16) || \
  24. ((INSTANCE) == TIM17))
  25. /************* TIM Instances : at least 1 capture/compare channel *************/
  26. #define IS_TIM_CC1_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || \
  27. ((INSTANCE) == TIM2) || \
  28. ((INSTANCE) == TIM3) || \
  29. ((INSTANCE) == TIM4) || \
  30. ((INSTANCE) == TIM14) || \
  31. ((INSTANCE) == TIM15) || \
  32. ((INSTANCE) == TIM16) || \
  33. ((INSTANCE) == TIM17))
  34. /************ TIM Instances : at least 2 capture/compare channels *************/
  35. #define IS_TIM_CC2_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || \
  36. ((INSTANCE) == TIM2) || \
  37. ((INSTANCE) == TIM3) || \
  38. ((INSTANCE) == TIM4) || \
  39. ((INSTANCE) == TIM15))
  40. /************ TIM Instances : at least 3 capture/compare channels *************/
  41. #define IS_TIM_CC3_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || \
  42. ((INSTANCE) == TIM2) || \
  43. ((INSTANCE) == TIM3) || \
  44. ((INSTANCE) == TIM4))
  45. /************ TIM Instances : at least 4 capture/compare channels *************/
  46. #define IS_TIM_CC4_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || \
  47. ((INSTANCE) == TIM2) || \
  48. ((INSTANCE) == TIM3) || \
  49. ((INSTANCE) == TIM4))
  50. /****************** TIM Instances : DMA requests generation (TIMx_DIER.UDE) ***/
  51. #define IS_TIM_UDMA_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || \
  52. ((INSTANCE) == TIM3) || \
  53. ((INSTANCE) == TIM6) || \
  54. ((INSTANCE) == TIM7) || \
  55. ((INSTANCE) == TIM15) || \
  56. ((INSTANCE) == TIM16) || \
  57. ((INSTANCE) == TIM17))
  58. /******************* TIM Instances : output(s) available **********************/
  59. #define IS_TIM_CCX_INSTANCE(INSTANCE, CHANNEL) \
  60. ( (((INSTANCE) == TIM1) && \
  61. (((CHANNEL) == TIM_CHANNEL_1) || \
  62. ((CHANNEL) == TIM_CHANNEL_2) || \
  63. ((CHANNEL) == TIM_CHANNEL_3) || \
  64. ((CHANNEL) == TIM_CHANNEL_4) ) ) \
  65. || \
  66. (((INSTANCE) == TIM2) && \
  67. (((CHANNEL) == TIM_CHANNEL_1) || \
  68. ((CHANNEL) == TIM_CHANNEL_2) || \
  69. ((CHANNEL) == TIM_CHANNEL_3) || \
  70. ((CHANNEL) == TIM_CHANNEL_4)) ) \
  71. || \
  72. (((INSTANCE) == TIM3) && \
  73. (((CHANNEL) == TIM_CHANNEL_1) || \
  74. ((CHANNEL) == TIM_CHANNEL_2) || \
  75. ((CHANNEL) == TIM_CHANNEL_3) || \
  76. ((CHANNEL) == TIM_CHANNEL_4)) ) \
  77. || \
  78. (((INSTANCE) == TIM4) && \
  79. (((CHANNEL) == TIM_CHANNEL_1) || \
  80. ((CHANNEL) == TIM_CHANNEL_2) || \
  81. ((CHANNEL) == TIM_CHANNEL_3) || \
  82. ((CHANNEL) == TIM_CHANNEL_4)) ) \
  83. || \
  84. (((INSTANCE) == TIM14) && \
  85. (((CHANNEL) == TIM_CHANNEL_1)) ) \
  86. || \
  87. (((INSTANCE) == TIM15) && \
  88. (((CHANNEL) == TIM_CHANNEL_1) || \
  89. ((CHANNEL) == TIM_CHANNEL_2)) ) \
  90. || \
  91. (((INSTANCE) == TIM16) && \
  92. (((CHANNEL) == TIM_CHANNEL_1)) ) \
  93. || \
  94. (((INSTANCE) == TIM17) && \
  95. ((CHANNEL) == TIM_CHANNEL_1) ) )
  96. /****************** TIM Instances : supporting complementary output(s) ********/
  97. #define IS_TIM_CCXN_INSTANCE(INSTANCE, CHANNEL) \
  98. ((( (INSTANCE) == TIM1) && \
  99. (((CHANNEL) == TIM_CHANNEL_1) || \
  100. ((CHANNEL) == TIM_CHANNEL_2) || \
  101. ((CHANNEL) == TIM_CHANNEL_3)) ) \
  102. || \
  103. (((INSTANCE) == TIM15) && \
  104. ((CHANNEL) == TIM_CHANNEL_1)) \
  105. || \
  106. (((INSTANCE) == TIM16) && \
  107. ((CHANNEL) == TIM_CHANNEL_1)) \
  108. || \
  109. (((INSTANCE) == TIM17) && \
  110. ((CHANNEL) == TIM_CHANNEL_1) ) )
  111. /****************** TIM Instances : supporting clock division *****************/
  112. #define IS_TIM_CLOCK_DIVISION_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || \
  113. ((INSTANCE) == TIM2) || \
  114. ((INSTANCE) == TIM3) || \
  115. ((INSTANCE) == TIM4) || \
  116. ((INSTANCE) == TIM14) || \
  117. ((INSTANCE) == TIM15) || \
  118. ((INSTANCE) == TIM16) || \
  119. ((INSTANCE) == TIM17))
  120. /****** TIM Instances : supporting external clock mode 1 for ETRF input *******/
  121. #define IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || \
  122. ((INSTANCE) == TIM2) \
  123. ((INSTANCE) == TIM3) \
  124. ((INSTANCE) == TIM4) )
  125. /****** TIM Instances : supporting external clock mode 2 for ETRF input *******/
  126. #define IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || \
  127. ((INSTANCE) == TIM2) \
  128. ((INSTANCE) == TIM3) \
  129. ((INSTANCE) == TIM4) )
  130. /****************** TIM Instances : supporting combined 3-phase PWM mode ******/
  131. #define IS_TIM_COMBINED3PHASEPWM_INSTANCE(INSTANCE) ((INSTANCE) == TIM1)
  132. /****************** TIM Instances : supporting commutation event generation ***/
  133. #define IS_TIM_COMMUTATION_EVENT_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || \
  134. ((INSTANCE) == TIM15) || \
  135. ((INSTANCE) == TIM16) || \
  136. ((INSTANCE) == TIM17))
  137. /****************** TIM Instances : supporting encoder interface **************/
  138. #define IS_TIM_ENCODER_INTERFACE_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || \
  139. ((INSTANCE) == TIM2) \
  140. ((INSTANCE) == TIM3) \
  141. ((INSTANCE) == TIM4) )
  142. /****************** TIM Instances : supporting Hall sensor interface **********/
  143. #define IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || \
  144. ((INSTANCE) == TIM2) \
  145. ((INSTANCE) == TIM3) \
  146. ((INSTANCE) == TIM4) )
  147. /*********** TIM Instances : Slave mode available (TIMx_SMCR available )*******/
  148. #define IS_TIM_SLAVE_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || \
  149. ((INSTANCE) == TIM2) || \
  150. ((INSTANCE) == TIM3) || \
  151. ((INSTANCE) == TIM4) || \
  152. ((INSTANCE) == TIM15))
  153. /****************** TIM Instances : supporting repetition counter *************/
  154. #define IS_TIM_REPETITION_COUNTER_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || \
  155. ((INSTANCE) == TIM15) || \
  156. ((INSTANCE) == TIM16) || \
  157. ((INSTANCE) == TIM17))
  158. #define HAL_TIM_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER |= (__INTERRUPT__))
  159. #define HAL_TIM_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER &= ~(__INTERRUPT__))
  160. #define HAL_TIM_ENABLE_IT_EX(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->DIER |= (__INTERRUPT__))
  161. #define HAL_TIM_DISABLE_IT_EX(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->DIER &= ~(__INTERRUPT__))
  162. #define HAL_TIM_ENABLE_DMA(__HANDLE__, __DMA_REQ__) ((__HANDLE__)->Instance->DIER |= (__DMA_REQ__))
  163. #define HAL_TIM_DISABLE_DMA(__HANDLE__, __DMA_REQ__) ((__HANDLE__)->Instance->DIER &= ~(__DMA_REQ__))
  164. #define TIM_CR2_CCPC_Pos (0U)
  165. #define TIM_CR2_CCPC_Msk (0x1UL << TIM_CR2_CCPC_Pos)
  166. #define TIM_CR2_CCPC TIM_CR2_CCPC_Msk
  167. #define TIM_CR2_CCUS_Pos (2U)
  168. #define TIM_CR2_CCUS_Msk (0x1UL << TIM_CR2_CCUS_Pos)
  169. #define TIM_CR2_CCUS TIM_CR2_CCUS_Msk
  170. #define TIM_CR2_CCDS_Pos (3U)
  171. #define TIM_CR2_CCDS_Msk (0x1UL << TIM_CR2_CCDS_Pos)
  172. #define TIM_CR2_CCDS TIM_CR2_CCDS_Msk
  173. #define TIM_COMMUTATION_TRGI TIM_CR2_CCUS
  174. #define TIM_COMMUTATION_SOFTWARE 0x00000000U
  175. #define TIM_IT_UPDATE BIT0
  176. #define TIM_IT_CC1 BIT1
  177. #define TIM_IT_CC2 BIT2
  178. #define TIM_IT_CC3 BIT3
  179. #define TIM_IT_CC4 BIT4
  180. #define TIM_IT_COM BIT5
  181. #define TIM_IT_TRIGGER BIT6
  182. #define TIM_IT_BREAK BIT7
  183. #define TIM_DMA_UPDATE BIT8
  184. #define TIM_DMA_CC1 BIT9
  185. #define TIM_DMA_CC2 BIT10
  186. #define TIM_DMA_CC3 BIT11
  187. #define TIM_DMA_CC4 BIT12
  188. #define TIM_DMA_COM BIT13
  189. #define TIM_DMA_TRIGGER BIT14
  190. #define TIM_DMA_BREAK BIT15
  191. #define TIM_EVENTSOURCE_UPDATE BIT0 /*!< Reinitialize the counter and generates an update of the registers */
  192. #define TIM_EVENTSOURCE_CC1 BIT1 /*!< A capture/compare event is generated on channel 1 */
  193. #define TIM_EVENTSOURCE_CC2 BIT2 /*!< A capture/compare event is generated on channel 2 */
  194. #define TIM_EVENTSOURCE_CC3 BIT3 /*!< A capture/compare event is generated on channel 3 */
  195. #define TIM_EVENTSOURCE_CC4 BIT4 /*!< A capture/compare event is generated on channel 4 */
  196. #define TIM_EVENTSOURCE_COM BIT5 /*!< A commutation event is generated */
  197. #define TIM_EVENTSOURCE_TRIGGER BIT6 /*!< A trigger event is generated */
  198. #define TIM_EVENTSOURCE_BREAK BIT7 /*!< A break event is generated */
  199. #define TIM_ARR_PRELOAD_DISABLE 0
  200. #define TIM_ARR_PRELOAD_ENABLE 1
  201. #define TIM_COUNTERMODE_DIR_INDEX 4
  202. #define TIM_COUNTERMODE_UP (0 << TIM_COUNTERMODE_DIR_INDEX)
  203. #define TIM_COUNTERMODE_DOWN (1 << TIM_COUNTERMODE_DIR_INDEX)
  204. #define TIM_COUNTERMODE_CMS_INDEX 5
  205. #define TIM_COUNTERMODE_CENTERALIGNED1 (1 << TIM_COUNTERMODE_CMS_INDEX)
  206. #define TIM_COUNTERMODE_CENTERALIGNED2 (2 << TIM_COUNTERMODE_CMS_INDEX)
  207. #define TIM_COUNTERMODE_CENTERALIGNED3 (3 << TIM_COUNTERMODE_CMS_INDEX)
  208. #define TIM_CLKCK_DIV_INDEX 8
  209. #define TIM_CLOCKDIVISION_DIV1 0x00000000U /*!< Clock division: tDTS=tCK_INT */
  210. #define TIM_CLOCKDIVISION_DIV2 (1U << TIM_CLKCK_DIV_INDEX) /*!< Clock division: tDTS=2*tCK_INT */
  211. #define TIM_CLOCKDIVISION_DIV4 (2U << TIM_CLKCK_DIV_INDEX) /*!< Clock division: tDTS=4*tCK_INT */
  212. #define TIM_TRGO_RESET (0 << 4)
  213. #define TIM_TRGO_ENABLE (1 << 4)
  214. #define TIM_TRGO_UPDATE (2 << 4)
  215. #define TIM_TRGO_CMP_PULSE (3 << 4)
  216. #define TIM_TRGO_OC1REF (4 << 4)
  217. #define TIM_TRGO_OC2REF (5 << 4)
  218. #define TIM_TRGO_OC3REF (6 << 4)
  219. #define TIM_TRGO_OC4REF (7 << 4)
  220. #define TIM_MASTERSLAVEMODE_DISABLE 0
  221. #define TIM_MASTERSLAVEMODE_ENABLE BIT7
  222. #define TIM_SLAVE_MODE_INDEX 0
  223. #define TIM_SLAVE_MODE_DIS (0U << TIM_SLAVE_MODE_INDEX)
  224. #define TIM_SLAVE_MODE_ENC1 (1U << TIM_SLAVE_MODE_INDEX)
  225. #define TIM_SLAVE_MODE_ENC2 (2U << TIM_SLAVE_MODE_INDEX)
  226. #define TIM_SLAVE_MODE_ENC3 (3U << TIM_SLAVE_MODE_INDEX)
  227. #define TIM_SLAVE_MODE_RST (4U << TIM_SLAVE_MODE_INDEX)
  228. #define TIM_SLAVE_MODE_GATE (5U << TIM_SLAVE_MODE_INDEX)
  229. #define TIM_SLAVE_MODE_TRIG (6U << TIM_SLAVE_MODE_INDEX)
  230. #define TIM_SLAVE_MODE_EXT1 (7U << TIM_SLAVE_MODE_INDEX)
  231. #define TIM_TRIGGER_SOURCE_INDEX 4
  232. #define TIM_TRIGGER_SOURCE_ITR0 (0U << TIM_TRIGGER_SOURCE_INDEX)
  233. #define TIM_TRIGGER_SOURCE_ITR1 (1U << TIM_TRIGGER_SOURCE_INDEX)
  234. #define TIM_TRIGGER_SOURCE_ITR2 (2U << TIM_TRIGGER_SOURCE_INDEX)
  235. #define TIM_TRIGGER_SOURCE_ITR3 (3U << TIM_TRIGGER_SOURCE_INDEX)
  236. #define TIM_TRIGGER_SOURCE_TI1F_ED (4U << TIM_TRIGGER_SOURCE_INDEX)
  237. #define TIM_TRIGGER_SOURCE_TI1FP1 (5U << TIM_TRIGGER_SOURCE_INDEX)
  238. #define TIM_TRIGGER_SOURCE_TI2FP2 (6U << TIM_TRIGGER_SOURCE_INDEX)
  239. #define TIM_TRIGGER_SOURCE_ETRF (7U << TIM_TRIGGER_SOURCE_INDEX)
  240. #define TIMER_SR_UIF BIT0
  241. #define TIMER_SR_CC1IF BIT1
  242. #define TIMER_SR_CC2IF BIT2
  243. #define TIMER_SR_CC3IF BIT3
  244. #define TIMER_SR_CC4IF BIT4
  245. #define TIMER_SR_COMIF BIT5
  246. #define TIMER_SR_TIF BIT6
  247. #define TIMER_SR_BIF BIT7
  248. #define TIMER_SR_CC1OF BIT9
  249. #define TIMER_SR_CC2OF BIT10
  250. #define TIMER_SR_CC3OF BIT11
  251. #define TIMER_SR_CC4OF BIT12
  252. #define TIMER_INT_EN_UPD BIT0
  253. #define TIMER_INT_EN_CC1 BIT1
  254. #define TIMER_INT_EN_CC2 BIT2
  255. #define TIMER_INT_EN_CC3 BIT3
  256. #define TIMER_INT_EN_CC4 BIT4
  257. #define TIMER_INT_EN_COM BIT5
  258. #define TIMER_INT_EN_TRI BIT6
  259. #define TIMER_INT_EN_BRK BIT7
  260. #define TIMER_DMA_EN_UPD BIT8
  261. #define TIMER_DMA_EN_CC1 BIT9
  262. #define TIMER_DMA_EN_CC2 BIT10
  263. #define TIMER_DMA_EN_CC3 BIT11
  264. #define TIMER_DMA_EN_CC4 BIT12
  265. #define TIMER_DMA_EN_COM BIT13
  266. #define TIMER_DMA_EN_TRI BIT14
  267. #define TIM_CHANNEL_1 0
  268. #define TIM_CHANNEL_2 1
  269. #define TIM_CHANNEL_3 2
  270. #define TIM_CHANNEL_4 3
  271. #define OUTPUT_FAST_MODE_DISABLE 0
  272. #define OUTPUT_FAST_MODE_ENABLE 1
  273. #define OUTPUT_POL_ACTIVE_HIGH 0
  274. #define OUTPUT_POL_ACTIVE_LOW 1
  275. #define OUTPUT_DISABLE_IDLE_STATE 0
  276. #define OUTPUT_ENABLE_IDLE_STATE 1
  277. #define OUTPUT_IDLE_STATE_0 0
  278. #define OUTPUT_IDLE_STATE_1 1
  279. #define OUTPUT_MODE_FROZEN 0
  280. #define OUTPUT_MODE_MATCH_HIGH 1
  281. #define OUTPUT_MODE_MATCH_LOW 2
  282. #define OUTPUT_MODE_MATCH_TOGGLE 3
  283. #define OUTPUT_MODE_FORCE_LOW 4
  284. #define OUTPUT_MODE_FORCE_HIGH 5
  285. #define OUTPUT_MODE_PWM1 6
  286. #define OUTPUT_MODE_PWM2 7
  287. #define TIM_CLOCKSOURCE_INT 0
  288. #define TIM_CLOCKSOURCE_ITR0 1
  289. #define TIM_CLOCKSOURCE_ITR1 2
  290. #define TIM_CLOCKSOURCE_ITR2 3
  291. #define TIM_CLOCKSOURCE_ITR3 4
  292. #define TIM_CLOCKSOURCE_TI1FP1 5
  293. #define TIM_CLOCKSOURCE_TI2FP2 6
  294. #define TIM_CLOCKSOURCE_ETR 7
  295. #define TIM_ETR_POLAIRTY_HIGH 0
  296. #define TIM_ETR_POLAIRTY_LOW (BIT15)
  297. #define TIM_ETR_FILTER_LVL(x) (x << 8) //BIT8-BIT11
  298. #define TIM_ETR_PRESCALER_1 0
  299. #define TIM_ETR_PRESCALER_2 (BIT12)
  300. #define TIM_ETR_PRESCALER_4 (BIT13)
  301. #define TIM_ETR_PRESCALER_8 (BIT12|BIT13)
  302. #define ETR_SELECT_GPIO 0
  303. #define ETR_SELECT_COMP1_OUT BIT14
  304. #define ETR_SELECT_COMP2_OUT BIT15
  305. #define ETR_SELECT_ADC_AWD BIT14|BIT15
  306. #define ETR_SELECT_MASK (BIT14|BIT15)
  307. #define TIM_TI1_FILTER_LVL(x) (x << 4)
  308. #define TIM_TI2_FILTER_LVL(x) (x << 12)
  309. #define TIM_TI3_FILTER_LVL(x) (x << 4)
  310. #define TIM_TI4_FILTER_LVL(x) (x << 12)
  311. #define TIM_IC1_PRESCALER_1 0
  312. #define TIM_IC1_PRESCALER_2 (BIT2)
  313. #define TIM_IC1_PRESCALER_4 (BIT3)
  314. #define TIM_IC1_PRESCALER_8 (BIT2|BIT3)
  315. #define TIM_IC2_PRESCALER_1 0
  316. #define TIM_IC2_PRESCALER_2 (BIT10)
  317. #define TIM_IC2_PRESCALER_4 (BIT11)
  318. #define TIM_IC2_PRESCALER_8 (BIT10|BIT11)
  319. #define TIM_IC3_PRESCALER_1 0
  320. #define TIM_IC3_PRESCALER_2 (BIT2)
  321. #define TIM_IC3_PRESCALER_4 (BIT3)
  322. #define TIM_IC3_PRESCALER_8 (BIT2|BIT3)
  323. #define TIM_IC4_PRESCALER_1 0
  324. #define TIM_IC4_PRESCALER_2 (BIT10)
  325. #define TIM_IC4_PRESCALER_4 (BIT11)
  326. #define TIM_IC4_PRESCALER_8 (BIT10|BIT11)
  327. typedef struct
  328. {
  329. uint32_t ClockSource; //TIMER clock sources
  330. uint32_t ClockPolarity; //TIMER clock polarity
  331. uint32_t ClockPrescaler; //TIMER clock prescaler
  332. uint32_t ClockFilter; //TIMER clock filter
  333. } TIM_ClockConfigTypeDef;
  334. typedef struct
  335. {
  336. uint32_t OCMode; // Specifies the TIM mode.
  337. uint32_t Pulse; // Specifies the pulse value to be loaded into the Capture Compare Register.
  338. uint32_t OCPolarity; // Specifies the output polarity.
  339. uint32_t OCNPolarity; // Specifies the complementary output polarity.
  340. uint32_t OCFastMode; // Specifies the Fast mode state.
  341. uint32_t OCIdleState; // Specifies the TIM Output Compare pin state during Idle state.
  342. uint32_t OCNIdleState; // Specifies the TIM Output Compare complementary pin state during Idle state.
  343. } TIM_OC_InitTypeDef;
  344. #define TIM_SLAVE_CAPTURE_ACTIVE_RISING 0
  345. #define TIM_SLAVE_CAPTURE_ACTIVE_FALLING 1
  346. #define TIM_SLAVE_CAPTURE_ACTIVE_RISING_FALLING 2
  347. #define TIM_ICSELECTION_DIRECTTI 0
  348. #define TIM_ICSELECTION_INDIRECTTI 1
  349. #define TIM_CC1_SLAVE_CAPTURE_POL_RISING (0)
  350. #define TIM_CC1_SLAVE_CAPTURE_POL_FALLING (BIT1)
  351. #define TIM_CC1_SLAVE_CAPTURE_POL_BOTH (BIT1 | BIT3)
  352. #define TIM_CC2_SLAVE_CAPTURE_POL_RISING (0)
  353. #define TIM_CC2_SLAVE_CAPTURE_POL_FALLING (BIT5)
  354. #define TIM_CC2_SLAVE_CAPTURE_POL_BOTH (BIT5 | BIT7)
  355. #define TIM_CC3_SLAVE_CAPTURE_POL_RISING (0)
  356. #define TIM_CC3_SLAVE_CAPTURE_POL_FALLING (BIT9)
  357. #define TIM_CC3_SLAVE_CAPTURE_POL_BOTH (BIT9 | BIT11)
  358. #define TIM_CC4_SLAVE_CAPTURE_POL_RISING (0)
  359. #define TIM_CC4_SLAVE_CAPTURE_POL_FALLING (BIT13)
  360. #define TIM_CC4_SLAVE_CAPTURE_POL_BOTH (BIT13 | BIT15)
  361. typedef struct
  362. {
  363. uint32_t SlaveMode; // Slave mode selection
  364. uint32_t InputTrigger; // Input Trigger source
  365. uint32_t TriggerPolarity; // Input Trigger polarity
  366. uint32_t TriggerPrescaler; // input prescaler, only for ETR input
  367. uint32_t TriggerFilter; // Input trigger filter
  368. } TIM_SlaveConfigTypeDef;
  369. typedef struct
  370. {
  371. uint32_t ICPolarity; // Specifies the active edge of the input signal.
  372. uint32_t ICSelection; // Specifies the input
  373. uint32_t ICPrescaler; // Specifies the Input Capture Prescaler.
  374. uint32_t TIFilter; // Specifies the input capture filter.
  375. } TIM_IC_InitTypeDef;
  376. typedef struct
  377. {
  378. uint32_t MasterOutputTrigger; // Trigger output (TRGO) selection
  379. uint32_t MasterSlaveMode; // Master/slave mode selection
  380. } TIM_MasterConfigTypeDef;
  381. #define TIM_DMA_UPDATE_INDEX 0
  382. #define TIM_DMA_CC1_INDEX 1
  383. #define TIM_DMA_CC2_INDEX 2
  384. #define TIM_DMA_CC3_INDEX 3
  385. #define TIM_DMA_CC4_INDEX 4
  386. #define TIM_DMA_COM_INDEX 5
  387. #define TIM_DMA_TRIG_INDEX 6
  388. #define MAX_DMA_REQ_ONE_TIMER 7
  389. typedef struct
  390. {
  391. uint32_t Prescaler; // Specifies the prescaler value used to divide the TIM clock.
  392. uint32_t Period; // Specifies the ARR value
  393. uint32_t ARRPreLoadEn; // Specifies the preload enable or disable
  394. uint32_t RepetitionCounter; // Specifies the repetition counter value
  395. uint32_t CounterMode; // Specifies the counter mode.Up/Down/Center
  396. uint32_t ClockDivision; // Specifies the clock division, used for deadtime or sampling
  397. } TIM_Base_InitTypeDef;
  398. typedef struct
  399. {
  400. TIM_TypeDef *Instance;
  401. TIM_Base_InitTypeDef Init; /*!< TIM Time Base required parameters */
  402. DMA_HandleTypeDef *hdma[MAX_DMA_REQ_ONE_TIMER];
  403. }TIM_HandleTypeDef;
  404. /* HAL_TIMER_MSP_Init */
  405. extern uint32_t HAL_TIMER_MSP_Init(TIM_HandleTypeDef * htim);
  406. /* HAL_TIMER_Slave_Mode_Config */
  407. extern uint32_t HAL_TIMER_Slave_Mode_Config(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);
  408. /* HAL_TIMER_Base_Init */
  409. extern uint32_t HAL_TIMER_Base_Init(TIM_HandleTypeDef * htim);
  410. /* HAL_TIMER_Output_Config */
  411. extern uint32_t HAL_TIMER_Output_Config(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef * Output_Config, uint32_t Channel);
  412. /* HAL_TIMER_Base_Start */
  413. extern void HAL_TIMER_Base_Start(TIM_TypeDef *TIMx);
  414. /* HAL_TIM_PWM_Output_Start */
  415. extern uint32_t HAL_TIM_PWM_Output_Start(TIM_TypeDef *TIMx, uint32_t Channel);
  416. /* HAL_TIM_PWM_Output_Stop */
  417. extern HAL_StatusTypeDef HAL_TIM_PWM_Output_Stop(TIM_TypeDef *TIMx, uint32_t Channel);
  418. /* HAL_TIMER_OC_Start */
  419. extern uint32_t HAL_TIMER_OC_Start(TIM_TypeDef *TIMx, uint32_t Channel);
  420. /* HAL_TIMER_OCxN_Start */
  421. extern uint32_t HAL_TIMER_OCxN_Start(TIM_TypeDef *TIMx, uint32_t Channel);
  422. /* HAL_TIMER_OC_Stop */
  423. extern HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_TypeDef *TIMx, uint32_t Channel);
  424. /* HAL_TIM_Capture_Start */
  425. extern uint32_t HAL_TIM_Capture_Start(TIM_TypeDef *TIMx, uint32_t Channel);
  426. /* HAL_TIM_Capture_Stop */
  427. extern uint32_t HAL_TIM_Capture_Stop(TIM_TypeDef *TIMx, uint32_t Channel);
  428. /* HAL_TIMER_Capture_Config */
  429. extern uint32_t HAL_TIMER_Capture_Config(TIM_TypeDef *TIMx, TIM_IC_InitTypeDef * Capture_Config, uint32_t Channel);
  430. /* HAL_TIMER_Master_Mode_Config */
  431. extern uint32_t HAL_TIMER_Master_Mode_Config(TIM_TypeDef *TIMx, TIM_MasterConfigTypeDef * sMasterConfig);
  432. /* HAL_TIMER_SelectClockSource */
  433. extern HAL_StatusTypeDef HAL_TIMER_SelectClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef * sClockSourceConfig);
  434. /* HAL_TIMER_ReadCapturedValue */
  435. extern uint32_t HAL_TIMER_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel);
  436. /* HAL_TIMER_Clear_Capture_Flag */
  437. extern void HAL_TIMER_Clear_Capture_Flag(TIM_HandleTypeDef *htim, uint32_t Channel);
  438. #endif