2020年12月28日 星期一

STM32CubeMX PWM實現呼吸燈​​效果

在STM32CubeMX中新建項目,選擇正確的MCU型號

根據板子實際情況設置時鐘(STM32F100RBT的最高主頻是24M)

設置PC9 管腳為TIM3_CH4, 即定時器TIM3的Channel4

然後設置TIM3的Channel4為PWM Generation CH2

我們知道TIM3是掛在APB1總線上的,看時鍾樹我們知道APB1總線的Timer頻率是24MHz。

配置TIM3參數,預分頻係數設置為24-1, 自動重載值設置為1000-1,那麼PWM頻率為24,000,000/24/1000=1000Hz,即1KHz。由於LED是低電平點亮,所以我們把極性設置為low。

在main.c中,先定義一個變量存儲我們設置的佔空比

  1. /* USER CODE BEGIN 1 */
  2. uint16_t dutyCycle = 0;
  3. /* USER CODE END 1 */

然後使能TIM3的PWM Channel2 輸出。

  1. /* USER CODE BEGIN 2 */
  2. HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_4);
  3. /* USER CODE END 2 */

然後在while(1)中改變dutyCycle的值

  1. /* USER CODE BEGIN WHILE */
  2. while (1)
  3. {
  4. while (dutyCycle < 1000)
  5. {
  6. dutyCycle ++;
  7. __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_4, dutyCycle);
  8. // TIM3->CCR2 = dutyCycle;
  9. HAL_Delay(1);
  10. }
  11. while (dutyCycle)
  12. {
  13. dutyCycle --;
  14. __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_4, dutyCycle);
  15. // TIM3->CCR2 = dutyCycle;
  16. HAL_Delay(1);
  17. }
  18. HAL_Delay(200);
  19. /* USER CODE END WHILE */

 

沒有留言: