打印
[STM32F0]

【stm32f0】关于定时器进不了中断

[复制链接]
6719|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Eurekaseven|  楼主 | 2014-3-4 18:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
初学STM32,按照例子程序写的定时器触发中断控制LED等亮灭的程序,编译通过,但仿真只看到灯亮,没有进入中断,调了几天也没弄出来。。。希望帮帮忙看下是什么问题。。。
main.c
int main(void)
{
   TIM_NVIC_Config();
   LED_InitC();
   LED_Open3();
   TIM_Config();
  while (1)
  {
  }
}

time.c
#include "time.h"

void TIM_NVIC_Config(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);       
  NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;       
  NVIC_InitStructure.NVIC_IRQChannelPriority=0;       
  NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

void TIM_Config(void)
{
   __IO uint16_t CCR3_Val = 13654;
   __IO uint16_t CCR4_Val = 6826;
   uint16_t PrescalerValue = 0;
       
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;
       
  PrescalerValue = (uint16_t) (SystemCoreClock  / 6000000) - 1;

        TIM_TimeBaseStructure.TIM_Period=65535;       
                TIM_TimeBaseStructure.TIM_Prescaler=0;  
        TIM_TimeBaseStructure.TIM_ClockDivision=0;        
                TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;       
                TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);                  
                TIM_PrescalerConfig(TIM3, PrescalerValue, TIM_PSCReloadMode_Immediate);

        TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Timing;       
                TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_Pulse = CCR3_Val;
        TIM_OC3Init(TIM3,&TIM_OCInitStructure);
        TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Disable);
       
        TIM_ITConfig(TIM3,TIM_IT_CC3,ENABLE);
        TIM_Cmd(TIM3,ENABLE);
}
中断
void TIM3_IRQHandler(void)
{
  if (TIM_GetITStatus(TIM3, TIM_IT_CC3) != RESET)
  {
    TIM_ClearITPendingBit(TIM3, TIM_IT_CC3);
    LED3_Toggle();
    capture = TIM_GetCapture3(TIM3);
    TIM_SetCompare3(TIM3, capture + CCR3_Val);
  }       
}
沙发
mmuuss586| | 2014-3-4 19:07 | 只看该作者
void
TIM1_Init(u32 TIM_Period)//TIM_PeriodΪ16λµÄÊý
{
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
                /* Time base configuration */
                TIM_TimeBaseStructure.TIM_Period =TIM_Period;
                TIM_TimeBaseStructure.TIM_Prescaler = 0;                //¶¨Ê±Æ÷ʱÖÓ·ÖƵ
                TIM_TimeBaseStructure.TIM_ClockDivision = 0;        //²ÉÑù·ÖƵ
                TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;        //ÏòÉϼÆÊý
                TIM_TimeBaseInit(TIM11, &TIM_TimeBaseStructure);
          TIM_PrescalerConfig(TIM11, 13, TIM_PSCReloadMode_Immediate );
          TIM_ITConfig(TIM11, TIM_IT_Update, ENABLE);
          TIM_Cmd(TIM11, ENABLE);
}

          NVIC_InitTypeDef  NVIC_InitStructure;
         
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM11, ENABLE);  
          NVIC_InitStructure.NVIC_IRQChannel = TIM1_TRG_COM_TIM11_IRQn;
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
          NVIC_Init(&NVIC_InitStructure);       

使用特权

评论回复
板凳
mmuuss586| | 2014-3-4 19:08 | 只看该作者
void TIM1_TRG_COM_TIM11_IRQHandler(void)
{
        //
        // Clear the timer interrupt.
        //
  if(TIM_GetITStatus(TIM11,TIM_IT_Update)!=RESET)
        {        
}
}
参考,不过我的是M4

使用特权

