STM32定时器实现串口通信


使用工具

软件:STM32CubeMX:6.6.1
Keil 5.31
mcuisp
野火串口调试助手
硬件:STM32F103C8T6

一、通过STM32Cube配置工程

1.点击“ACCESS TO MCU SELECTOR”来创建一个新的工程:
在这里插入图片描述
2.搜索型号,选择合适的型号进行工程建立
在这里插入图片描述
3.设置RCC
在这里插入图片描述

4.设置SYS
在这里插入图片描述

5.设置USART
在这里插入图片描述

6.配置定时器2。这里我们使用定时器2来实现定时的功能。如图所示,依次点击位置1,选中定时器2;位置2,配置定时器2的时钟源为内部时钟;位置3,分频系数为71,向上计数模式,计数周期为5000,使能自动重载模式。
在这里插入图片描述

分频系数那里虽然写的是71,但系统处理的时候会自动加上1,所以实际进行的是72分频。由于时钟我们一般会配置为72MHZ,所以72分频后得到1MHZ的时钟。1MHZ的时钟,计数5000次,得到时间5000/1000000=0.005秒。也就是每隔0.005秒定时器2会产生一次定时中断。
7.配置中断。如下图所示,开启定时器2的中断。
在这里插入图片描述

如下图所示,生成定时器2中断优先级配置代码。
在这里插入图片描述

8.配置时钟
在这里插入图片描述

9.点击“Project Manager” ,再点击“Code Generator” ,进行配置
在这里插入图片描述

在这里插入图片描述

二、使用keil配置代码

  1. 在main.c中main函数之前定义要发送的字符串,以及引入头文件
#include"string.h"
char message[]="hello Windows\n";

在这里插入图片描述
2. 加入如下代码启动定时器2

HAL_TIM_Base_Start_IT(&htim2);

在这里插入图片描述
在这里插入图片描述
3.在main.c中找到如下位置写入代码:

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

	if(htim->Instance == TIM2)
	{
		if(++time_cnt >= 1000)
		{
			time_cnt =0;
			HAL_UART_Transmit(&huart1,(uint8_t *)&message,strlen(message),0xffff);
		}
	}
}

在这里插入图片描述

三、效果展示

每隔5秒,向串口发送“hello windows!

四、总结

通过本次实验了解到了定时器的概念,原理,以及如何使用,并在STM32CUBEMAX让其与窗口通信搭配一起使用,每隔五秒输出“hello windows!”,通过解决问题,完成实验,收获良多。

五、参考资料

http://www.mcublog.cn/stm32/2021_01/stm32cubemx-dingshiqi-led/
https://blog.csdn.net/qq_43279579/article/details/110138564
https://blog.csdn.net/qq_47281915/article/details/121053903

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值