[STM32F4] F401和F407的定时器配置有区别吗?

[复制链接]
3752|7
手机看帖
扫描二维码
随时随地手机跟帖
电子无聊大神|  楼主 | 2014-7-22 20:33 | 显示全部楼层 |阅读模式
今天莫名其妙的在STM32F401 NUCLEO板子上折腾了一天通用定时器的配置,一直没有成功运行。
刚刚试着将代码改换到STM32F407 DISCO板子上运行,却意外地运行成功了。(LED闪烁)
两块板子的区别只在于 前者使用内部晶振,后者使用外部晶振。
程序是用来测试的所以没有注释,应该也容易看懂
有空的帮我看看什么情况吧。

int main(void)
{
        RCC_ClocksTypeDef MyClock;
  SystemCoreClockSetHSI();
        RCC_GetClocksFreq (&MyClock);
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2 );
        Btn_EXTI_Init();
//        USART1_Init();
        LED_GPIO_Init ();
        LED_OFF ();

        TIM3_Config();
        while(1)
        {
//                        /* Toggle LED */
//                        LED_Toggle();
        }
        return 0;
}
void TIM3_Config(void)
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       
        NVIC_InitStructure .NVIC_IRQChannel = TIM3_IRQn;
        NVIC_InitStructure .NVIC_IRQChannelPreemptionPriority = 2;
        NVIC_InitStructure .NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure .NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
       
        RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM3 ,ENABLE);
       
        TIM_DeInit(TIM3);
       
        TIM_TimeBaseStructure .TIM_Period = 1000-1;                        //1000*1ms = 1s
        TIM_TimeBaseStructure .TIM_Prescaler = 24000;                //1KHz -- 1ms
        TIM_TimeBaseStructure .TIM_CounterMode = TIM_CounterMode_Up ;
        TIM_TimeBaseStructure .TIM_ClockDivision = TIM_CKD_DIV1 ;
       
        TIM_TimeBaseInit (TIM3,&TIM_TimeBaseStructure);

        TIM_ClearFlag (TIM3,TIM_FLAG_Update);
        TIM_ITConfig (TIM3,TIM_IT_Update ,ENABLE);
        TIM_Cmd (TIM3,ENABLE);
}
void TIM3_IRQHanlder(void)
{
        if(TIM_GetITStatus(TIM3,TIM_IT_Update ) != RESET )
        {
                TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
                LED_Toggle ();
        }
}
帮我看看是哪里疏忽了


mmuuss586| | 2014-7-22 20:46 | 显示全部楼层
用官方例程测试下看看;

使用特权

评论回复
电子无聊大神|  楼主 | 2014-7-22 21:32 | 显示全部楼层
mmuuss586 发表于 2014-7-22 20:46
用官方例程测试下看看;

官方例程都是关于定时器的输入捕获,比较输出PWM输出的,我这个只是简单的计时中断...
然后对照了例程的配置,也查了网上各种博客和论坛资料,还是没解决...
NUCLEO板子怎么这么怪...
先不弄了,明天再想。

使用特权

评论回复
mmuuss586| | 2014-7-23 08:07 | 显示全部楼层
电子无聊大神 发表于 2014-7-22 21:32
官方例程都是关于定时器的输入捕获,比较输出PWM输出的,我这个只是简单的计时中断...
然后对照了例程的 ...

那说明你根据其它库改的程序;
就根据PWM输入的例程,改下初始化和中断的程序就差不多了;

使用特权

评论回复
电子无聊大神|  楼主 | 2014-7-23 09:39 | 显示全部楼层
本帖最后由 电子无聊大神 于 2014-7-23 12:51 编辑
mmuuss586 发表于 2014-7-23 08:07
那说明你根据其它库改的程序;
就根据PWM输入的例程,改下初始化和中断的程序就差不多了; ...

终于。。发现了
中断服务函数里,一个写成TIM3_IRQHanlder()、一个写成TIM3_IRQHandler()...
就这破问题害了我整整24小时啊

使用特权

评论回复
airwill| | 2014-7-23 11:58 | 显示全部楼层
嗯, 中招了. 这是个不太被注意的方面.
想必 ST 为了引起开发者的注意, 特意定义了个不同的名称. 要留意它们之间的区别呀

使用特权

评论回复
mmuuss586| | 2014-7-23 12:12 | 显示全部楼层
电子无聊大神 发表于 2014-7-23 09:39
终于。。发现了
中断服务函数里,一个写成TIM3_IRQHanlder()、一个写成TIM3-Handler()...
就这破问题害了 ...

:loveliness:
解决了就好;

使用特权

评论回复
kumi89| | 2019-10-16 22:13 | 显示全部楼层
有人知道详细说说吗

使用特权

评论回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则