历史上的今天
返回首页

历史上的今天

今天是:2025年08月14日(星期四)

正在发生

2018年08月14日 | STM32F103ZET6 — TIM6/TIM7

2018-08-14 来源:eefocus

介绍

STM32F103ZET6 定时器资源非常丰富,根据 datasheet 描述,涵盖如下几种类型:


  • 高级定时器 TIM1 / TIM8

  • 通用定时器 TIM2 / TIM3 / TIM4 / TIM5 

  • 基本定时器 TIM6/ TIM7

本次描述的重点是基本定时器 TIM6/ TIM7

基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。它们可以作为通用定时器提供时间基准,特别地可以为数模转换器(DAC)提供时钟。实际上,它们在芯片内部直接连接到DAC并通过触发输出直接驱动DAC。这2个定时器是互相独立的,不共享任何资源。


时钟

可以看到来自 APB1 的低频时钟经过频率x2供给了 TIM2~TIM7,其中包含了 TIM6/ TIM7,所以供给此部分的时钟为 72MHz

在 TIM6 / TIM7 中存在一个预分频器,支持输入的时钟进行预分频,计数器使用预分频后的时钟进行计数:


预分频的参数配置支持 1~65536


模式

TIM6 / TIM7 支持基本的循环计数,计数方式是从小到大。并且可以支持在任何时间内进行预分频系数的配置,配置在下一个UEV产生后生效。(UEV指的是一个更新时间,即一次计数溢出,当然,也可以支持软件进行主动触发)


可以支持 auto reload 和 one shot 的模式,即计数器完成一次计数之后,是自动重载之前的值,继续计数,还是完成一次计数任务后,停止计数。通过配置 TIMx_CR1 的 OPM单脉冲模式 (One-pulse mode) 来选择:



中断

可以通过配置中断,来达到计数器上溢出时刻产生对应的中断


配置过程

1. 打开 TIM6 / TIM7 的时钟

2. 配置中断优先级 NVIC 并使能中断

3. 配置分频系数和计数器的达到溢出的上限数值

4. 启用自动重装载预装载

5. 选择auto reload模式

6. 选择更新源(全开)

7. 开启溢出中断

8. 使能定时器


代码

初始化部分

这里 72MHz 的时钟输入,预分频为 7200(7200 - 1,这里是 datasheet中描述的预分频计算方法),计数为10000次溢出,故产生的是 1s 的定时器:

#define TIM6_CNT    (10000 - 1)

#define TIM6_PSC    (7200 - 1)

static SK_TIM6_NVICConifg(void)

{

    NVIC_InitTypeDef NVIC_InitStructure;

 

 

    /* PE5/PE6 */

    NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);

}

 

void SK_TIM6_Init(void)

{   

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

 

    SK_TIM6_NVICConifg();

 

    /// Step 1 : Open TIM6&TIM7 Clock

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);

 

    /// Step 2 : Set basic settings

    // Input CLOCK = 72MHz

    TIM_TimeBaseStructure.TIM_Period = TIM6_CNT;

    TIM_TimeBaseStructure.TIM_Prescaler = TIM6_PSC;

    TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);

 

    TIM_ARRPreloadConfig(TIM6, ENABLE);

 

    TIM_SelectOnePulseMode(TIM6, TIM_OPMode_Repetitive);

 

    TIM_UpdateRequestConfig(TIM6, TIM_UpdateSource_Global);

 

    TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);

 

    TIM_Cmd(TIM6, ENABLE);

}


中断处理部分


void TIM6_IRQHandler(void)

{

    static uint8_t cnt = 0;

    if (TIM_GetITStatus(TIM6, TIM_IT_Update))

    {

        TIM_ClearITPendingBit(TIM6, TIM_IT_Update);

        if (!cnt)

        {

            SK_SetLedStatus(SK_LED_1, SK_LED_ON);

            cnt++;

        }

        else

        {

            SK_SetLedStatus(SK_LED_1, SK_LED_OFF);

            cnt--;

        }

    }

}


推荐阅读

史海拾趣

Display Elektronik GmbH公司的发展小趣事

随着环保意识的日益增强,Display Elektronik GmbH将绿色环保理念融入到了公司的发展中。公司采用环保材料和生产工艺,减少了对环境的污染。同时,Display Elektronik GmbH还积极推广绿色显示技术,为客户提供更加环保、节能的显示解决方案。这种对环保的关注和投入,让Display Elektronik GmbH在行业中树立了良好的形象。

EUPEC [eupec GmbH]公司的发展小趣事

