历史上的今天
返回首页

历史上的今天

今天是:2024年12月29日(星期日)

2021年12月29日 | STM32F103通用定时器使用

2021-12-29 来源:eefocus

  STM32F103单片机中定时器分为3种,高级定时器、通用定时器、基本定时器。


  通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作。


通用TIMx (TIM2、TIM3、TIM4和TIM5)定时器功能包括:


16位向上、向下、向上/向下自动装载计数器

16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值

4个独立通道:

输入捕获

输出比较

PWM生成(边缘或中间对齐模式)

单脉冲模式输出

使用外部信号控制定时器和定时器互连的同步电路

如下事件发生时产生中断/DMA:

更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)

触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)

输入捕获

输出比较

支持针对定位的增量(正交)编码器和霍尔传感器电路

触发输入作为外部时钟或者按周期的电流管理

  可编程通用定时器的主要部分是一个16位计数器和与其相关的自动装载寄存器。这个计数器可以向上计数、向下计数或者向上向下双向计数。此计数器时钟由预分频器分频得到。计数器、自动装载寄存器和预分频器寄存器可以由软件读写,在计数器运行时仍可以读写。


void TIMER3_Init(u16 arr, u16 psc)

{

    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

    NVIC_InitTypeDef NVIC_InitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);


    TIM_TimeBaseStructure.TIM_Period = arr;

    TIM_TimeBaseStructure.TIM_Prescaler = psc;

    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允许更新中断

    NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02;

    NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x02;

    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

    NVIC_Init(&NVIC_InitStructure);

    TIM_Cmd(TIM3,ENABLE);

}

void TIM3_IRQHandler(void)

{

if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)

{

TIM_ClearITPendingBit(TIM3,TIM_IT_Update);

LED0=!LED0;

}

}


  这里使用的是定时器3,在初始化时传递了两个参数,其中arr用来设置定时器的周期,PSC设置时钟的分频系数。默认定时器的时钟频率为72MHz,所以带入这两个参数后,定时器的周期计算公式为:

(arr+1)*(psc+1)/72MHz,设置定时器的计数模式为向上计数。这里开启了定时器的中断功能,所以还需要设置NVIC寄存器,也就是设置定时器的中断优先级。定时器初始化完成之后,还需要提供一个定时器的中断函数,当定时器定时时间到了以后,就会自动跳转到定时器中断函数中。


int main(void)

{

    u8 key = 0;

    delay_init();       //延时函数初始化

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

    LED_Init();

    KEY_Init();  

    TIMER3_Init(9,71); //50Khz  10us   

    while(1)

    {      

    }

}


  在主函数中初始化定时器,设置定时器分频数为71,默认的晶振频率为72MHz,进行71+1分频后的频率值为1Mhz,然后设置定时器的周期值为9+1,所以定时器的定时频率为1Mhz/(9+1)=100KHz,定时周期为10us。通过示波器观察LED管脚的电平,就可以看到LED管脚的电平每10us就会翻转一次。

推荐阅读

史海拾趣

科达嘉CODACA公司的发展小趣事

科达嘉电子不仅立足于深圳,还积极布局全球市场。公司通过参加国际电子展会、与国际知名企业合作等方式,不断拓展海外市场。同时,科达嘉还根据客户需求,提供个性化的电感解决方案,赢得了众多客户的信任和合作。公司的主要产品,如一体成型电感、大电流电感等,已广泛应用于工业控制、汽车电子等多个领域。

Cables To Go公司的发展小趣事

在电子行业的激烈竞争中,Cables To Go公司以其卓越的产品品质和创新精神脱颖而出。公司从成立之初就注重产品研发,不断推出符合市场需求的高品质线缆产品。通过严格把控原材料采购和制造工艺,Cables To Go确保了每一根线缆都具备出色的性能和稳定性。同时,公司还积极投入研发,推出了一系列具有创新性的线缆解决方案,满足了客户多样化的需求。

智烽维(CDA)公司的发展小趣事

随着技术的不断成熟和市场的不断拓展,智烽维在2015年开始面向全球开展业务。公司凭借卓越的产品质量和优质的服务,成功打入了国际市场,并在多个国家和地区建立了稳定的销售网络。全球业务的拓展不仅为智烽维带来了更多的商机,也进一步提升了公司的品牌影响力和市场竞争力。

