历史上的今天
返回首页

历史上的今天

今天是:2025年01月15日(星期三)

正在发生

2019年01月15日 | STM32定时器原理与使用

2019-01-15 来源:eefocus

1.定义


设置等待时间,到达等待时间之后执行指定的硬件操作。


定时器最基本的功能就是定时,比如说定时发送串口数据,定时采集AD数据,也可以产生PWM方波等,定时器产生PWM控制电机状态是工业控制的普通。


-----------------------------------------------------------------------------------------------------------------------------------------------------------


2、STM32F4xx系列的芯片:2个高级控制定时器(TIM1和TIM8)、10个通用定时器(10TIM2-TIM5,TIM9-TIM14)、2个基本定时器(TIM6和TIM7)、2个看门狗定时器


具体可参考中文参考手册了解其特性及原理



-----------------------------------------------------------------------------------------------------------------------------------------------------------


3、定时器计数模式:


通用定时器可以向上计数、向下计数、向上向下双向计数模式。


①向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。


②向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。


③中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。


如图:



-----------------------------------------------------------------------------------------------------------------------------------------------------------


4、通用定时器工作原理:


● 计数器寄存器 (TIMx_CNT)


● 预分频器寄存器 (TIMx_PSC)


● 自动重载寄存器 (TIMx_ARR)


假如是向上增长模式,计数器(CNT)从0加到自动重载值(ARR),预分频器(PSC)减一次。


时间计算方式:


假设频率为:42M*2 == 84M == 84000000 == 1s //42根据定时器时钟数可知 并且一般都是*2


定时器定时1s产生中断:


ARR = 84000; // 1ms


PSC = 1000; // 1000*1ms == 1s


 


如图:可知基本定时器的时钟是42M,那么对应*2就是84M=84000000=1S(ARR*PSC)


       高级的既是84*2=96M=96000000=1S




-----------------------------------------------------------------------------------------------------------------------------------------------------------


5、定时器中断实现步骤 


//5.1、能定时器时钟。

    RCC_APB1PeriphClockCmd();

 

//5.2、初始化定时器,配置ARR,PSC。(申明结构体)

    TIM_TimeBaseInit();

 

  typedef struct

  {

    uint16_t TIM_Prescaler;

    uint16_t TIM_CounterMode;

    uint16_t TIM_Period;

    uint16_t TIM_ClockDivision;

    uint8_t TIM_RepetitionCounter;

  } TIM_TimeBaseInitTypeDef;

 

 

 

//5.3、启定时器中断,配置NVIC(申明结构体)

    NVIC_Init();

 

    进行NVIC中断配置

 

    NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //定时器 3 中断

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //抢占优先级 1

    NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //响应优先级 3

    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

    NVIC_Init(&NVIC_InitStructure);// ④初始化 NVIC

    TIM_Cmd(TIM3,ENABLE); //⑤使能定时器 3

 

//5.4、设置 TIM3_DIER 允许更新中断

    TIM_ITConfig();

 

//5.5、使能定时器。

    TIM_Cmd();

 

//5.6、编写中断服务函数。

    TIMx_IRQHandler();

 

//定时器 3 中断服务函数

void TIM3_IRQHandler(void)

{

    if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断

    {

        /*处理的程序段*/

    }

 

    TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志位

}

 

TIM3_Int_Init(5000-1,8400-1); //定时器时钟84M,分频系数8400,所以84M/8400=10Khz的计数频率,计数5000次为500ms

 

void TIM3_Int_Init(u16 arr,u16 psc)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;

NVIC_InitTypeDef NVIC_InitStructure;


RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);  ///使能TIM3时钟


    TIM_TimeBaseInitStructure.TIM_Period = arr; //自动重装载值

TIM_TimeBaseInitStructure.TIM_Prescaler=psc;  //定时器分频

TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式

TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; 


TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化TIM3


TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允许定时器3更新中断

TIM_Cmd(TIM3,ENABLE); //使能定时器3


NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //定时器3中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //抢占优先级1

NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //子优先级3

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_InitStructure);


}

 

//定时器3中断服务函数

void TIM3_IRQHandler(void)

{

if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断

{

LED1=!LED1;//DS1翻转

}

TIM_ClearITPendingBit(TIM3,TIM_IT_Update);  //清除中断标志位

}

--------------------------------------------------------------------------END--------------------------------------------------------------------------------


推荐阅读

史海拾趣

C&H Technology公司的发展小趣事

C&H Technology成立于2005年,由两位志同道合的电子工程师陈先生和何先生共同创立。两位创始人凭借在半导体领域的深厚技术积累,瞄准了当时正在兴起的智能手机市场,决定开发一款高性能、低功耗的手机芯片。他们租下一间小办公室,招募了几名志同道合的工程师,开始了艰苦的创业之旅。

起初,公司面临资金短缺、技术瓶颈和市场认可度低等重重困难。但陈先生和何先生凭借坚定的信念和不懈的努力,逐步攻克技术难题,与供应商建立了稳定的合作关系,并通过参加行业展会等方式,逐渐提高了品牌知名度。经过几年的努力,C&H Technology成功推出了首款手机芯片,并获得了市场的认可。

Alan Industries Inc公司的发展小趣事