评论回复
地板
Eurekaseven|  楼主 | 2014-3-4 19:31 | 只看该作者
mmuuss586 发表于 2014-3-4 19:08
void TIM1_TRG_COM_TIM11_IRQHandler(void)
{
        //

嗯嗯 谢谢,我的用的是STM320518—EVAL的板子,我的设置都差不多,我能把工程发给你看能进入中断么?实在是弄了很久不好意思

使用特权

评论回复
5
mmuuss586| | 2014-3-4 19:33 | 只看该作者
我手上没板子,要不然可以试下。

使用特权

评论回复
6
mmuuss586| | 2014-3-4 19:42 | 只看该作者
void TIM3_IRQHandler(void)
{
  if (TIM_GetITStatus(TIM3, TIM_IT_CC3) != RESET)
  {
    TIM_ClearITPendingBit(TIM3, TIM_IT_CC3);

    /* LED3 toggling with frequency = 219.7 Hz */
    STM_EVAL_LEDToggle(LED3);
    capture = TIM_GetCapture3(TIM3);
    TIM_SetCompare3(TIM3, capture + CCR3_Val);
  }
  else
  {
    TIM_ClearITPendingBit(TIM3, TIM_IT_CC4);

    /* LED4 toggling with frequency = 439.4 Hz */
    STM_EVAL_LEDToggle(LED4);
    capture = TIM_GetCapture4(TIM3);
    TIM_SetCompare4(TIM3, capture + CCR4_Val);
  }
}
看你程序和例程差不多,中断有不一样

使用特权

评论回复
7
Eurekaseven|  楼主 | 2014-3-4 20:04 | 只看该作者
mmuuss586 发表于 2014-3-4 19:42
void TIM3_IRQHandler(void)
{
  if (TIM_GetITStatus(TIM3, TIM_IT_CC3) != RESET)

是的,例程用了两个灯,我先只让一个灯闪起来,就把第二个灯的 部分删了。我也试过按例程用两个灯,最终也只是点亮了两个灯。看你的程序里没有TIM_OCInitTypeDef  TIM_OCInitStructure;比较输出的相关配置,请问这个具体是什么作用呢?我删了这部分配置仿真结果也没有变化

使用特权

评论回复
8
青风002| | 2014-3-4 22:03 | 只看该作者
Eurekaseven 发表于 2014-3-4 20:04
是的,例程用了两个灯,我先只让一个灯闪起来,就把第二个灯的 部分删了。我也试过按例程用两个灯,最终 ...

直接看我这个贴子里的代码吧
https://bbs.21ic.com/icview-392803-1-1.html

使用特权

评论回复
9
Eurekaseven|  楼主 | 2014-3-4 23:18 | 只看该作者
青风002 发表于 2014-3-4 22:03
直接看我这个贴子里的代码吧
https://bbs.21ic.com/icview-392803-1-1.html

我后来也看到那篇帖子了,真的很有用,谢谢

使用特权

评论回复
10
Eurekaseven|  楼主 | 2014-3-5 13:01 | 只看该作者
青风002 发表于 2014-3-4 22:03
直接看我这个贴子里的代码吧
https://bbs.21ic.com/icview-392803-1-1.html

不好意思再问一下。运行教程中的串口工程时,为什么接收到的是4C 48 48 13而不是good呢?

使用特权

评论回复
11
青风002| | 2014-3-5 16:33 | 只看该作者
Eurekaseven 发表于 2014-3-5 13:01
不好意思再问一下。运行教程中的串口工程时,为什么接收到的是4C 48 48 13而不是good呢? ...

波特率什么的设置正确否?好的话顶顶贴,哈哈

使用特权

评论回复
12
Eurekaseven|  楼主 | 2014-3-5 19:17 | 只看该作者
青风002 发表于 2014-3-5 16:33
波特率什么的设置正确否?好的话顶顶贴,哈哈

嗯嗯,谢谢了, 已经顶了~原来串口那个是硬件问题。。。

使用特权

评论回复
13
dfh01| | 2015-5-24 11:51 | 只看该作者
兄弟,STM32F030的定时器问题,你最后怎么解决的?我也是按照青风的文档做得,没有成功。求赐教

使用特权

评论回复
14
神韵1206| | 2015-11-25 20:55 | 只看该作者
dfh01 发表于 2015-5-24 11:51
兄弟,STM32F030的定时器问题,你最后怎么解决的?我也是按照青风的文档做得,没有成功。求赐教 ...

你的现在解决了吗

使用特权

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

本版积分规则

5

主题

15

帖子

0

粉丝