[STM32F0] STM32F030K6的TIM1定时功能不工作

[复制链接]
4773|12
 楼主| hopewise 发表于 2014-11-25 09:22 | 显示全部楼层 |阅读模式
下面的2个函数在TIM3,TIM14,TIM16运行(定时功能)都没问题,但改用在TIM1的定时功能的话,整个程序不工作,查不出来原因
void TIM1_Init()
{
            RCC->APB2ENR|=1<<11;          //TIM1时钟使能
            TIM1->ARR=24000;                   //定时500us   
            TIM1->PSC=0;                            //1分频(0+1)  
            TIM1->EGR = 0x01;                   //允许产生更新事件
            TIM1->DIER|=1<<0;                  //允许更新中断  
            TIM1->DIER|=1<<6;                  //允许触发中断
            TIM1->CR1|=0x01;                    //使能定时器1
            NVIC->ISER[0]|=1<<13;            //允许TIM1中断使能
}        


/***********************************
* 名称:        TIM1_IRQHandler()
* 功能:        TIM1溢出中断服务子程序
* 入口参数: 无
* 出口参数: 无
* 说明:        产生1K方波                              
************************************/
void TIM1_IRQHandler(void)
{
           if(TIM1->SR&0X0001)      //溢出中断
           {
                        if((GPIOA->ODR&(1<<6))!=(1<<6))  PWM1_high;        
                       else  PWM1_low;                        
          }
          TIM1 ->SR&=~(1<<0);     //清除中断标志位
}

diweo 发表于 2014-11-25 10:39 | 显示全部楼层
本帖最后由 diweo 于 2014-11-25 10:40 编辑

TIM1,TIM8是高级定时器。
#define  TIM_BDTR_MOE                        ((uint16_t)0x8000)            /*!< Main Output enable */
TIMx->BDTR |= TIM_BDTR_MOE;
mmuuss586 发表于 2014-11-25 12:30 | 显示全部楼层

TIM1不管是定时器输出,还是PWM输出,相比其它定时器都要多加条语句;
楼主按楼上意见改下看看;
 楼主| hopewise 发表于 2014-11-25 14:02 | 显示全部楼层
加了,如下,现可以执行Stm32_Clock_Init() 和SysTick_init();  但执行TIM1_Init()函数就死在那里不动
主程序(部分)如下:

void TIM1_Init()
{
           RCC->APB2ENR|=1<<11;                     //TIM1时钟使能(一定在这里设置)  
            TIM1->ARR=24000;                         //定时500us   
            TIM1->PSC=0;                             //1分频(0+1)  
            TIM1->EGR = 0x01;                  //允许产生更新事件
            TIM1->DIER|=1<<0;                  //允许更新中断  
            TIM1->DIER|=1<<6;                  //允许触发中断
            TIM1->CR1|=0x01;                   //使能定时器1
            NVIC->ISER[0]|=1<<13;              //允许TIM1中断允许
            TIM1->BDTR |=1<<15;                //打开MOE
}
主程序(部分)如下:
int main(void)
{
            Stm32_Clock_Init();              //系统时钟设置(最大48MHZ)
            SysTick_init();                  //滴答定时器初始化
            TIM1_Init();                     //TIM1定时器初始化
            TIM3_Init();                      //TIM3定时器初始化
            TIM14_Init();                    //TIM14定时器初始化
            TIM16_Init();                    //TIM16定时器初始化
            GPIO_init();                      //IO口初始化
            buz_set(1,20);                  //上电响1声
            while(1)

       
 楼主| hopewise 发表于 2014-11-25 14:03 | 显示全部楼层
加了,如下,现可以执行Stm32_Clock_Init() 和SysTick_init();  但执行TIM1_Init()函数就死在那里不动
主程序(部分)如下:

void TIM1_Init()
{
           RCC->APB2ENR|=1<<11;                     //TIM1时钟使能(一定在这里设置)  
            TIM1->ARR=24000;                         //定时500us   
            TIM1->PSC=0;                             //1分频(0+1)  
            TIM1->EGR = 0x01;                  //允许产生更新事件
            TIM1->DIER|=1<<0;                  //允许更新中断  
            TIM1->DIER|=1<<6;                  //允许触发中断
            TIM1->CR1|=0x01;                   //使能定时器1
            NVIC->ISER[0]|=1<<13;              //允许TIM1中断允许
            TIM1->BDTR |=1<<15;                //打开MOE
}
主程序(部分)如下:
int main(void)
{
            Stm32_Clock_Init();              //系统时钟设置(最大48MHZ)
            SysTick_init();                  //滴答定时器初始化
            TIM1_Init();                     //TIM1定时器初始化
            TIM3_Init();                      //TIM3定时器初始化
            TIM14_Init();                    //TIM14定时器初始化
            TIM16_Init();                    //TIM16定时器初始化
            GPIO_init();                      //IO口初始化
            buz_set(1,20);                  //上电响1声
            while(1)

       
TDCQ86 发表于 2014-12-4 10:58 | 显示全部楼层
本帖最后由 TDCQ86 于 2014-12-4 11:01 编辑

void TIM1_IRQHandler(void)这句是否有问题请确认?原因:TIM1_IRQHandler不一定是正确的中断向量,请到CMSIS下的.S启动文件找到对应的中断向量;TIM3,TIM14,TIM16这些是通用定时器,TIM1是高级定时器中断向量有几个,比如:
TIM1_BRK_UP_TRG_COM_IRQHandler ; TIM1 Break, Update, Trigger and Commutation
TIM1_CC_IRQHandler; TIM1 Capture Compare
 楼主| hopewise 发表于 2014-12-4 11:42 | 显示全部楼层
多谢TDCQ86,现暂时不搞TIM1的定时问题,因为我能同时开通TIM3,TIM14,TIM16都OK,当时我是只想验证一下各个定时能否正确而已.
ql1000 发表于 2016-8-12 16:20 | 显示全部楼层
学习学习
破天#mcu 发表于 2017-8-7 11:06 | 显示全部楼层
代理兆易创新(GD)32-bit ARM架构,Cortex-M3、M4内核MCU,可提供技术支持等服务;
GD32F130系列 M3内核与STM32F030/051系列,硬件pin to pin兼容;烧录器、寄存器、开发环境完全兼容;
欢迎来电咨询探讨,邱先生 电话:136 8955 5135;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

468

帖子

3

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