历史上的今天
返回首页

历史上的今天

今天是:2025年07月21日(星期一)

正在发生

2018年07月21日 | STM32定时器之控制LED灯循环显示

2018-07-21 来源:eefocus

/* 

名称:STM32定时器之控制LED灯循环显示 

说明:对于STM32来说,其定时器要比C51的定时器要多,功能也更复杂。


就数目来说来说,STM32的定时器可以分为基本定时器,通用定时器和高级定时器(还包括Systick、看门口定时器和窗口定时器)。就STM32F103,一般来说,它有2个高级定时器TIM1和TIM8、4个通用定时器TIM2/3/4/5、2个基本定时器TIM6和TIM7。而C51一般只有几个定时器。


就功能来说, 

STM32中: 

对于基本定时器,其功能就是和C51差不多,只有定时功能。 

对于通用定时器,它的功能有定时、输出比较、输入捕获。虽然目前,我也不知道后面两个功能是干啥的。 

对于高级定时器,它还比通用定时器多了个互补输出(我也不知道是什么)。 

C51中:它的定时器一般功能比较单一,最常用的就是其定时功能。


就输入的时钟源来说,C51单片机的是来自外部晶振。机器周期为晶振周期的12倍,是一个固定的数。 而STM32的输入源来自系统时钟,其可以通过预分频进行变换。


不过就本质上来说,定时器的功能就是对脉冲的计数。无论是C51还是STM32。不同的是,后者在定时器的基本功能(定时和计数)上又加了一些其他的功能,就像上面所说的输出比较,输入捕获等。


就程序来说: 本实验是用的F103C8系列单片机,它没有基本定时器,所以这里使用TIM2通用定时器来使LED灯每隔1s变换状态一次。


就使用定时器的基本步骤来说,有如下: 

1.定时器基本配置。配置其定时周期,预分频等属性。 

2.中断基本配置。 配置NVIC控制器中和定时器相关的内容。 

3.编写中断服务函数。


*/


主要代码如下:


//基本定时器模式配置

void BASIC_TIM_Config(void)

{

    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;


    //开启定时器2的时钟

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);


    //配置基本的定时器2

    TIM_TimeBaseStructure.TIM_Period = 1000;    //定时周期

    TIM_TimeBaseStructure.TIM_Prescaler = 71;       //预分频为71+1


    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

//  


    // 初始化定时器

    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);


    // 清除计数器中断标志位

    TIM_ClearFlag(TIM2, TIM_FLAG_Update);



    // 开启计数器中断

    TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);


    // 使能计数器

    TIM_Cmd(TIM2, ENABLE);


    //暂时关闭定时器2的时钟

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,DISABLE);



}




//基本定时器中断配置

void  BASIC_TIM_NVIC_Config(void)

{

    NVIC_InitTypeDef NVIC_InitStructure;


    // 设置中断组为 0

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);



    // 设置中断来源

    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn ;


    // 设置主优先级为 0

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

 // 设置抢占优先级为 3

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);

}


//通用定时器2的中断服务函数

void TIM2_IRQHandler()

{

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

    {

        ++time;


        TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);

    }

}


推荐阅读

史海拾趣

Deutron Electronics Corp公司的发展小趣事

随着环保意识的日益提高,Deutron Electronics Corp也积极响应环保号召,致力于实现绿色生产和可持续发展。公司采用环保材料和生产工艺,减少了对环境的污染。同时,公司还加大了对节能减排的投入,提高了资源利用效率。这些努力使得Deutron Electronics Corp在行业内树立了良好的环保形象,也为公司的长期发展奠定了坚实基础。

Dielectric Laboratories公司的发展小趣事

随着电子行业的不断发展,市场对电子元件的需求也在不断变化。为了适应这一变化,DLI不断调整产品战略,推出了更多符合市场需求的新产品。例如,针对商业和工业领域的需求,DLI研发了具有高性能、高可靠性特点的MLCC产品,并成功打开了市场。此外,公司还不断加大研发投入,探索新的技术领域,以保持其在行业中的领先地位。

Excel-Display Corporation公司的发展小趣事

EDC一直将产品质量视为企业的生命线。为了确保产品质量,公司建立了严格的质量管理体系,从原材料采购到生产过程中的每一个环节都进行严格的质量控制。

此外,EDC还注重售后服务,为客户提供全方位的技术支持和解决方案。这些举措让EDC赢得了客户的信赖和好评,也为公司赢得了更多的市场份额。

Frequency Sources公司的发展小趣事

