当前位置: 首页 > news >正文

看到一个电商网站帮做淘宝开发网站建设

看到一个电商网站帮做淘宝,开发网站建设,wordpress+dux+高亮,网站建设提供排名文章目录 1、TIM定时器1.1定时器类型1.2定时中断的基本结构 2 定时器初始化2.2 初始化定时器的步骤2.3 TIM库函数2.4 配置TIM2.4.1 Timer.c2.4.2 Timer.c2.4.3 main.c 1、TIM定时器 定时器的功能可以对输入的时钟进行计数,并在计数值达到设定值时触发中断。 他包含…

文章目录

  • 1、TIM定时器
    • 1.1定时器类型
    • 1.2定时中断的基本结构
  • 2 定时器初始化
    • 2.2 初始化定时器的步骤
    • 2.3 TIM库函数
    • 2.4 配置TIM
      • 2.4.1 Timer.c
      • 2.4.2 Timer.c
      • 2.4.3 main.c

1、TIM定时器

定时器的功能可以对输入的时钟进行计数,并在计数值达到设定值时触发中断。

  • 他包含16位计数器(CNT)、预分频器(PSC)、自动重装寄存器(ARR)的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时。
  • 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能。
  • 根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型。

计数器(CNT):用来执行计数定时的一个寄存器,每来一个时钟,计数器加1;
预分频器(PSC):对计数器的时钟进行分频,使奇数更加灵活;
自动重装寄存器(RCC):使计数值的目标值,也就是想要多少个时钟申请中断。

1.1定时器类型

在这里插入图片描述

  • STM32F103C8T6定时器资源有:TIM1、TIM2、TIM3、TIM4

基本定时器从基准时钟,到预分频器,再到计数器,计数器计数自增,同时不断地与自动重装寄存器进行比较;他们相等时,即计时时间到,这时会产生一个更新中断和中断事件,CPU响应更新中断,最后完成定时中断的任务。基本定时器仅支持向上计数这一模式。

通用定时器和高级定时器不仅支持向上计数模式,还支持向下计数模式和中央对齐模式。

STM32定时器的一大特色,就是主从触发模式DAC的功能,他能让硬件在不受程序的控制下实现自动运行。如果运用得当,在某些情景下可以极大的减轻CPU的负担。

1.2定时中断的基本结构

定时中断和内外时钟源选择所涉及的结构如下图所示:

在这里插入图片描述
PSC、CNTARR三个部分构成了时基单元;下面是运行控制,控制寄存器的一些位,比如启动停止、向上或向下计数等等,操作这些寄存器就能控制时基单元的运行了。

左边是为时基单元提供时钟的部分;右边是计时时间到,产生新更新中断后的信号去向。如果是高级定时器,在右边部分还会多一个重复计数器。

2 定时器初始化

我们通过定时中断的整个框架结构图,将图中的每个模块都打通,就能让定时器工作了。
在这里插入图片描述

2.2 初始化定时器的步骤

这里以初始化TIM2定时器为例:

1.RCC开启时钟,TM2是APB1总线的外设,所以要使用APB1的开启时钟函数;

2.选择时基单元的时钟源,对于定时中断,我们就选择内部时钟源;

3.配置时基单元,包括其中的PSC、ARR、CNT等等;

4.配置输出中断控制,允许更新中断输出到NVIC

5.配置NVIC,在NVIC中打开定时器中断的通道,并分配一个优先级;

6.运行控制,整个模块配置完成后,需要使能一下计数器;当定时器使能后,计数器就会开始计数,当计数器更新时,触发中断;最后写一个定时器的中断函数,这样这个中断函数每隔一段时间就能自动执行一次了。

2.3 TIM库函数

下面我们来介绍一部分与TIM有关的库函数:

在这里插入图片描述

1.TIM_DeInit,恢复缺省配置。

2.TIM_TimeBaseInit,时基单元初始化,有两个参数,第一个TIMx选择某个定时器,第二个是结构体,包含了配置时基单元的一些参数。

3.TIM_TimeBaseStructInit,可以把结构体赋一个默认值。

4.TIM_Cmd,使能计数器,2个参数,第一个TIMx选择定时器;第二个NewState新的状态,也就是选择使能或者失能。

5.TIM_ITConfig,用来使能输出信号,3个参数,第一个TIMx,选择定时器;第二个TIM_IT,选择配置哪个中断输出;第三个NewState,新的状态选择使能还是失能。

在这里插入图片描述

6.TIM_InternalClockConfig,选择内部时钟。

7.TIM_ITRxExternalClockConfig,选择TIMx其他定时器的时钟,第一个参数选择要配置的定时器;第二个参数选择要接入哪个其他的定时器。

8.TIM_TIxExternalClockConfig,选择TIx捕获通道的时钟,4个参数,第一个参数TIMx;第二个参数选择TIx的某个引脚;第三个参数,选择输入的极性;第四个参数,选择滤波器。

9.TIM_ETRClockMode1Config,选择ETR通过外部时钟模式1输入的时钟,4个参数,第一个参数TIMx;第二个参数外部触发预分频器,这里可以对ETR的外部时钟再提前做一个分频;第三、四个参数分别是选择极性和滤波器。

10.TIM_ETRClockMode2Config,选择ETR通过外部时钟模式2输入的时钟,参数与上面一样。

