完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
时钟周期:时钟周期T是时序中最小的时间单位,计算方式是1/时钟频率,STC51单片机使用的晶振是11.0592M,这样时钟周期=1。
机器周期:单片机完成一个操作的最短时间。机器周期主要是针对汇编语言而言,在汇编语言下程序的每条语句执行所使用的时间都是机器周期的整数倍,而且语句占用的时间是可以计算的,但在C语言下的一条时间是不确定的,受诸多因素的影响。在51单片机下1,一个机器周期是12个时钟周期,也就是12/11059200。 定时器和计数器是单片机内部的通弄一个模块,通关配置SFR(特殊功能寄存器)可以实现两种不同的功能。 定时器:是单片机内部用来定时的工具,定时器内部有一个寄存器,我们让它开始计数,这个寄存器每经过一个机器周期就会自动加1,就像我们的秒表每经过一秒自动加1,钟表是60秒会自动归0,在单片机中,我们使用的是一个数据类型,这个数据当超过最大值时,这种我们称之为溢出。假如是16位定时器,也就是2个字节,最大值是2的16次方就是65535,当加到65535后再加1就会溢出变成0。所以定时器的含义就是从某一个初始值开始经过确定的时间后溢出,这个过程就是定时器的含义。 定时器的寄存器: 存储定时器的计数值:记录对应寄存器的当期计数值,为了判断什么时间溢出复位。 定时器控制寄存器TCON:控制定时器的相应功能,例如:溢出标志、运行控制和中断部分。 对于TCON这个SFR,以定时器1为例,TF1是一个标志位,告诉我们定时器是否溢出;TR1是定时器控制位,当TR1=1以后,定时器会每经过一个机器周期自动加1,TR0 = 0,倒计时就会停止加1; 定时器模式寄存器位分配TMOD: 所以我们在做一个定时器的程序(51单片机) 1、设置特殊功能寄存器TMOD,配置好工作模式。 2、设置计数寄存器TH0和TL0的初值 3、设置TCON,通过TR0置1来让定时器开始计数 4、判断TCON寄存器的TF0位,监测定时器溢出情况。 STM32定时器按照功能可以分成很多类 高级定时器:TIM1和TIM8 通过定时器:TIM2-TIM5 基本定时器:TIM6和TIM7 看门狗定时器 SysTick定时器 STM32通用定时器主要是由可编程预分频器(PSC)驱动和16位自动装载寄存器(CNT)构成。 可实现的功能: 1、16位向上、向下、向上/向下自动装载计数器 2、16位可编程(可实时修改)预分频器,计数器时钟频率的分频系数为1-65536构成 3、4个独立通道(TIMx_CH1-4),这些通道可以用来作为:输入捕获、输出捕获、PWM生成(边缘或中间对齐模式)或单脉冲模式输出 4、可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用一个定时器控制另一个定时器)的同步电路。 5、可产生相应事件的中断/DMA 6、计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) 7、触发事件:(计数器启动、停止、初始化或由内部/外部触发计数) 定时器初始化 1、设置预分频值 2、设置计数模式 3、设置定时周期(自动装载的值) 4、设置时钟分频因子 5、使能定时器 PS:此外在时钟配置中需要配置定时器时钟 /* 使能APB1时钟 */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3); /**TIMER初始化**/ void TIMER_Initializes(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; /* TIM3时基单元配置 */ TIM_TimeBaseStructure.TIM_Prescaler = TIM3_PRESCALER_VALUE; //预分频值 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式 TIM_TimeBaseStructure.TIM_Period = TIM3_PERIOD_TIMING; //定时周期(自动从装载寄存器ARR的值) TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //时钟分频因子 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /* 使能预分频值 */ TIM_ARRPreloadConfig(TIM3, ENABLE); //使能重载值TIM3_PRESCALER_VALUE TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //使能 TIM3 更新中断 } 定时器中断一般随着定时器的使用而使用。 void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; /* 优先级分组 */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* 外设中断 */ NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } PS:配置外设一般这三个方面是必不可少的 时钟配置 IO配置 中断配置 |
|
|
|
只有小组成员才能发言,加入小组>>
2557 浏览 0 评论
1156浏览 2评论
759浏览 1评论
512浏览 0评论
271浏览 0评论
447浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 00:49 , Processed in 1.303223 second(s), Total 78, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号