STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验

一、STM32定时器控制流水灯

(1)创建项目

1、创建新项目,创建过程不多赘述,创建完毕后得到如下界面:

在这里插入图片描述

2、设置RCC
点击RCC,设置HSE为Crystal/Ceramic Resonator。

在这里插入图片描述

3、设置调试接口
点击SYS后,选择Debug,将其选择为Serial Wire

在这里插入图片描述

4、设置GPIO
选择GPIO后,找到PC15,将其设置为GPIO-Output,最后将其命名为D1

在这里插入图片描述

5、设置定时器
点击TIM2,设置Clock Source为Internal Clock,修改如下参数
由于时钟我们一般会配置为72MHZ,所以72分频后得到1MHZ的时钟。1MHZ的时钟,计数20000次,得到时间20000/1000000=0.02秒。也就是每隔0.02秒定时器2会产生一次定时中断。

在这里插入图片描述

6、配置中断
点击NVIC,勾选如下选项

在这里插入图片描述

同时点击Code generator,勾选如下选项

在这里插入图片描述

7、配置时钟
将时钟设置成如下参数

在这里插入图片描述

8、生成项目

在这里插入图片描述

(2)编写代码

1、在main.c 中加入如下代码

HAL_TIM_Base_Start_IT(&htim2);

在这里插入图片描述

2、在main.c中加入另一段代码

该函数为定时器的中断回调函数,当产生定时中断的时候,会自动调用这个函数。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    
    
	static uint32_t time_cnt =0;

	if(htim->Instance == TIM2)
	{
    
    
		if(++time_cnt >= 100)
		{
    
    
			time_cnt =0;
			HAL_GPIO_TogglePin(D1_GPIO_Port,D1_Pin);
		}
	}
}

在这里插入图片描述

3、运行程序

在这里插入图片描述

没有报错!烧录文件

4、烧录代码

在这里插入图片描述
烧录成功!

5、实验结果

在这里插入图片描述

(3)定时器实现串口通信发送“hello window”

该模块与定时器实现LED灯的做法基本相似,只不过加上了串口通信的内容

1、项目变更

1、返回STM32CubeMX

在这里插入图片描述
在这里插入图片描述

2、建立项目

2、建立项目

在这里插入图片描述

3、调试程序

在这里插入图片描述

结果无误!

4、烧录程序

在这里插入图片描述

5、实验结果

在这里插入图片描述

二、PWM信号实现呼吸灯

(1)创建项目

1、老样子过程不赘述,打开项目

在这里插入图片描述

2、设置外部时钟
点击RCC,将HSE选项选至Crystal/Ceramic Resonator。

在这里插入图片描述

3、配置调试接口
点击SYS,将Debug选项选至Serial Wire。

在这里插入图片描述

4、配置定时器
点击TIM2,将Clock Source选项选至Internal Clock选项,再将Channel2选择为PWM Generate CH2
将参数设置成如下图所示的大小

在这里插入图片描述

5、时钟配置
设置如下参数

在这里插入图片描述

6、生成项目

在这里插入图片描述

(2)编写代码

1、在main.c函数下加入如下代码

存储占空比

uint16_t duty_num = 10;

在这里插入图片描述

2、main.c下添加另一组代码,代码位置如图

输出PWM

HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);

在这里插入图片描述

3、再添加一组代码到main.c函数中

while (1)
  {
    
    
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_Delay(50);
		duty_num = duty_num + 10;
		if(duty_num > 500)
		{
    
    
			duty_num = 0;
		}
		__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,duty_num);
  }

在这里插入图片描述

4、调试程序

在这里插入图片描述

5、调试成功,烧录代码

在这里插入图片描述

6、实验结果

在这里插入图片描述

三、总结

这次实验主要是学习定时器的用法,通过实验我发现,定时器的功能很强大,但是相比较其他方法之下略显复杂,不仅要设置不同的端口,参数也要靠自己去设置,但另一方面来看,这种自己设置参数能够更好的满足的自己的需求。

四、参考博客

https://blog.csdn.net/huang_527/article/details/127578283

猜你喜欢

转载自blog.csdn.net/m0_58406663/article/details/127598468