面对日益严峻的环境问题和不断变化的市场需求,Frequency Sources公司积极响应国家环保政策和可持续发展战略,致力于研发绿色、环保、高效的频率源产品。同时,公司还继续加大在技术创新方面的投入力度,不断推出具有自主知识产权的新产品和新技术。这种可持续发展的理念和技术创新的精神使得公司在激烈的市场竞争中始终保持领先地位并实现了持续健康的发展。

需要注意的是,以上故事是基于电子行业的一般情况和频率源技术的特点来构建的虚构故事,并不直接对应任何具体公司的实际情况。在实际应用中,请根据具体公司的历史和发展情况进行调整和修改。

Caddock公司的发展小趣事

在追求经济效益的同时,Caddock公司也注重环保和可持续发展。公司积极推行绿色制造理念,通过优化生产工艺、降低能耗和减少废弃物排放等措施,实现了环保与经济效益的双赢。此外,公司还致力于研发环保型电阻材料和技术,为推动电子行业的绿色发展做出了积极贡献。

这些故事展示了Caddock公司在电子行业发展的不同阶段所取得的成就和面临的挑战。通过不断创新、拓展市场和注重可持续发展,Caddock公司逐渐成为了电子行业中的佼佼者。然而,这些故事仅为虚构创作,实际发展情况可能有所不同。如需了解更多关于Caddock公司的真实发展历程和故事,建议查阅相关官方资料或行业报告。

Holt Integrated Circuits公司的发展小趣事

Holt在支持ARINC 429标准方面展现出了强大的实力。其ARINC 429 IC产品系列从简单的线路接收器到集成RAM的完整协议解决方案,覆盖了业内最广泛的范围。这些产品设计精巧,能够在单个3.3V电源上运行,显著降低了系统复杂性和板空间,为航空电子系统带来了更高的效率和可靠性。Holt的这一系列创新产品,不仅满足了航空制造商的严格需求,也推动了ARINC 429标准在全球范围内的广泛应用。

问答坊 | AI 解惑

PCB 制造的过程及工艺

首先:PCB(印刷电路板)的原料是什么呢?大家知道有种东西叫\\\\\\\\\\\"玻璃纤维\\\\\\\\\\\"吧,这种材料我们在日常生活中出处可见,比如防火布、防火毡的核心就是玻璃纤维,玻璃纤维很容易和树脂相结合,我们把结构紧密、强度高的玻纤布浸入树 ...…

查看全部问答>

6410 LCD I80 接口 是不是 接 MCU 接口的LCD 屏的?

6410 LCD I80 接口 是不是 接 MCU 接口的LCD 屏的? 有谁用过 6410 LCD I80 接口?…

查看全部问答>

想请教下wince系统如何获得系统资源

得到系统的CUP和内存的使用情况等,具体用什么API,谢谢。…

查看全部问答>

rt_main函数进行vxworks实时仿真时需要注意的地方

各位: rtw编译后,仿真得出的模型.lo,在vxworks下总是找不到rt_main里面的一个函数:rt_ODEUpdateCouinousState,这是为什么啊?麻烦各位帮个忙指点一下…

查看全部问答>

PB下载镜像的问题

在PB里下载镜像的时候如果选择通过ethernet的话,那么PC机和目标机之间的通信是靠TCP/IP协议还是通过KITL?…

查看全部问答>

求助:stm32发热

                                 新做了一块板子,开始好好的,几个通讯模块都测试通过了,只是LM1117有点热(我的电源是12v通过7805变成5v,再由LM ...…

查看全部问答>

弱弱的问一句。大家在做控制类题的时候有没有用DSP的,是否具有优势呢?

本帖最后由 paulhyde 于 2014-9-15 09:03 编辑 感觉DSP很难啊 可是指导老师让我们学习这块芯片啊,真是有点茫然了,求意见啊。  …

查看全部问答>

NIOS2 SD卡 SPI操作函数

unsigned char CS_EN,DI_EN ;void delay(int i){    while(i>0)    {    i--;    }}unsigned char Write_Cmd(unsigned char *cmd,unsigned char lres){    unsigned ...…

查看全部问答>

详细讨论warnning:entry point symbol _c_int00 undefined以及entry point 的意义

打算细致的讨论一下warnning:entry point symbol _c_int00 undefined   虽然之前有很多人谈过,但大多说得不够详细。   分三点讨论。   [ 本帖最后由 hlx3012 于 2012-3-24 14:40 编辑 ]…

查看全部问答>