STM32秒表设计【课设3/5】

引言

今天我们来写秒表的核心——定时器!

初始化时钟

首先得开时钟吧!然后得配置时钟吧!最后再将配置初始化进去吧!

我直接叫它为TIM6_Init();

让我们看看TIM6在那个时钟上吧!

OK!直接开写 :

RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM6, ENABLE)

让我们看看里面需要配置啥吧,配置的时候我们需要用到结构体的里的成员所以我们需要初始化结构体先。注意我们配置的是定时器,所以看的是STM32的TIM库。

我们使用的是TIM6定时器所以我们找关于他的结构体,我们找的这个刚好是服务于TIM6和TIM7的。 

直接写吧:

TIM_TimeBaseInitTypeDef timer;

这样子我们就可以使用它的成员函数了: 

这里面倒数第一第二的成员我们并不使用!但是在使用定时器时需要先对每一变量进行初始值的配置!!!!!!不使用但是需要有值!

配置完开始计算,配置我们需要的值:

为了可以完成0.1s的定时,我们开始计算。

72MHZ的AHB时钟频率,来一个720分频(PSC=719)

72 000 000/720=100KHZ

 所以我们的TIM6的频率为100KHZ(1S出现100 000个脉冲)

我们0.1s需要取10 000个脉冲(ARR=9999)

我们的基本定时器工作模式只有上升沿计数。

所以跟着我一起配一下吧! 

TIM_TimeBaseStructInit(&timer);
	timer.TIM_Period=9999;
	timer.TIM_Prescaler=719;
	timer.TIM_CounterMode=TIM_CounterMode_Up;

配置完接着使能TIM6,再将配置的值写入TIM6.

这下更简单了!

TIM_Cmd(TIM6, ENABLE);
	TIM_TimeBaseInit(TIM6,&timer);

 注意

我们在数数时都需要看中断标志位的情况,当我们完成一组计数,中断标志位会置一, 所以在初始化时注意将标志位先清零!

TIM_ClearFlag(TIM6, TIM_FLAG_Update); 

 定时器函数

咱们定时器需要定时器停止和定时器结束和定时器复位。所以需要构建三个!

CLK_START
CLK_STOP
CLK_RESET

 开始函数就是打开定时器TIM_Cmd(TIM6, ENABLE);

停止就是关闭定时器TIM_Cmd(TIM6, DISABLE);

复位定时器就是    {time.min=0; time.sec=0; time.sec01=0;}(分秒精度)

但是,我们并没有明确说这些变量!那该如何说明这些变量呢,我从这里获得灵感

那我也来哈! 

是不是很熟悉呢,那么我我们也把他归到timer.h文件中。

这样子我们在timer.c文件中这需要写:TimeTypeDef  time;

这样就可以直接使用了。 

优化代码

我们打开定时器需要将分秒精度的值一并改变。并且我们函数的封装并不优秀。所以:

我们先写秒表初始化函数miaobiao_Init()

miaobiao_Init()
{
TIM6_Init();
time.min=0;
time.sec;
time.sec01;
}

那么我们需要构建一个更新函数将我们的成员变量根据时间更新!

我直接叫它为miaobiao_UPDATE() 

void miaobiao_UPDATE()
{
if(TIM_GetFlagStatus(TIM6, TIM_FLAG_Update)==SET)
  {
TIM_ClearFlag(TIM6, TIM_FLAG_Update);
	time.sec01++;
	if(time.sec01>9)
	 {
	time.sec01=0;
	time.sec++;
		if(time.sec>59)
		{
		time.sec=0;
		time.min++;
			if(time.min<59)
			{
			time.min=0;
			}
			
		}
	 }

  }
}

获取标志位函数中的变量给你附上去,不需要谢我! 

 接着,秒表暂停函数

miaobiao_STOP()
{
TIM_Cmd(TIM6, DISABLE)
}

一个函数里就一句话!直接放到timer.h函数里当宏定义!

#define miaobiao_STOP()   TIM_Cmd(TIM6, DISABLE)

所以就全定义一下 

#define  miaobiao_START()    TIM_Cmd(TIM6, ENABLE)
#define  miaobiao_STOP()     TIM_Cmd(TIM6, DISABLE)
#define  maiobaio_RESET()    {time.min=0; time.sec=0; time.sec01=0;}

OK了,明天接着学吧! 

 

 

 

 

 

  • 27
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值