首页 > 其他分享 >STM32秒表设计【课设3/5】

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

时间:2024-07-04 13:27:09浏览次数:16  
标签:定时器 TIM6 课设 miaobiao timer STM32 TIM time 秒表

引言

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

初始化时钟

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

我直接叫它为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了,明天接着学吧! 

 

 

 

 

 

标签:定时器,TIM6,课设,miaobiao,timer,STM32,TIM,time,秒表
From: https://blog.csdn.net/2301_76726104/article/details/140164994

相关文章

  • Why do STM32 initialization peripherals need to turn on the clock first?
    为什么Stm32初始化外设都需要先打开时钟理由一由于STM32属于低功耗的MCU,为了降低功耗,STM32的MCU在复位后会把绝大多数的外设时钟关闭,所以当用户需要使用到MCU内部的某个外设,就必须先开启定时器。理由二我们知道想要控制硬件,必须控制硬件的寄存器。然而在数字电路中,寄存器的作......
  • STM32-PWM配置流程及作用
    STM32F407ZET6单片机配置PWM(脉冲宽度调制)PWM配置流程STM32F407ZET6单片机配置PWM的流程通常包括以下几个步骤:时钟使能:首先,需要使能定时器和相关IO口的时钟。这通常通过调用RCC(ResetandClockControl)相关的函数来实现,比如RCC_APB1PeriphClockCmd()用于使能APB1总线上的定时......
  • FreeRTOS移植到STM32
    本内容主要是讲解关于如果把FreeRTOS移植到STM32中去的操作。明白各部分的作用以及打通思路,具体操作按照下列进行相应的操作。第一:早一个STM32的裸机程序我们这里用的是STM32F103的芯片为例。 二、去官网上下载FreeRTOSV9.0.0源码在移植之前,我们首先要获取到......
  • 【坚果识别】果实识别+图像识别系统+Python+计算机课设+人工智能课设+卷积算法
    一、介绍坚果识别系统,使用Python语言进行开发,通过TensorFlow搭建卷积神经网络算法模型,对10种坚果果实('杏仁','巴西坚果','腰果','椰子','榛子','夏威夷果','山核桃','松子','开心果','核桃')等图片数据集进行训练,得到一个识别精度较高的模型文件,让后......
  • STM32F407如何点亮一个呼吸灯(库函数)
    /*********************************************************************************@filemain.c*@author*@version*@date2024/07/03*@brief实现利用基本定时器TIM14实现定时10ms,每隔10ms从灭到亮逐渐变亮,再隔10ms从 亮到......
  • STM32基本定时器、通用定时器、高级定时器区别
    一.STM32基本定时器、通用定时器、高级定时器区别STM32系列微控制器中的定时器资源分为基本定时器(BasicTimer)、通用定时器(GeneralPurposeTimer)和高级定时器(AdvancedTimer)三类,它们在功能和复杂性上有所不同。以下是这三类定时器的详细区别:1.基本定时器(BasicTimer)功能特......
  • stm32学习笔记---USART串口外设(代码部分)串口发送/串口发送+接收
    目录第一个代码:串口发送初始化串口的步骤USART的库函数三个初始化函数USART_ClockInit和USART_ClockStructInitUSART_Cmd和USART_ITConfigUSART_DMACmdUSART_SendData和USART_ReceiveData四个标志位相关的函数代码实现Serial.c第一步,开启时钟第二步,GPIO初始化第......
  • stm32学习笔记---USART串口数据包(理论部分)
    目录Hex数据包第一种是固定包长,含包头包尾第二种是可变包长,含包头包尾收发过程中的问题第一个问题就是包头包尾和数据载荷重复的问题第一种方法,限制载荷数据的范围第二种方法,如果无法避免载荷数据和包头包尾重复,就尽量使用固定长度的数据包第三种方法,就是增加包头包尾......
  • STM32远程烧录程序
    目录简介该篇将会从零基础开始像读者讲解怎么使用远程的方法来烧录STM32程序。我这里用的是ESP8266和STM32F407ZGT6,当然,使用其他32的芯片也是可以的,核心都是一样的。不同的程序下载方式目前,单片机的程序烧录方式可以分为三种:ICP,ISP,IAP。ICP:In-CircuitProgramming在电......
  • 简单课设:基于TCP协议的客户/服务器聊天室
            随着计算机的普及,网络编程也显得愈发重要,同时掌握实现客户/服务器程序的编写方法也不可忽视。通过学习,我们将了解TCP协议在网络通信中的重要性,掌握如何使用在Linux或Windows平台上编写简单的TCP客户/服务器程序。课程设计分为两个部分:服务器端和客户端。在服务......