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

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

  1. int main(void)
  2. {
  3.         RCC_ClocksTypeDef MyClock;
  4.   SystemCoreClockSetHSI();
  5.         RCC_GetClocksFreq (&MyClock);
  6.        
  7.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2 );
  8.         Btn_EXTI_Init();
  9. //        USART1_Init();
  10.         LED_GPIO_Init ();
  11.         LED_OFF ();

  12.         TIM3_Config();
  13.         while(1)
  14.         {
  15. //                        /* Toggle LED */
  16. //                        LED_Toggle();
  17.         }
  18.         return 0;
  19. }
  1. void TIM3_Config(void)
  2. {
  3.         TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  4.         NVIC_InitTypeDef NVIC_InitStructure;
  5.        
  6.         NVIC_InitStructure .NVIC_IRQChannel = TIM3_IRQn;
  7.         NVIC_InitStructure .NVIC_IRQChannelPreemptionPriority = 2;
  8.         NVIC_InitStructure .NVIC_IRQChannelSubPriority = 0;
  9.         NVIC_InitStructure .NVIC_IRQChannelCmd = ENABLE;
  10.         NVIC_Init(&NVIC_InitStructure);
  11.        
  12.         RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM3 ,ENABLE);
  13.        
  14.         TIM_DeInit(TIM3);
  15.        
  16.         TIM_TimeBaseStructure .TIM_Period = 1000-1;                        //1000*1ms = 1s
  17.         TIM_TimeBaseStructure .TIM_Prescaler = 24000;                //1KHz -- 1ms
  18.         TIM_TimeBaseStructure .TIM_CounterMode = TIM_CounterMode_Up ;
  19.         TIM_TimeBaseStructure .TIM_ClockDivision = TIM_CKD_DIV1 ;
  20.        
  21.         TIM_TimeBaseInit (TIM3,&TIM_TimeBaseStructure);

  22.         TIM_ClearFlag (TIM3,TIM_FLAG_Update);
  23.         TIM_ITConfig (TIM3,TIM_IT_Update ,ENABLE);
  24.         TIM_Cmd (TIM3,ENABLE);
  25. }
  1. void TIM3_IRQHanlder(void)
  2. {
  3.         if(TIM_GetITStatus(TIM3,TIM_IT_Update ) != RESET )
  4.         {
  5.                 TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
  6.                 LED_Toggle ();
  7.         }
  8. }
帮我看看是哪里疏忽了


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 | 显示全部楼层
有人知道详细说说吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:Android Developer !

12

主题

400

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部