11.TIM_ETRConfig,单独用来配置ETR引脚的预分频器、极性、滤波器等参数。

总结
1、第6-11个函数,总共6个函数,对应的是时基单元的时钟选择部分,可选择RCC内部时钟、ETR外部时钟、ITRx其他定时器、ITx捕获通道等。

2、第9-10个函数,总共2个函数,对于ETR外部时钟而言,这两个函数是等效的,参数也是一样的;若不需要触发输入的功能,那么这两个函数原则上是可以互换的。

在这里插入图片描述

12.TIM_PrescalerConfig,单独写预分频的值,第二个参数就是要写入预分频的值;第三个参数是选择写入的模式。预分频器有一个缓冲器,写入的值是在更新事件发生后才有效的,所以这里有个写入模式,可以选择听从安排在更新事件生效;或是在写入后,手动产生一个更新事件,让这个值立刻生效。

13.TIM_CounterModeConfig,用来改变计数器的计数模式,第二个参数用来选择新的计数器模式。

14.TIM_ARRPreloadConfig,自动重装器预装功能配置。

在这里插入图片描述

15.TIM_SetCounter,给计数器写入一个值。

16.TIM_SetAutoreload,给自动重装器写入一个值。

在这里插入图片描述

17.uint16_t TIM_GetCounter,获取当前计数器的值,他的返回值就是当前计数器的值。

18.uint16_t TIM_GetPrescaler,获取当前预分频器的值。

在这里插入图片描述

19.FlagStatus TIM_GetFlagStatus

20.TIM_ClearFlag,主要用于清除定时器的中断标志位。

21.ITStatus TIM_GetITStatus

22.TIM_ClearITPendingBit,主要用于清除中断线路的中断挂起位。

这4个函数是用来获取标志位和清除标志位。

2.4 配置TIM

我们定一个时间,让定时器每隔一个时间产生中断,来实现每隔一个固定时间执行一段程序,如下:

2.4.1 Timer.c

#include "stm32f10x.h"               void Timer_Init(void)
{
//1.开启时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
//2.选择时基单元的时钟(定时器上电后默认就是使用内部时钟,若不调用这个函数,那也是使用的内部时钟)	TIM_InternalClockConfig(TIM2);//选择内部时钟
//3.配置时基单元TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;//选择1分频TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//选择向上计数模式//若想定时1s,定时频率=72M/(PSC+1)/(ARR+1),预分频器和计数器都有1个数的偏差,所以要-1TIM_TimeBaseInitStructure.TIM_Period=10000-1;//ARR自动重装的值TIM_TimeBaseInitStructure.TIM_Prescaler=7200-1;//预分频器的值TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;//重复计数器,是高级定时器才有的TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);TIM_ClearFlag(TIM2,TIM_FLAG_Update);//手动把更新中断标志位清除一下,避免刚初始化完就进入中断//4.使能更新中断TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
//5.配置NVIC	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//优先级分组NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;//选择定时器TIM2在NVIC里的通道NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//响应优先级NVIC_Init(&NVIC_InitStructure);
//6.启动定时器TIM_Cmd(TIM2,ENABLE);
}

2.4.2 Timer.c

#ifndef __TIMER_H_
#define __TIMER_H_void Timer_Init(void);#endif

2.4.3 main.c

#include "stm32f10x.h"  // Device header
#include "TIMER.H"uint16_t Num;
int main(void)
{OLED_Init();Timer_Init();OLED_ShowString(1,1,"Num:");while(1){OLED_ShowNum(1,5,Num,5);}
}void TIM2_IRQHandler(void)//定时器2的中断函数
{if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET)//检查中断标志位{Num++;TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除标志位}
}
http://www.tj-hxxt.cn/news/31876.html

相关文章:

  • 宣传册设计与制作图片网站优化内容
  • 做全房订制网站公司阿里巴巴官网首页
  • 上海做宴会的网站加盟培训机构
  • 商务网站的可行性分析包括在线seo外链工具
  • 大学毕业做网站插画师好吗seo 关键词优化
  • wordpress友情链接插件seo免费入门教程
  • 进货批发网站哪个好网络推广方法的分类
  • 南昌师范学院网站建设的意义和目的seo优化的网站
  • 哪个网站做浏览器主页好seo关键词优化软件手机
  • 本科学历提升百度优化是什么
  • 柳州建网站seo权重查询
  • 网站建设公司转型做什网络营销推广方案有哪些
  • 设置网站默认首页百度新闻
  • 有哪些网站可以做全景效果图泉州百度首页优化
  • 做网站用什么软件做天津seo招聘
  • 网站怎么做微信登录seo扣费系统
  • 毕设用别人网站做原型做网站的软件有哪些
  • 上海明鹏建设集团有限公司网站爱站站长工具
  • 防做电脑租赁网站五种营销工具
  • 沈阳网站推广优化公司什么公司适合做seo优化
  • 书生商友网站建设做运营的具体做什么
  • 南昌高端网站建设最近一周新闻大事摘抄
  • 51传奇网页游戏天津seo排名收费
  • wordpress建站多用户百度下载2022新版安装
  • 虎门做外贸网站永久免费自助建站平台
  • 做的网站一模一样会被告吗semiconductor
  • 武汉自媒体公司seo投放是什么意思
  • 域名备案网站源码seo广告优化
  • 欧美色影网站情感网站seo
  • 大连百姓网排名优化系统