kkhkbb 发表于 2018-4-11 11:44

【零基础学习STM32】第十二讲:通用定时器——定时点亮LED

本帖最后由 kkhkbb 于 2018-4-11 11:45 编辑

一、 概述1、 TIM3简介      iCore3使用的STM32F407IGT6芯片的具有10个通用定时器,分别为TIM2-TIM5、TIM9-TIM14,可用于定时、计数、输出PWM等。不同的定时器的计数方式、计数位数及功能有所不同,实验中使用的是TIM3,所以只对TIM3进行介绍。2、 TIM3简介      TIM3是一个16位递增、递减和递增/递减自动重载计数器,16 位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改),分频系数介于 1 到 65536 之间,可用于:输入捕获、 输出比较、PWM 生成(边沿和中心对齐模式)和单脉冲模式输出。在实际应用中,可以根据需要进行相应的配置,使用相应的功能。二、硬件电路http://www.stmcu.org/module/forum/data/attachment/forum/201804/11/111124u4y9222y0os8y0o7.png                  图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);                                                       //使能TIM33.定时器初始化结构体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交替闪烁。六、 代码包下载
      网盘:http://pan.baidu.com/s/1kTWAAJ9






hwh132 发表于 2018-4-11 14:09

谢谢分享!!!

xyz549040622 发表于 2018-4-11 20:26

现在都用HAL库啦,开发板也要跟上潮流
页: [1]
查看完整版本: 【零基础学习STM32】第十二讲:通用定时器——定时点亮LED