OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2598|回复: 3

请问我为何进入不了定时器中断

[复制链接]

7

主题

11

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-7-23
在线时间
12 小时
发表于 2019-8-15 22:52:50 | 显示全部楼层 |阅读模式
2金钱
  1. #include "stm32f10x.h"
  2. #include "timer.h"
  3. #include "stm32f10x_rcc.h"

  4. void Timer_init(void)
  5. {
  6.         TIM_TimeBaseInitTypeDef Timer_InitStr;
  7.         NVIC_InitTypeDef NVIC_InitStr;
  8.         RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4,ENABLE);
  9.        
  10.         Timer_InitStr.TIM_ClockDivision =TIM_CKD_DIV1;
  11.         Timer_InitStr.TIM_CounterMode = TIM_CounterMode_Up;
  12.         Timer_InitStr.TIM_Period = 5000;
  13.         Timer_InitStr.TIM_Prescaler = 7199;
  14.         TIM_TimeBaseInit(TIM4,&Timer_InitStr);
  15.         TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);
  16.        
  17.        
  18.         NVIC_InitStr.NVIC_IRQChannel = TIM4_IRQn;
  19.         NVIC_InitStr.NVIC_IRQChannelCmd = ENABLE;
  20.         NVIC_InitStr.NVIC_IRQChannelPreemptionPriority = 3;
  21.         NVIC_InitStr.NVIC_IRQChannelSubPriority = 3;
  22.         NVIC_Init(&NVIC_InitStr);
  23.        
  24.         TIM_Cmd(TIM4,ENABLE);
  25. }

  26. void TIM4_IRQHandler(void)
  27. {
  28.         if(TIM_GetITStatus(TIM4,TIM_IT_Update)!=RESET)
  29.         {
  30.                 TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
  31.                 GPIO_ResetBits(GPIOB,GPIO_Pin_5);
  32.         }

  33. }
  34.        
复制代码
  1. #include "stm32f10x.h"
  2. #include "timer.h"
  3. #include "delay.h"

  4. int main(void)
  5. {
  6.         GPIO_InitTypeDef GPIO_InitStr;
  7.        
  8.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  9.         Timer_init();
  10.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  11.        
  12.         GPIO_InitStr.GPIO_Mode = GPIO_Mode_Out_OD;
  13.         GPIO_InitStr.GPIO_Pin = GPIO_Pin_5;
  14.         GPIO_InitStr.GPIO_Speed =GPIO_Speed_10MHz;
  15.         GPIO_Init(GPIOB,&GPIO_InitStr);
  16.         GPIO_SetBits(GPIOB,GPIO_Pin_5);
  17.         while(1)
  18.         {
  19. //                delay_ms(500);
  20. //                GPIO_ResetBits(GPIOB,GPIO_Pin_5);
  21.         }

  22. }

复制代码
基本上是按照开发指南上面来的,但是程序下载了之后并不能进入中断(板子上面的灯没有被点亮),请问这是为什么
此外,还想请教一下,当定时器的重装载值被设定成5000之后计数模式再设定成向上计数不应该要计数到(2^16-1-5000)才可以重装载吗?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2019-7-25
在线时间
57 小时
发表于 2019-8-16 08:57:37 | 显示全部楼层
重装载值设为5000,并向上计数是说当定时器CNT计数到5000时会产生更新中断,CNT重新从0开始计数。代码我没看出什么问题。。。。
回复

使用道具 举报

7

主题

175

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1327
金钱
1327
注册时间
2019-7-11
在线时间
165 小时
发表于 2019-8-21 14:19:15 | 显示全部楼层
RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4,ENABLE);改成RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
世界和平
回复

使用道具 举报

8

主题

571

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2922
金钱
2922
注册时间
2016-5-13
在线时间
185 小时
发表于 2019-8-22 17:31:52 | 显示全部楼层
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //时钟使能

        TIM_ITConfig(  //使能或者失能指定的TIM中断
                TIM4,
                TIM_IT_Update  |  //TIM 中断源
                TIM_IT_Trigger,   //TIM 触发中断源
                ENABLE  //使能
                );
虽然不明白你们在说什么,但感觉很厉害的样子。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-16 21:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表