2178|0

6

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

【零基础学习STM32】第十二讲:通用定时器——定时点亮LED [复制链接]

本帖最后由 kkhkbb 于 2018-4-12 14:32 编辑

一、 概述
1、 TIM3简介
      iCore3使用的STM32F407IGT6芯片的具有10个通用定时器,分别为TIM2-TIM5、TIM9-TIM14,可用于定时、计数、输出PWM等。不同的定时器的计数方式、计数位数及功能有所不同,实验中使用的是TIM3,所以只对TIM3进行介绍。
2、 TIM3简介
      TIM3是一个16位递增、递减和递增/递减自动重载计数器,16 位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改),分频系数介于 1 到 65536 之间,可用于:输入捕获、 输出比较、PWM 生成(边沿和中心对齐模式)和单脉冲模式输出。在实际应用中,可以根据需要进行相应的配置,使用相应的功能。
二、硬件电路
                    图12_0 三色LED
      在iCore3双核心开发板中,三色LED与STM32F407相连,限流电阻为1K。
三、 实验原理
      实验中,通过TIM3实现500ms定时,每过500ms,LED颜色变化一次,三色LED按定时间隔交替闪烁。
四、 源代码
1.主函数

/*
* Name                : main
* Description         : ---
* Author              : ysloveivy.
*
* History
* --------------------
* Rev                 : 0.00
* Date                : 11/30/2015
*
* create.
* --------------------
*/
int main(void)
{
        //定时500ms,每隔500ms三色LED灯闪烁一次
        led.initialize();
        timer3.initialize();
        while(1){
  }
}

2.TIM3初始化代码

/*
* Name                : initialize
* Description         : ---
* Author              : ysloveivy.
*
* History
* --------------------
* Rev                 : 0.00
* Date                : 11/30/2015
*
* create.
* --------------------
*/
static int initialize(void)
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

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

        TIM_TimeBaseInitStructure.TIM_Period = 4999;                                //设置自动重载值
        TIM_TimeBaseInitStructure.TIM_Prescaler = 8399;                             //设置定时器预分频系数
        TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
//设置时钟分频因子
        TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;             //向上计数模式
        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);

        TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);                                    //使能TIM3更新中断
        TIM_Cmd(TIM3,ENABLE);                                                       //使能TIM3

        //中断优先级分组
        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);

        return 0;
}

/*
* Name                : TIM3_IRQHandler
* Description         : ---
* Author              : ysloveivy.
*
* History
* -------------------
* Rev                 : 0.00
* Date                : 30/11/2015
*
* create.
* -------------------
*/
void TIM3_IRQHandler(void)
{
        static int counter = 0;

        //定时500ms,每隔500ms三色LED灯闪烁一次
        if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)
        {
                if(counter % 3 == 0){
                        LED_RED_ON;
                        LED_BLUE_OFF;
                        LED_GREEN_OFF;
                }else if(counter % 3 == 1){
                        LED_RED_OFF;
                        LED_BLUE_ON;
                        LED_GREEN_OFF;
                }else if(counter % 3 == 2){
                        LED_RED_OFF;
                        LED_BLUE_OFF;
                        LED_GREEN_ON;
                }
                counter ++;
        }
        TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}

3.定时器初始化结构体

typedef struct
{
  uint16_t TIM_Prescaler;                                               
  uint16_t TIM_CounterMode;      
  uint32_t TIM_Period;         
  uint16_t TIM_ClockDivision;   
  uint8_t TIM_RepetitionCounter;  
} TIM_TimeBaseInitTypeDef;



   TIM_Prescaler:定时器预分频系数,0x0000- 0xFFFF。                                            
   TIM_CounterMode:计数模式,可选择向上计数 、向下计数和中央对其模式。  
   TIM_Period:定时器自动重载值,0x0000- 0xFFFF      
   TIM_ClockDivision:时钟分频因子,可选择1、2和4分频。
   TIM_RepetitionCounter:重复计数值,重复溢出相应的次数,进入中断。
五、 实验现象
       iCore3 双核心板三色LED每500ms交替闪烁。
六、 代码包下载


此内容由EEWORLD论坛网友kkhkbb原创,如需转载或用于商业用途需征得作者同意并注明出处

此帖出自stm32/stm8论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表