stm32f103C8,初始化定时器3时死机

2019-09-03 13:28发布

  1. 在使用stm32f103C8时,在main函数中调用TIM3_Int_Init();时会卡死,
    debug时可以看到在
    NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器
    就不在继续了。

TIM3_Int_Init();配置如下,谢谢解答。

  • void TIM3_Int_Init(void)
  • {
  •     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  •         NVIC_InitTypeDef NVIC_InitStructure;

  •         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
  •         //定时器TIM3初始化
  •         // 19-------35999------10MS  定时
  •         TIM_TimeBaseStructure.TIM_Period = 9; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值       
  •         TIM_TimeBaseStructure.TIM_Prescaler =7199; //设置用来作为TIMx时钟频率除数的预分频值
  •         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
  •         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
  •         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位

  •         TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
  • //        TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//中断标志位清除
  •         //中断优先级NVIC设置
  •         NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中断
  •         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
  •         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
  •         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
  •         NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器
  •         TIM_Cmd(TIM3,ENABLE);       
  • }
  • 复制代码
    1. 在使用stm32f103C8时,在main函数中调用TIM3_Int_Init();时会卡死,
      debug时可以看到在
      NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器
      就不在继续了。

    TIM3_Int_Init();配置如下,谢谢解答。

  • void TIM3_Int_Init(void)
  • {
  •     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  •         NVIC_InitTypeDef NVIC_InitStructure;

  •         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
  •         //定时器TIM3初始化
  •         // 19-------35999------10MS  定时
  •         TIM_TimeBaseStructure.TIM_Period = 9; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值       
  •         TIM_TimeBaseStructure.TIM_Prescaler =7199; //设置用来作为TIMx时钟频率除数的预分频值
  •         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
  •         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
  •         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位

  •         TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
  • //        TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//中断标志位清除
  •         //中断优先级NVIC设置
  •         NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中断
  •         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
  •         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
  •         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
  •         NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器
  •         TIM_Cmd(TIM3,ENABLE);       
  • }
  • 复制代码
    7条回答
    好了,我的问题已经解决了。
    具体原因如下:
    在 stm32f10x.h 文件中的第 1272 行有
    #define FLASH_BASE        ((uint32_t)0x08000000)
    我在使用 IAP 功能时,将这个宏定义更改了。
    但是不使用IAP功能时,没把这个文件恢复为默认值。

    查看更多
    所谓的死机指的是。。。? 还有NVIC优先级分组分了么?
    查看更多
    就是不能继续执行了,或者跑飞了。
    查看更多
    本帖最后由 yongqiang 于 2017-3-24 12:32 编辑

    debug,就是到这里。分组也分了,
    int main(void)
    {
    delay_init();
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    LED_Init();

    uart3_init(250000);
    // uart1_init(250000);
    // DMX_Init();
    TIM3_Int_Init();
    while(1)
      {
      }
    }

    查看更多
    chenjiabao 发表于 2017-3-24 12:18
    所谓的死机指的是。。。? 还有NVIC优先级分组分了么?

    你好,我上了调试的截图,你看下是否知道哪里问题,谢谢。
    查看更多
    yongqiang 发表于 2017-3-24 13:56
    好了,我的问题已经解决了。
    具体原因如下:
    在 stm32f10x.h 文件中的第 1272 行有

    什么IAP功能我也不懂,不过你居然改这种h文件胆子很大
    查看更多

    一周热门 更多>