硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5959|回复: 5
收起左侧

[有问必答] 配置定时器中断的程序

[复制链接]

16

主题

23

回帖

16

积分

新手上路

积分
16
发表于 2015-7-28 17:45:25 | 显示全部楼层 |阅读模式
麻烦问一下,有没有配置定时器中断的程序,感谢感谢
回复

使用道具 举报

16

主题

23

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2015-7-28 18:04:10 | 显示全部楼层
TIM_TimeBaseStructure.TIM_Period = 500-1;
    TIM_TimeBaseStructure.TIM_Prescaler =8400-1;
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//ÏòÉϼÆÊýģʽ
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
回复

使用道具 举报

16

主题

23

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 2015-7-28 18:04:31 | 显示全部楼层
麻烦问一下,如何配置1ms的中断啊,新手
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107313
QQ
发表于 2015-7-29 08:25:57 | 显示全部楼层

/*-----------------------------------------------------------------------
        system_stm32f4xx.c 文件中 void SetSysClock(void) 函数对时钟的配置如下:


        HCLK = SYSCLK / 1     (AHB1Periph)
        PCLK2 = HCLK / 2      (APB2Periph)
        PCLK1 = HCLK / 4      (APB1Periph)


        因为APB1 prescaler != 1, 所以 APB1上的TIMxCLK = PCLK1 x 2 = SystemCoreClock / 2;
        因为APB2 prescaler != 1, 所以 APB2上的TIMxCLK = PCLK2 x 2 = SystemCoreClock;


        APB1 定时器有 TIM2, TIM3 ,TIM4, TIM5, TIM6, TIM7, TIM12, TIM13,TIM14
        APB2 定时器有 TIM1, TIM8 ,TIM9, TIM10, TIM11


       TIM8 更新周期是 = TIM8CLK / (TIM_Period + 1)/(TIM_Prescaler + 1)
       根据需要设置TIM_Period 和TIM_Prescaler 的参数即可
    ----------------------------------------------------------------------- */
void TIM8_MeasureConfig(void)
{
    TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
   
    /* Enable the TIM8 gloabal Interrupt */
    NVIC_InitStructure.NVIC_IRQChannel = TIM8_UP_TIM13_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    /* 开启时钟 */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);

    /* 定时器配置 */
    TIM_DeInit(TIM8);  
    TIM_BaseInitStructure.TIM_Period = 84*1024; ------------》设置参数
    TIM_BaseInitStructure.TIM_Prescaler = 0;  ------------》设置参数
    TIM_BaseInitStructure.TIM_ClockDivision = 0;
    TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM8, &TIM_BaseInitStructure);
    TIM_Cmd(TIM8, ENABLE);                                
    TIM_ITConfig(TIM8, TIM_IT_Update, ENABLE);  
}
*************************************************************************************************************************
void TIM8_UP_TIM13_IRQHandler(void)
{
   
    if (TIM_GetITStatus(TIM8, TIM_IT_Update) != RESET)
    {   
        TIM_ClearITPendingBit(TIM8, TIM_IT_Update);
    }
}
回复

使用道具 举报

14

主题

78

回帖

120

积分

初级会员

积分
120
发表于 2015-7-29 10:33:06 | 显示全部楼层

回 eric2013 的帖子

eric2013:/*-----------------------------------------------------------------------
        system_stm32f4xx.c 文件中 void SetSysClock(void) 函数对时钟的配置如下:


....... (2015-07-29 08:25)
TIM_BaseInitStructure.TIM_Period = 84*1024; ------------》设置参数
定时器的参数好象是16位的,84*1024超过了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107313
QQ
发表于 2015-7-29 14:48:46 | 显示全部楼层

回 mcza30 的帖子

mcza30:TIM_BaseInitStructure.TIM_Period = 84*1024; ------------》设置参数
定时器的参数好象是16位的,84*1024超过了。 (2015-07-29 10:33) 
我是举个例子。的确是超了[s:142]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-26 05:26 , Processed in 0.281674 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表