APLUS Products公司的发展小趣事

APLUS Products公司始终重视品牌建设和文化传播。公司不仅注重产品的质量和性能,还积极参与各类行业展会和公益活动,提升品牌知名度和美誉度。同时,公司还通过社交媒体等渠道与消费者进行互动,传递公司的价值观和企业文化。这些举措不仅增强了消费者对品牌的认同感和忠诚度,也为公司的长期发展奠定了坚实的基础。


这些故事虽然是根据一般情况构建的,但它们反映了企业在发展过程中可能遇到的挑战和机遇,以及如何通过技术创新、市场布局、合作共赢、品牌建设和文化传播等手段来实现企业的发展目标。希望这些故事能够为您提供一些启示和参考。如果您需要更具体的信息,建议您查阅APLUS Products公司的官方网站或相关新闻报道。

迈翔科技(COILMX)公司的发展小趣事

迈翔科技(COILMX)的创始人看到了电子行业,特别是电感器市场的巨大潜力。1996年,公司正式成立,初期主要专注于SMD电感的设计、制造和销售。公司从香港起步,逐步在深圳设立工厂,引进先进的生产设备和技术,为未来的发展奠定了坚实的基础。

CLANDELL公司的发展小趣事

品质是CLANDELL公司一直以来的核心竞争力。公司建立了严格的质量管理体系,从原材料采购到产品生产的每一个环节都进行严格把控。同时,公司还加强了售后服务体系建设,确保客户在使用过程中能够得到及时、有效的支持。这些举措不仅提升了CLANDELL公司的产品品质,也赢得了客户的信任和好评。

问答坊 | AI 解惑

FPGA任意分频包括小数分频设计

本帖最后由 paulhyde 于 2014-9-15 09:23 编辑    赶快下载吧,很好的分频措施,可以做到任意整数分频,小数分频  …

查看全部问答>

急急急 大4毕业设计开题报告

基于单片机的激光警戒系统设计,如题,麻烦好新人给点借鉴~查资料实在不好查,谢谢…

查看全部问答>

测试流接口驱动的测试程序如何写啊?

怎么写测试流接口驱动的测试程序啊?就是在应用程序中如果调用流接口驱动的那几个接口函数啊? 呵呵 有个简单的例子更好。。…

查看全部问答>

求sim300网络测试软件

跪求sim300服务器端的测试软件!!!!!! 可以接受sim300的连接请求,接收gprs发送过来的数据。。。…

查看全部问答>

多线程问题

由于电脑上没有安装linux,请问以下程序的运行结果是什么?谢谢 #include #include #include #include #include pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; int lock_var; time_t end_time; int sum; void pthread1(void ...…

查看全部问答>

在Win CE下访问局域网使用密码的处理

在Win CE 5.0下,首次通过局域网访问另外一台电脑的时候会弹出一个对话框,要求输入对方的用户名、密码和域名。像下图所示的: 我想知道的是,有没有这样一个函数,提供了这几个参数的接口,以便我在写程序时就可以把用户名、密码写进去,而不需 ...…

查看全部问答>

Bootloader 的结构

    在移植之前先了解Bootloader 的一些通用概念,对理解它的代码会有所帮助。    嵌入式Linux 系统从软件的角度通常可以分为以下4 个层次。   (1)引导加载程序,包括固化在固件(firmware)中的boot 代 ...…

查看全部问答>

DIY FPGA学习板 新鲜出炉

拖了很久了,呵呵,是在不要意思   先睹为快,上图     来个3D的 …

查看全部问答>

只想用定时计数PWM功能的时候,用汇编可行吗?

对它的高速度PWM感兴趣,如果不写复杂的算法和人机界面,单纯用汇编语言可行吗?哪些开发工具最简单易用?  我的意思是既然STM32那么便宜,功能强大速度快,干脆大大小小的项目都用这个,省得好多种单片机感觉很累。…

查看全部问答>

使用XTR106的位置检测电路

工业上应用的使用XTR106(XTR104)的位置检测电路。稍加改进即可应用在其他方面用作位置检测控制。  …

查看全部问答>