[STM32CubeMX]學習筆記3:PWM呼吸燈

 

Tips:預分頻係數和自動重裝值的理解(二.2中)

 

MCU:STM32F103ZET6

IDE:  MDK-ARM V5 +STM32CubeMX5.0.0

 

功能描述:將定時器TIM3全映射到外部端口PC6和PC7,設置輸出模式爲PWM輸出,通過改變佔空比的值實現LED7/LED8的呼吸燈效果。

需要配置的有:PC6設置爲TIM3_CH1,PC7設置爲TIM3_CH2,設置預分頻係數與自動重載值,設置PWM的輸出極性。

一. 在 Pinout&Configuration---System Core中:

  • 1. 首先設置時鐘RCC的HSE(外部高速時鐘)爲晶振模式:Crystal/ceramic Resonator

  • 2. 設置系統SYS的Debug爲Serial Wire:

  • 3. 設置外部端口PC6與PC7的模式:

二. 在 Pinout&Configuration---Timers中:

  • 1. 打開TIM3,在TIM3 Mode and Configuration中設置CH1與CH2的模式爲PWM輸出模式:

  • 2. 在Configuration中設置預分頻係數爲72-1,自動重裝值爲500-1,則PWM的輸出頻率爲72000000/72/500=2000Hz。且根據原理圖可知LED是低電平有效,所以將PWM有效極性設置爲Low:

Tips:預分頻係數和自動重裝值的理解

        時鐘頻率爲72MHz,即控制器每秒會計數72M次,預分頻係數的作用是將頻率分割;若設置爲72-1,則頻率分割爲1MHz,即控制器每秒會計數1M次,意味着每1us計數1次。若要定時1ms,由於1ms=1us*1000,那麼預裝載值就是1000-1。要將兩個值均減一的原因是控制器計數均從0開始。

 

三.在 Clock Configuration中:

配置時鐘爲72 Mhz。

四.在 Project Manager---Project中:

  • 1.設置項目的名稱以及保存的位置,選擇Toolchain/IDE爲MDK-ARM V5,

Tips:最好把Linker Settings中的Minimum Heap Size設置爲0x600。

  • 2.在Code Generator選項中如下勾選:

最後點Generate Code生成代碼,並選擇“Open Project”:

五.代碼分析與改寫:

  • 1. 在主程序main.c中首先定義16位的變量dutycycle用於存儲佔空比的值:
  /* USER CODE BEGIN 1 */
	uint16_t dutycycle=0;
  /* USER CODE END 1 */
  • 2. 開啓定時器3通道1和通道2輸出PWM波:
  /* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
	HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
  /* USER CODE END 2 */
  • 3.在While(1)中,修改定時器3通道1和通道2的比較寄存器的值(佔空比):
 /* USER CODE BEGIN 3 */
		while(dutycycle<500)
		{
			dutycycle++;
			__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,dutycycle);
			__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,dutycycle);
			HAL_Delay(1);
		}
		while(dutycycle)
		{
			dutycycle--;
			__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,dutycycle);
			__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,dutycycle);
			HAL_Delay(1);
		}
		HAL_Delay(200);
  }
  /* USER CODE END 3 */

至此,編譯後無錯並下載到開發板中,就完成了通過STM32CubeMX調用HAL庫實現PWM呼吸燈的效果程序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章