手机tim怎么设置24小时制的时间

手机tim怎么设置24小时制的时间,第1张

tim怎么设置夜间模式

首先,打开手机TIM。

点击右下角我的。

点击右上角的设置按钮。

找到并点击通用。

打开夜间模式开关按钮,然后就可以使用TIM夜间模式了。

STM32F10XXX系列包含TIM6、TIM7两个基本定时器,计数器为16位,其功能比较简单,仅支持向上计数,且只能计时,没有外部I/O口。

一、基本定时器的功能框图

1、时钟源TIMxCLK:定时器的时钟源来自系统内部时钟,准确来说由APB1预分频器分频提供,因为TIM6、7都是挂载在APB1上的外设。如果APB1的预分频系数等于1,则频率不变,其他情况,频率乘以2,库函数中APB1的分频系数为2,故定时器的时钟TIMxCLK=36*2=72MHz。

2、计数器时钟CK_CNT:CK_PSC可看成直接由CK_INT经触发控制器引入,PSC预分频器为16位寄存器,可对TIMxCLK进行1~65536分频,计算公式为:CK_CNT=TIMxCLK/(PSC+1)。

3、计数器CNT:计数器CNT为16位寄存器,只能向上计数,最大值为65535,当计数器有0加到65535并溢出时,可以产生一个更新中断/更新事件。

4、自动重装寄存器ARR:16位寄存器,里面的数值为计数器能达到的最大数值。

5、产生一次中断的时间计算:time=(ARR+1)/(TIMxCLK/(PSC+1))

在实际中,预分频器起分频作用的是其影子寄存器或称为缓冲器。由下图的时序图可见:

ARR的值为FC-1,最开始预分频控制寄存器的值为0,此时预分频系数为1,即计数器时钟为72MHz。当计数器计数到F8时,我们将预分频控制寄存器的值写为1,此时,预分频器缓冲寄存器的值并没有立即更新为1,定时器的时钟依然为72MHz,计数器计数到FC,产生一个更新事件后,才将预分频器缓冲器的值更新为1,此时定时器的时钟变为原来的一半,即36MHz,保证了计数的准确性。

二、时基单元

typedef struct

{

uint16_t TIM_Prescaler/*!<Specifies the prescaler value used to divide the TIM clock.

This parameter can be a number between 0x0000 and 0xFFFF */

uint16_t TIM_CounterMode /*!<Specifies the counter mode.

This parameter can be a value of @ref TIM_Counter_Mode */

uint16_t TIM_Period /*!<Specifies the period value to be loaded into the active

Auto-Reload Register at the next update event.

This parameter must be a number between 0x0000 and 0xFFFF. */

uint16_t TIM_ClockDivision/*!<Specifies the clock division.

This parameter can be a value of @ref TIM_Clock_Division_CKD */

uint8_t TIM_RepetitionCounter /*!<Specifies the repetition counter value. Each time the RCR downcounter

reaches zero, an update event is generated and counting restarts

from the RCR value (N).

This means in PWM mode that (N+1) corresponds to:

- the number of PWM periods in edge-aligned mode

- the number of half PWM period in center-aligned mode

This parameter must be a number between 0x00 and 0xFF.

@note This parameter is valid only for TIM1 and TIM8. */

} TIM_TimeBaseInitTypeDef

1、TIM_Prescaler:定时器预分频器设置

2 、TIM_CounterMode:计数器有向上计数、向下计数、中心对齐计数3中模式,基本定时器仅支持向上计算,这里不用设置

3、TIM_Period:定时器周期,实际就是设置自动重装寄存器ARR的值

4 、TIM_ClockDivision:时钟分频,设置定时器时钟CK_INT频率与数字滤波器采样时钟频率的分频比,基本定时器不用设置

5 、TIM_RepetitionCounter:重复计数器,属于高级定时器的功能,不用设置

三、代码

使用定时器实现1S定时,因为STM32F103C8T6只有TIM1、TIM2、TIM3、TIM4这几个定时器,这里使用TIM2代替TIM6。

Timer.c文件

#include "stm32f10x.h" // Device header

void Timer_Init(void)

{

//第一步:开启APB1上的TIM2外设时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE)

//第二步:时钟源选择内部时钟

TIM_InternalClockConfig(TIM2)

//第三步:初始化TIM2时基单元

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure

TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1

TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up

TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1

TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1

TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure)

//第四步:手动清除计数器中断标志位

TIM_ClearFlag(TIM2, TIM_FLAG_Update)

//第五步:开启计数器中断

TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE)

//第六步:配置NVIC

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2)

NVIC_InitTypeDef NVIC_InitStructure

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1

NVIC_Init(&NVIC_InitStructure)

//第七步:计数器使能

TIM_Cmd(TIM2, ENABLE)

}

main.c文件

#include "stm32f10x.h" // Device header

#include "Delay.h"

#include "OLED.h"

#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)

}

}

/*TIM2中断处理程序*/

void TIM2_IRQHandler(void)

{

if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)

{

Num ++

TIM_ClearITPendingBit(TIM2, TIM_IT_Update)

}

}

这个时间是由寄存器DM1给定的,是一个变量。你需要在程序里面查找DM1的赋值命令,看看是把谁的值传给了DM1。如果是运算后的值,你就修改运算项。如果是从别的寄存器来的,你就改变相应的值。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8041774.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存