2471|6

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

stm32定时器中断问题 [复制链接]

本帖最后由 Bolten 于 2014-10-22 09:55 编辑

我用串口调试程序,想做精准1sLED亮灭,可以进串口中断,进不去定时器中断,急求!!!各位大师求指点
void BSP_Init (void)
{        
        RCC_Configuration();
        GPIO_Configuration();  
         EXTI_Configuration();
        NVIC_Configuration();
        USART1_Configuration();
  TIM2_Configuration();
}

void RCC_Configuration(void)
{
        SystemInit();                                                                                                                                                                    
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA| RCC_AHB1Periph_GPIOB| RCC_AHB1Periph_GPIOC   
                                                          , ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1| RCC_APB2Periph_TIM1| RCC_APB2Periph_TIM8|                                 
                                                     RCC_APB2Periph_TIM9|RCC_APB2Periph_SYSCFG, ENABLE);                                                                                            
        RCC_APB1PeriphClockCmd(  RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3 | RCC_APB1Periph_TIM4
                             |RCC_APB1Periph_TIM5, ENABLE);
                                                         
}
void GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;        
                                    
        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                                                                                                                                 
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;                  
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
   
}

void USART1_Configuration(void)                                                
{        
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
                                                                                                        
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);        
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
                                                                                                                  
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Init(GPIOA,&GPIO_InitStructure);  

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;  
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
        GPIO_Init(GPIOA,&GPIO_InitStructure);

  USART_InitStructure.USART_BaudRate=115200;
  USART_InitStructure.USART_Parity=USART_Parity_No;
  USART_InitStructure.USART_WordLength=USART_WordLength_8b;
  USART_InitStructure.USART_StopBits=USART_StopBits_1;
  USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
  USART_Init(USART1, &USART_InitStructure);        
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
         USART_Cmd(USART1, ENABLE);
}

void TIM2_Configuration(void)
{                                                                                                                                          
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;                 
                                 
        TIM_TimeBaseStructure.TIM_Period =2000;
        TIM_TimeBaseStructure.TIM_Prescaler = (42000-1);
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);                 
                                                                                                                                                                                 
        TIM_ClearFlag(TIM2,TIM_FLAG_Update);                          
        TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
        TIM_Cmd(TIM2, ENABLE);                                                  
}

void NVIC_Configuration(void)
{           
  NVIC_InitTypeDef        NVIC_InitStructure;
         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
                  
         NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);        

        NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);               

}
void USART1_IRQHandler(void)
{
         if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET);                  
                USART_ClearFlag(USART1, USART_FLAG_RXNE);

}
void TIM2_IRQHandler(void)
{

        if(TIM_GetITStatus(TIM2,TIM_IT_Update)!= RESET)     //判断中断发生与否
                 {
                        USART_OUT(USART1," AAAAA\r\n");        
                        GPIO_ToggleBits(GPIOB,GPIO_Pin_12);
                        TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update);
                 }
}

int  main(void)                                                                        //主函数
{
          BSP_Init();                                                                                                                                                
                SCB->VTOR = FLASH_BASE | 0x20000;                 
                                                                                                                                                                  
    USART_OUT(USART1," *************\r\n");            
                USART_OUT(USART1, "******************\r\n");        
                GPIO_ResetBits(GPIOB,GPIO_Pin_12);
        
   return  0;
}                                                                                                                                   
此帖出自stm32/stm8论坛

最新回复

第一个问题: main()函数中没有while(1); 第二个问题: TIM2的Prescaler值设置错误,不能大于255。。  详情 回复 发表于 2014-10-24 15:42
点赞 关注
 

回复
举报

4008

帖子

0

TA的资源

版主

沙发
 
看程序的感受都是一样的.
此帖出自stm32/stm8论坛

点评

我的哪里有问题,求指导  详情 回复 发表于 2014-10-22 13:17
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
huo_hu 发表于 2014-10-22 13:12
看程序的感受都是一样的.

我的哪里有问题,求指导
此帖出自stm32/stm8论坛
 
 

回复

165

帖子

0

TA的资源

一粒金砂(中级)

4
 
其中可能的问题之一是楼主的main函数很快得就返回了.
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(中级)

5
 
既然是定时中断    你的主函数要停下来等这个中断到来,增加一个while循环
此帖出自stm32/stm8论坛
 
个人签名没有任何借口
 
 

回复

4008

帖子

0

TA的资源

版主

6
 
TIM_TimeBaseStructure.TIM_Prescaler = (42000-1);
这个数太大了吧,你cnt有没有走?
此帖出自stm32/stm8论坛
 
 
 

回复

45

帖子

1

TA的资源

一粒金砂(中级)

7
 
第一个问题:
main()函数中没有while(1);

第二个问题:
TIM2的Prescaler值设置错误,不能大于255。。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表