打印
[STM32F0]

STM32F030K6的TIM1定时功能不工作

[复制链接]
3929|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)

       

使用特权

评论回复
5
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)

       

使用特权

评论回复
6
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

使用特权

评论回复
7
hopewise|  楼主 | 2014-12-4 11:42 | 只看该作者
多谢TDCQ86,现暂时不搞TIM1的定时问题,因为我能同时开通TIM3,TIM14,TIM16都OK,当时我是只想验证一下各个定时能否正确而已.

使用特权

评论回复
8
ql1000| | 2016-8-12 16:20 | 只看该作者
学习学习

使用特权

评论回复
9
破天#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

粉丝