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

文章目录

  • 一、STM32定时器控制流水灯
    • (1)创建项目
    • (2)编写代码
    • (3)定时器实现串口通信发送“hello window”
      • 1、项目变更
      • 2、建立项目
  • 二、PWM信号实现呼吸灯
    • (1)创建项目
    • (2)编写代码
  • 三、总结
  • 四、参考博客

一、STM32定时器控制流水灯

(1)创建项目

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

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第1张图片

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

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第2张图片

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

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第3张图片

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

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第4张图片

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

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第5张图片

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

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第6张图片

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

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第7张图片

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

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第8张图片

8、生成项目

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第9张图片

(2)编写代码

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

HAL_TIM_Base_Start_IT(&htim2);

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第10张图片

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);
		}
	}
}

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第11张图片

3、运行程序

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第12张图片

没有报错!烧录文件

4、烧录代码

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第13张图片
烧录成功!

5、实验结果

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

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

1、项目变更

1、返回STM32CubeMX

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第14张图片
STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第15张图片

2、建立项目

2、建立项目

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第16张图片

3、调试程序

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第17张图片

结果无误!

4、烧录程序

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第18张图片

5、实验结果

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第19张图片

二、PWM信号实现呼吸灯

(1)创建项目

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

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第20张图片

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

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第21张图片

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

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第22张图片

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

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第23张图片

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

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第24张图片

6、生成项目

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第25张图片

(2)编写代码

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

存储占空比

uint16_t duty_num = 10;

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第26张图片

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

输出PWM

HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第27张图片

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);
  }

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第28张图片

4、调试程序

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第29张图片

5、调试成功,烧录代码

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第30张图片

6、实验结果

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验_第31张图片

三、总结

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

四、参考博客

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

你可能感兴趣的:(stm32,单片机,arm)