文章目录
- 一、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);
else
HAL_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的知识。