为了进一步提升竞争力,Alan Industries Inc.积极寻求与其他企业的战略合作。公司与多家知名供应商建立了长期稳定的合作关系,确保了原材料的稳定供应和成本控制。同时,公司还通过并购和投资等方式,整合了产业链上下游资源,形成了完整的产业生态圈。这些战略举措使得公司在市场竞争中更具优势,实现了快速发展。

冠西电子(COSMO)公司的发展小趣事

冠西电子(COSMO)公司成立于1981年,起初便专注于光电元件产品的制造。公司创始人凭借对电子技术的深刻理解和市场需求的敏锐洞察,逐步将冠西电子打造成光电元件领域的专业制造商。通过不断的技术创新和产品质量提升,冠西电子逐渐在电子行业中崭露头角。

Friedrich Lütze GmbH公司的发展小趣事

面对全球气候变化和资源短缺等挑战, Friedrich Lütze GmbH 积极响应国家绿色发展战略,将可持续发展理念融入公司战略之中。公司致力于研发和生产环保型电子产品,如低能耗控制元件、可再生能源发电系统等,为客户提供更加绿色、低碳的解决方案。同时,公司加强内部管理,推行节能减排措施,努力实现经济效益与环境保护的双赢。这些努力不仅提升了公司的社会形象,也为行业的绿色转型树立了典范。

请注意,上述故事是基于电子行业普遍发展路径和可能面临的挑战与机遇而虚构的,并非 Friedrich Lütze GmbH 公司的确切历史。如需了解该公司具体的发展故事,建议直接访问其官方网站或查阅相关新闻报道。

Gemmy Electronics Co Ltd公司的发展小趣事
经过整流滤波后的低压直流电会进一步被升压电路提升为高压(可能达到几百至上千伏特),并存储在电容器中。
Clever Little Box公司的发展小趣事

随着公司的发展,Clever Little Box逐渐意识到,单一的产品线无法满足市场的多样化需求。于是,公司开始积极拓展产品线,不仅涵盖了脉冲发生器、转换器等核心产品,还增加了音频/视频电缆组件等辅助产品。同时,公司注重创新,不断研发新技术、新产品,以满足市场的不断变化和客户的个性化需求。

问答坊 | AI 解惑

我用内嵌TCP/IP协议的GPRS模块进行数据传输,其它命令都是正确的回复,但是最后一个上网的命令不正确

大家好,希望能帮帮我。我用西门子公司的MC55进行GPRS中的TCP/IP数据传输,用51单片机控制,现在TCP/IP设置的命令都回复的OK,但是最后一条连网命令不正确,经查证发现连网的命令是发送正确的,就是连不上网,是怎么回事啊?…

查看全部问答>

DS18B20 初始化失败 纠结中

为了单独测试这个DS18B20的初始化,弄了个最小化的电路如下: DS18B20接P1.7,LED接P1.0 如果初始化成功,则LED应该点亮. 程序: #include sbit DQ = P1^7; sbit LED = P1^0; void delay2us(unsigned char t) {      whil ...…

查看全部问答>

说说大家WCE的产品

交流下大家的Windows CE产品,看看目前市场上用到的Windows CE产品有哪些? 注:标明Windows CE版本号、产品名及简要介绍、工资。 先说我自己的: Windows CE 5.0、Windows CE 6.0 终端——类似电脑,主要用户行业的窗口柜台(如银行、邮政 ...…

查看全部问答>

USB摄像头 OV511+OV7620,采集图像不清晰问题

环境:WINCE ARM11 设备:网眼V2000, OV511+USB摄像头 资源:参考网上的WINCE_OV511,带驱动+上位机+PPT讲解的那个 测试结果:YUV420->RGB图像如下。 请了解或者做过的朋友指点下,为什么图像不清晰,而且是花的。谢谢! …

查看全部问答>

WINCE触摸屏右键无法出现

我的屏幕的分辨率为800*480.那么对应的屏幕坐标为(3200,1920)?。。我现在出现的问题是,平常的操作基本正常,但是无法出现右键,AYGSHELL组件也已经选了。是不是抖动问题?但是我在DdsiTouchPanelGetPoint中保存第一次按下时的坐标,在弹起之前 ...…

查看全部问答>

cortex-m0社区热闹程度大减!

关于M0的讨论不是很热闹呀! 发帖顶一下!…

查看全部问答>

2011大赛B题基于自由摆的平板控制系统 单摆 参考论文

本帖最后由 paulhyde 于 2014-9-15 03:37 编辑 今年大赛做B题基于自由摆的平板控制系统的参赛者有时间可以而看看,这个论文感觉就是我们试题B的出处!由于文件太大。。采用分卷压缩的!将3个附件同时下载下来即可解压!    …

查看全部问答>

几条VBA编程语句!

在excel中,常用的几条编程语句. ActiveSheet.Range(\"A:A\").ColumnWidth = 6 \'将列A的宽度设置为6ActiveSheet.Range(\"C:H\").ColumnWidth = 13\'将列C-H的宽度设置为13ActiveSheet.Range(\"1:3\").RowHeight = 30  \'将第1-3行的行高设置 ...…

查看全部问答>

两个STM32 通信问题

各位STM32高手,解决一下SPI通信问题,我发的数据是0x44.结果收到的数据是0x11,0x22,0x33,0x44,估计是时钟极性和时钟相位的问题,求个解决!!!…

查看全部问答>