pwm_in.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include "stm32f0xx_hal.h"
  2. #include "pwm_in.h"
  3. #include <stdio.h>
  4. static TIM_HandleTypeDef TimHandle;
  5. static TIM_IC_InitTypeDef sConfig;
  6. static TIM_SlaveConfigTypeDef sSlaveConfig;
  7. //
  8. void tim_pwm_in_init(void)
  9. {
  10. GPIO_InitTypeDef GPIO_InitStruct;
  11. __HAL_RCC_GPIOA_CLK_ENABLE();
  12. __HAL_RCC_TIM3_CLK_ENABLE();
  13. GPIO_InitStruct.Pin = GPIO_PIN_6;
  14. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  15. GPIO_InitStruct.Pull = GPIO_PULLUP;
  16. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  17. GPIO_InitStruct.Alternate = GPIO_AF0_TIM3;
  18. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  19. HAL_NVIC_SetPriority(TIM3_IRQn, 0, 1);
  20. HAL_NVIC_EnableIRQ(TIM3_IRQn);
  21. TimHandle.Instance = TIM3;
  22. TimHandle.Init.Period = 0xFFFF;
  23. TimHandle.Init.Prescaler = 0;
  24. TimHandle.Init.ClockDivision = 0;
  25. TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
  26. TimHandle.Init.RepetitionCounter = 0;
  27. TimHandle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  28. HAL_TIM_IC_Init(&TimHandle);
  29. sConfig.ICPrescaler = TIM_ICPSC_DIV1;
  30. sConfig.ICFilter = 0;
  31. sConfig.ICPolarity = TIM_ICPOLARITY_FALLING;
  32. sConfig.ICSelection = TIM_ICSELECTION_INDIRECTTI;
  33. HAL_TIM_IC_ConfigChannel(&TimHandle, &sConfig, TIM_CHANNEL_1);
  34. sConfig.ICPolarity = TIM_ICPOLARITY_RISING;
  35. sConfig.ICSelection = TIM_ICSELECTION_DIRECTTI;
  36. HAL_TIM_IC_ConfigChannel(&TimHandle, &sConfig, TIM_CHANNEL_2);
  37. sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET;
  38. sSlaveConfig.InputTrigger = TIM_TS_TI1FP1;
  39. sSlaveConfig.TriggerPolarity = TIM_TRIGGERPOLARITY_NONINVERTED;
  40. sSlaveConfig.TriggerPrescaler = TIM_TRIGGERPRESCALER_DIV1;
  41. sSlaveConfig.TriggerFilter = 0;
  42. HAL_TIM_SlaveConfigSynchro(&TimHandle, &sSlaveConfig);
  43. HAL_TIM_IC_Start_IT(&TimHandle, TIM_CHANNEL_2);
  44. HAL_TIM_IC_Start_IT(&TimHandle, TIM_CHANNEL_1);
  45. }
  46. void TIM3_IRQHandler(void)
  47. {
  48. HAL_TIM_IRQHandler(&TimHandle);
  49. }
  50. void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
  51. {
  52. static uint32_t cnt = 0;
  53. cnt++;
  54. #if 0
  55. if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2)
  56. {
  57. // Get the Input Capture value
  58. uwIC2Value = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2);
  59. if (uwIC2Value != 0)
  60. {
  61. // Duty cycle computation
  62. uwDutyCycle = ((HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1)) * 100) / uwIC2Value;
  63. // uwFrequency computation
  64. //TIM3 counter clock = (RCC_Clocks.HCLK_Frequency)
  65. uwFrequency = (HAL_RCC_GetHCLKFreq()) / uwIC2Value;
  66. }
  67. else
  68. {
  69. uwDutyCycle = 0;
  70. uwFrequency = 0;
  71. }
  72. }
  73. #endif
  74. }