STM32F303K8 PWM
開発環境
評価ボード | Nucleo STM32F303K8 |
IDE | System Workbench for STM32 (SW4STM32) |
Library | Hal Library |
OS | windows 10 pro |
TIMユニットの機能を用いてPWMを出力します。
CubeMXの設定
左ツリーTIM2の
Clock Source: Internal Clock
Channel1: PWM Generation CH1
Channel2: PWM Generation CH2
を選択します。
TIM2の設定
Configuration→TIM2→Parameter Settings
Counter Settings
Prescaler: 0(自由に)
Counter Period: 40000
Internal Clock Division: No Division(自由に)
PWM Generation Mode 1
Mode: PWM mode 1
Pulse: 10000(自由に)
PWM Generation Mode 2
Mode: PWM mode 2
Pulse: 20000(自由に)
と設定しました。出力したいPWMの周波数やDuty比(初期値)に応じて設定します。この状態でgenerateします。
SW4STM32の設定
PWM設定用のグローバル変数を用意します。
/* USER CODE BEGIN 0 */ TIM_MasterConfigTypeDef sMasterConfig; TIM_OC_InitTypeDef sConfigOC; /* USER CODE END 0 */
TIM2の動作を開始させます。
/* USER CODE BEGIN 2 */ HAL_TIM_Base_Start_IT(&htim1); HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2); /* USER CODE END 2 */
これでビルドし、書き込めばPWMが出力されます。
ちょうど半分のDuty比が出力されていることが確認できます。PWM周波数はちょっと適当。
もしDuty比を後から変えたいときは次のようにwhile文の中を変更。
sConfigOC.Pulse = pulse; if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) { Error_Handler(); } if (HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1) != HAL_OK) { Error_Handler(); } pulse += 100; if(pulse > 20000) pulse = 0; HAL_Delay(1000);
これで、Duty比が徐々に上がるPWMを出せます。
こちらを参考にしました。
blog.livedoor.jp
20180822の記事