一、环境配置
软件: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.配置时钟
10.点击“Project Manager” ,再点击“Code Generator” ,进行配置
再点击“Project ”,进行配置后,点击“GENERATE CODE”,生成项目
三、通过Keil配置代码
1.在main.c中main函数之前定义要发送的字符串,以及后面要用的strlen函数的头文件:
#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);
}
}
}
四、运行效果
TIMER2_USART
如上面视频所示,每隔5秒,向串口发送“hello windows!”
五、总结
本实验完成了用定时器Timer方式实现串口通信,掌握了用STM32CubeMX配置定时器和串口发送消息的方法,又积累了一点STM32的知识。
六、参考资料
http://www.mcublog.cn/stm32/2021_01/stm32cubemx-dingshiqi-led/
https://blog.csdn.net/qq_55894922/article/details/127432760?spm=1001.2014.3001.5501