EUPEC,全称欧洲电力半导体与电子公司(European Semiconductors and Electronics Company),成立于1990年。它是由西门子和德国另一家大型电器公司AEG生产电力半导体器件的两个部门合并而成。这次合并标志着EUPEC正式进入电力半导体领域,凭借其强大的技术背景和丰富的行业经验,EUPEC迅速在市场中占据了一席之地。

ERA Transformers公司的发展小趣事

在电子行业中,ERA Transformers公司以其开创性的技术而闻名。该公司专注于研发和生产高效的电子变压器,以满足不断增长的电子设备需求。在一次研发过程中,公司工程师们面临了一个重大挑战:如何提高变压器的能效和稳定性。经过数月的深入研究与反复试验,他们终于开发出了一种新型的高效能变压器,该变压器采用了先进的材料和独特的设计,显著提高了能效和稳定性,这一创新技术的突破使得ERA Transformers公司在电子行业中崭露头角。

GE (General Electric)公司的发展小趣事
首先确认电源是否正常接入,电源电压是否符合要求。
Anderson Electronics Inc公司的发展小趣事

随着公司规模的扩大和产品线的丰富,Anderson Electronics Inc公司开始积极拓展市场。公司通过与各大电子产品零售商建立合作关系,将产品销往全国各地。同时,公司还加大了品牌宣传力度,通过广告、展会等多种渠道提升品牌知名度和影响力。在市场拓展的过程中,公司始终坚持质量第一的原则,以优质的产品和服务赢得了客户的信赖和支持。

Dowosemi公司的发展小趣事

在电子保护器件领域,Dowosemi公司以其创新的TVS二极管技术崭露头角。该公司研发团队经过数年的努力,成功开发出具有PS级响应速度、大瞬态功率和低漏电流的TVS二极管。这一技术突破大大提高了产品的性能,满足了市场对高效能过电压保护元件的需求。Dowosemi公司凭借这一优势,迅速在市场上确立了领先地位。

问答坊 | AI 解惑

发个字符移动的程序(ZT)

本帖最后由 paulhyde 于 2014-9-15 09:38 编辑 前几天在公交站牌上看到那个led屏上字符移动的效果,看了之后回来想玩玩,就做了这个,发上来分享一下!!  …

查看全部问答>

请问无盘工作站是两个系统吗?

请问无盘工作站是两个系统吗?为什么有的是一个呢?它们有什么区别啊?》…

查看全部问答>

ADS下全局变量赋值无效的问题

我用ADS1.2+JTAG调试程序的时候,定义的全局变量在赋值的时候赋不进去。当在初始化汇编代码init.s中加入存储寄存器初始化的代码,就可以赋值进去,这是什么原因呢 ? 加入的存储寄存器初始化代码如下: SMRDATA DATA ; Memory configuration sho ...…

查看全部问答>

如何将笔记本usb口虚拟成串口

本人想进行串口编程,但笔记本上只有usb口,故想将其虚拟成串口,但不知怎么做。希望个位帮帮忙,给分绝不吝惜!!!…

查看全部问答>

问一下关于wm5.0SDK的axsample例子的问题

我将axsample在WM5模拟器上可以显示,为何连上手机却显示不了控件(我已经按照说明将证书加到了手机上)?请大虾们帮帮忙。…

查看全部问答>

请教S7-300打开问题

请教个问题,小弟的公司有一台设备A是西门子300的,安装s7后打不开,后来按照厂家的意思安装了s7的升级包(就是sp4),然后就可以看到。第二天因需要小弟装了s7-200的软件并用了一个上午,然后再打开300的时候设备A就看不到了,只能看到硬件组态。 ...…

查看全部问答>

M2M-DMA的问题

  DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)SRC_Buffer;  DMA_InitStructure.DMA_MemoryBaseAddr = (u32)DST_Buffer;采用M2M模式,在本地RAM测试通过。即SRC_Buffer[x]={};  DST_ ...…

查看全部问答>

【转帖】MSP430是很有前途的单片机--转自老古论坛

对于ti推出的msp430低功耗的16位单片机,评论很多。在这个时候推出16位的单片机,是否能够占领市场? 我们知道8位单片机在中国是处于龙头地位的。要动摇51单片机的地位,确实在中国有一定的困难。在中国,特别要考虑的是中国的国情。 比 ...…

查看全部问答>

我是新手帮帮忙

本人硕士毕业设计是嵌入式的硬件设计 先要做出来PCB  我是跨专业来的  对这些一知半解的   刚刚进来 不知道从哪里开始下手 望大家指点迷津。。。不甚感谢啦。。。…

查看全部问答>