我們可以在STM32單片機引脚產生頻率與占空比可調的PWM波。
時鐘配置
Clock Configuration->HCLK= 80MHz
Clock Configuration->PLL Source= HSE
Clock Configuration->Input Source= 晶振頻率
RCC->HSE= Crystal/Ceramic Resonator
TIM16->Clock Source= Internal Clock
Channel1-> PWM Generation CH1
Prescaler= 8000 - 1
Counter Period= 100 - 1
Pulse= 20 (初始占空比)
計算得80,000,000/8000/100 = 100,程序可以生成100Hz的PWM波,頻率後續可以在程序中透過修改Prescaler或Counter Period(即ARR)來改變。
配置好后初始化,使用函數HAL_TIM_PWM_Start(&htim16, TIM_CHANNEL_1)打開PWM輸出,否則無波形。不同電路的配置方法有差異。
占空比切換
可以通過函數
__HAL_TIM_SetCompare(&htim16, TIM_CHANNEL_1, Duty)的Duty參數改變輸出占空比,Duty應當在0-100之間。
頻率切換
輸出PWM波的頻率可以透過修改Prescaler或Counter Period(即ARR)來改變。修改前建議先關閉PWM輸出,修改後再重啓輸出。
1 | HAL_TIM_PWM_Stop(&htim16, TIM_CHANNEL_1); |
PWM捕獲
PWM捕獲需要在上述基礎上進行如下配置:
TIM Channel1 -> Input Capture direct mode
Prescaler -> 80 - 1
Counter Period -> 默認
NVIC -> Global Interrupt
在主函數中調用函數HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1)啓動頻率測量捕獲計時器
1 | uint8_t ccr_val = 0; |
同樣地,我們可以使用Polarity Selection
ADC_IN11 -> IN11 = single_ended
1 | double getADC(ADC_HandleTypeDef *pin) { |
調用
1 | char text[30]; |
