文章目录
- 一、STM32定时器
- 二、脉宽调制pwm
- 三、定时器控制led
- (1)实验内容
- (2)创建工程
- (3)Keli程序
- (4)观察波形图
- (5)实物连接图
- (6)实践效果
- 四、PWM模式控制呼吸灯
- (1)实验内容
- (2)创建工程
- (3)Keli程序
- (4)观察波形图
- (5)实物连接图
- (6)实践效果
- 五、参考引用
- 六、总结
一、STM32定时器
定时器分类
功能
二、脉宽调制pwm
PWM工作原理
三、定时器控制led
(1)实验内容
使用STM32F103的 Tim2~Tim5其一定时器的某一个通道pin,连接一个LED,用定时器计数方式,控制LED以2s的频率周期性地亮-灭。
(2)创建工程
(3)Keli程序
在主函数main中写入以下程序。所选led管脚为PA6
/* USER CODE BEGIN 2 */HAL_TIM_Base_Start_IT(&htim2);/* USER CODE END 2 */
/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{static unsigned char ledState = 0;if (htim == (&htim2)){if (ledState == 0)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_RESET);elseHAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_SET);ledState = !ledState;}
}/* USER CODE END 4 */
(4)观察波形图
(5)实物连接图
(6)实践效果
四、PWM模式控制呼吸灯
(1)实验内容
采用定时器PWM模式,让 LED 以呼吸灯方式渐亮渐灭,周期为1~2秒,自己调整占空比变化到一个满意效果;使用Keil虚拟示波器,观察 PWM输出波形。
(2)创建工程
除了选择TIM不同外其他均与前面步骤相同
(3)Keli程序
/* USER CODE BEGIN 1 */uint16_t pwmVal=0; uint8_t dir=1; /* USER CODE END 1 */
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);/* USER CODE END 2 */
/* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */while (pwmVal< 500){pwmVal++;__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwmVal); HAL_Delay(1);}while (pwmVal){pwmVal--;__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwmVal); HAL_Delay(1);}HAL_Delay(200);}/* USER CODE END 3 */
(4)观察波形图
(5)实物连接图
(6)实践效果
五、参考引用
STM32CubeMX & Keil——STM32F103C8T6:PWM控制LED灯
六、总结
本次实验我学习到了更多定时器和pwm的知识。