使用软件
1.STM32CubeMX
配置接口参数,生成代码
2.Keil5
书写自己的代码部分
使用硬件
1.主板STM32F407ZGT6
2.串口驱动USB To TTL
3.烧录器ST-LINK V2
任务:使用定时器中断发送数据给串口
首先我们续接之前的配置进行后续的设置,如果没看过之前的设置可以去看看我之前的文章 STM32学习笔记2:USART的应用和STM32学习笔记2:USART的应用(扩展printf函数进行串口通信)在这里就不过多赘述。
STM32CubeMX配置单片机
依照上边两张图我们进行定时器的配置,由于我的主频是168MHz
我目前是需要1s
发送一次串口数据所以我需要将定时器设置为1ms
一次计数,计数一千次就可以达到1s
的延时效果,而定时器的频率的公式是f = 主频/[(预分频系数+1)*(计数周期+1)]
因此我将预分频系数设置为168-1
,计数周期设置为1000-1
,这样子我们得到的f=168M/[(168-1+1)*(1000-1+1)] = 1kHz
也就是1ms
一次。
按照上图指示我们设计一下时钟控制RCC
这里在高速时钟上选择使用外部无源晶振或者外部有源晶振都可以,我这边选择外部无源晶振也就是Crystal/Ceramic Resonator
,到这里我们在STM32CubeMX
上的配置就已经完成了。
如果已经打开过keil5
那就点close
,如果没打开过就点open project
。
keil5的设置
进入keil5
界面后如果弹出如上图这些窗口就全部点击是选项。
依照以上两幅图的指示我们进行keil5的一些设置这样子可以提高我们的工作效率,不知道为什么勾选上USB microLIB
的可以去看一下我之前的学习笔记STM32学习笔记2:USART的应用(扩展printf函数进行串口通信),这里就不细讲了,至于后边的Reset and Run
是为了在烧录完成后自动复位并且执行烧录的程序。
注意:在重新配置STM32CubeMX生成代码后要重新执行上边两幅图的操作,因为在重新生成后这些配置会重置,我暂时也不知道如何去修改使其不重置
。
代码设计
tim.c定时器中的设计
首先我们需要在tim.c
中设计延迟一秒的函数。
写入的代码如下,这个代码的含义是当定时器溢出时会回调该函数,即每一毫秒会触发一次该函数,所以我们使用该函数设计一秒的延时效果,这样可以在不空等一秒中的情况下执行延时操作。
int timecount = 0;
int printbit = 0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM1)//定时器1触发的该回调函数
{
timecount++;
if(timecount>= 1000)//1000次触发代表1000ms=1s
{
timecount = 0;
printbit = 1;//触发打印标志位
}
}
}
以下代码就是上图中所需添加的全局变量
extern int printbit;//打印标志位
main.c主函数的设计
将以下代码段添加到上图中的位置,注意不要填写到begin
和end
之外的地方,不然在重新去STM32CubeMX上配置生成代码时会被删除掉。
HAL_TIM_Base_Start_IT(&htim1);//启动定时器
int print4sbit = 0;//四秒标志位
if(printbit == 1)//到达一秒
{
printbit = 0;
print4sbit++;
printf("%ds\n",print4sbit);//串口打印相关秒数
if(print4sbit == 4)//到达四秒
{
HAL_TIM_Base_Stop_IT(&htim1);//关闭定时器
}
}
在写完这些代码段后,我们就可以build
我们的工程了
按照上图步骤进行执行后出现下图的样式就代表我们烧录成功这时我们就可以看一下我们的串口助手了。
以上图片的串口显示代表我们执行成功了,到此我们的定时器的应用也到此为止了,感谢各位用户的观看,如果觉得写的还可以的可以点个赞再走,我也会持续更新下去这个STM32学习笔记系列。