打印
[STM32F4]

stm32f407基本定时器7应用

[复制链接]
1948|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhouyanggx|  楼主 | 2014-5-8 16:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm32f407基本定时器7配置不知道有什么问题,向大神们请教
void TIM7_init(void)
{
  TIM7->PSC    = 41;         //42分频 1M
        TIM7->ARR    =1000;        //定时1ms
        TIM7->CNT    = 0;            //
  TIM7->CR1   |= (1<<7);       //
  TIM7->DIER  |= 1;            //
        NVIC->IP[55] = 0x80;         //
  NVIC->ISER[1] |= (1<<23);    //开中断
        TIM7->CR1    |= 1;           //
}
沙发
mmuuss586| | 2014-5-8 19:19 | 只看该作者
你这也太简单了吧

使用特权

评论回复
板凳
mmuuss586| | 2014-5-8 19:26 | 只看该作者
基本步骤

1、首先开启TIM1的时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);

2、时基单元的初始化

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_p1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = 0x1068;
TIM_TimeBaseInitStructure.TIM_Prescaler = 0x2710;
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0x00;

TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure);


TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure);
TIM_ClearFlag(TIM1,TIM_FLAG_Update);   //必须先清除配置时候产生的更新标志
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);   //使能中断,中断事件为定时器工薪事件
TIM_Cmd(TIM1,ENABLE);    //使能定时器

3、中断处理函数

使用特权

评论回复
地板
yzzly| | 2014-5-9 10:56 | 只看该作者
本帖最后由 yzzly 于 2014-5-9 10:59 编辑

#if(TIME7)
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
        
        NVIC_InitStructure.NVIC_IRQChannel = TIM7_IRQChannel;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);                 //ʹÄÜT7ʱÖÓ
        TIM_InternalClockConfig(TIM7);                                                                //TIM7Ñ¡ÔñÄÚ²¿Ê±ÖÓÇý¶¯

        if(((RCC->CFGR >> 10) & 0x04)==0)                                                     //Èç¹ûAPB1ʱÖÓÓÉAHBʱÖÓ²»·ÖƵµÃÀ´
        {
                Temp=1;
        }
        else
        {
                Temp=2;
        }

        TIM_TimeBaseStructure.TIM_Period = TIM7_Delay*TIM7_ClkFre/1000;          //ÖÜÆÚ¾ÍÊÇ×Ô¶¯ÖØ×°ÔؼĴæÆ÷ARRµÄÖµ
        TIM_TimeBaseStructure.TIM_Prescaler = APB1CLK*Temp/TIM7_ClkFre-1;      //Ô¤·ÖÅäÆ÷
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM7, &TIM_TimeBaseStructure);

        TIM_ITConfig(TIM7, TIM_IT_Update, ENABLE);                                             //ÖжÏʹÄܼĴæÆ÷
        TIM_Cmd(TIM7, ENABLE);
#endif
可以做到1毫秒的定时

使用特权

评论回复
5
zhouyanggx|  楼主 | 2014-5-9 12:16 | 只看该作者
Timer7接在哪条时钟线上?

使用特权

评论回复
6
yzzly| | 2014-5-9 12:44 | 只看该作者
APB1

使用特权

评论回复
7
zhouyanggx|  楼主 | 2014-5-9 13:08 | 只看该作者
系统默认的APB1时钟为42M?

使用特权

评论回复
8
zhouyanggx|  楼主 | 2014-5-9 13:11 | 只看该作者
mmuuss586 发表于 2014-5-8 19:26
基本步骤

1、首先开启TIM1的时钟

这看上去有些复杂

使用特权

评论回复
9
m564522634| | 2014-7-1 17:49 | 只看该作者
yzzly 发表于 2014-5-9 10:56
#if(TIME7)
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
        

你用的哪个版本的库函数

使用特权

评论回复
10
yzzly| | 2014-7-11 17:34 | 只看该作者
m564522634有什么问题?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

14

帖子

1

粉丝