Timer2.c.bak 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /**
  2. ******************************************************************************
  3. * @file bsp_TimBase.c
  4. * @author fire
  5. * @version V1.0
  6. * @date 2019-2-14
  7. * @brief TIM2 1ms 定时应用bsp
  8. ******************************************************************************
  9. * @attention
  10. *
  11. * 实验平台:保护跳闸 开发板
  12. *
  13. ******************************************************************************
  14. */
  15. #include "Timer2.h"
  16. #include "sys.h"
  17. TIM_HandleTypeDef TIM2_Handler; //定时器句柄
  18. u32 lwip_localtime=0; //lwip本地时间计数器,单位:ms
  19. /*
  20. * TIM_Period / Auto Reload Register(ARR) = 1000 TIM_Prescaler--71
  21. * 中断周期为 = 1/(72MHZ /72) * 1000 = 1ms
  22. *
  23. * TIMxCLK/CK_PSC --> TIMxCNT --> TIM_Period(ARR) --> 中断 且TIMxCNT重置为0重新计数
  24. */
  25. void Timer2_Init(u16 arr,u16 psc)
  26. {
  27. //定时器2
  28. __HAL_RCC_TIM2_CLK_ENABLE();
  29. HAL_NVIC_SetPriority(TIM2_IRQn,1,3); //设置中断优先级,抢占优先级2,子优先级2
  30. HAL_NVIC_EnableIRQ(TIM2_IRQn); //开启ITM4中断
  31. TIM2_Handler.Instance=TIM2; //通用定时器2
  32. /* 累计 TIM_Period个频率后产生一个更新或者中断 */
  33. /* 时钟预分频数为72 */
  34. TIM2_Handler.Init.Prescaler=psc; //分频
  35. TIM2_Handler.Init.CounterMode=TIM_COUNTERMODE_UP; //向上计数器
  36. /* 自动重装载寄存器周期的值(计数值) */
  37. TIM2_Handler.Init.Period=arr; //自动装载值
  38. /* 对外部时钟进行采样的时钟分频,这里没有用到 */
  39. TIM2_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1; //1分频
  40. HAL_TIM_Base_Init(&TIM2_Handler);
  41. // HAL_TIM_Base_Start_IT(&TIM2_Handler); //使能定时器2和定时器2中断
  42. }
  43. //定时器2中断服务程序
  44. void TIM2_IRQHandler(void)
  45. {
  46. if(__HAL_TIM_GET_IT_SOURCE(&TIM2_Handler,TIM_IT_UPDATE)==SET)//溢出中断
  47. {
  48. // usmart_dev.scan(); //执行usmart扫描
  49. __HAL_TIM_SET_COUNTER(&TIM2_Handler,0);; //清空定时器的CNT
  50. __HAL_TIM_SET_AUTORELOAD(&TIM2_Handler,100);//恢复原来的设置
  51. }
  52. __HAL_TIM_CLEAR_IT(&TIM2_Handler, TIM_IT_UPDATE);//清除中断标志位
  53. }
  54. //定时器3中断服务函数
  55. void TIM3_IRQHandler(void)
  56. {
  57. HAL_TIM_IRQHandler(&TIM2_Handler);
  58. }
  59. //回调函数,定时器中断服务函数调用
  60. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  61. {
  62. if(htim==(&TIM2_Handler))
  63. {
  64. lwip_localtime +=10; //加10
  65. }
  66. }
  67. /*********************************************END OF FILE**********************/