打印
[STM32F0]

那位大佬大神帮忙看一下 为什么TIM6定时器延时 不起作用

[复制链接]
1342|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主


    #ifndef __TIM_H_
    #define __TIM_H_

    #include "stm32f0xx_tim.h"

    void BSP_TIM6_Init(void);

    #endif

    #include "TIM.h"

    void BSP_TIM6_Init()
    {
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);

    TIM_TimeBaseInitStructure.TIM_Period = (1000-1);
    TIM_TimeBaseInitStructure.TIM_Prescaler = (48-1);
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CKD_DIV1;
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM6,&TIM_TimeBaseInitStructure);

    TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);

    NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_InitStructure.NVIC_IRQChannelPriority = 1;
    NVIC_Init(&NVIC_InitStructure);
    TIM_Cmd(TIM6,ENABLE);

    }

    void TIM6_IRQHandler(void)
    {
    if(TIM_GetITStatus(TIM6,TIM_IT_Update) == SET)
    {
    TIM_ClearITPendingBit(TIM6,TIM_IT_Update); //清除更新中断标志位
    MotorTick_Now ++;
    }
    }

    /* Includes ------------------------------------------------------------------*/
    #include "main.h"
    /* Private typedef -----------------------------------------------------------*/

    /* Private define ------------------------------------------------------------*/
    uint32_t MotorTick_Now = 0;
    uint32_t MotorTick_Trig = 0;
    uint8_t MotorTrig_Flag = 0;

    void delay(uint32_t xms)
    {
    __IO uint32_t i, j;
    i = xms * 999;
    while(i--)
    {
    j = 47;
    while(j--);
    }
    }

    /**

        @brief Main program.
        @param None
        @retval None / int main(void) { /!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f0xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f0xx.c file */ BSP_GPIO_Init(); BSP_TIM6_Init(); SysTick_Init(8); //滴答定时器延时初始化

    // __set_PRIMASK(1);

    /* Infinite loop */

    while(1)
    {
    if(GPIO_ReadInputDataBit(INPUT_Port,SW_Pin) == SET )

    {
    GPIO_ResetBits(JK_Port,JK_Pin);
    }
    else
    {
    if(GPIO_ReadInputDataBit(INPUT_Port, DS_Pin) == RESET)
    {
    MotorTrig_Flag = 1;
    }
    if(MotorTrig_Flag == 1)
    {
    GPIO_ResetBits(JK_Port, JK_Pin);
    MotorTick_Trig = 0;

                if(GPIO_ReadInputDataBit(SWs_Port, GPIO_Pin_2) ==0)
                {
                    MotorTick_Trig = 1000 * 10;
                }
                if(GPIO_ReadInputDataBit(SWs_Port, GPIO_Pin_3) ==0)
                {
                    MotorTick_Trig += 1000 * 60 * 2;
                }
                if(GPIO_ReadInputDataBit(SWs_Port, GPIO_Pin_4) == 0)
                {
                    MotorTick_Trig += 1000 * 60 * 4;
                }
                if(GPIO_ReadInputDataBit(SWs_Port, GPIO_Pin_5) == 0)
                {
                    MotorTick_Trig += 1000 * 60 * 8;
                }
                if(GPIO_ReadInputDataBit(SWs_Port, GPIO_Pin_6) == 0)
                {
                    MotorTick_Trig += 1000 * 60 * 16;
                }
                if(GPIO_ReadInputDataBit(SWs_Port, GPIO_Pin_7) == 0)
                {
                    MotorTick_Trig += 1000 * 60 * 32;
                }
                if(MotorTick_Now <= MotorTick_Trig)
                {
                    GPIO_SetBits(JK_Port, JK_Pin);    //引脚输出1  继电器吸合
                }
            }
            else
            {
             MotorTick_Trig = 0;
            }
             GPIO_SetBits(JK_Port,JK_Pin);
            if(GPIO_ReadInputDataBit(INPUT_Port, DS_Pin) == RESET)          //压力
            {              
              GPIO_ResetBits(JK_Port, JK_Pin);
            }

             if(GPIO_ReadInputDataBit(INPUT_Port, WS_Pin) == SET)    //液位
            {
                GPIO_ResetBits(JK_Port, JK_Pin);
            }

         if(GPIO_ReadInputDataBit(INPUT_Port, DK_Pin) == RESET)    //强制启动
            {
                GPIO_SetBits(JK_Port, JK_Pin);
            }
        }


        Delay_ms(10); //滴答定时器延时
       // delay(10);    //while延时

    // Delay_ms(10); //滴答定时器延时

      }

    }

使用特权

评论回复
沙发
liunanmi| | 2019-9-11 17:58 | 只看该作者
   TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CKD_DIV1;
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  你这两个什么鬼??

使用特权

评论回复
板凳
三年级小学生|  楼主 | 2019-9-11 18:05 | 只看该作者
liunanmi 发表于 2019-9-11 17:58
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CKD_DIV1;
    TIM_TimeBaseInitStructure.TIM_Count ...


设置时钟分割:TDTS = Tck_tim
TIM向上计数模式

使用特权

评论回复
地板
三年级小学生|  楼主 | 2019-9-11 18:07 | 只看该作者
liunanmi 发表于 2019-9-11 17:58
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CKD_DIV1;
    TIM_TimeBaseInitStructure.TIM_Count ...

大佬 我是初学者 有啥 毛病 还请 您指出来  初始化 是之前看网上 自己修改的

使用特权

评论回复
5
liunanmi| | 2019-9-11 18:14 | 只看该作者
你这定义的两个变量名是一样的,还没看出来??

使用特权

评论回复
6
三年级小学生|  楼主 | 2019-9-11 18:23 | 只看该作者
liunanmi 发表于 2019-9-11 18:14
你这定义的两个变量名是一样的,还没看出来??

谢谢 大佬 我已改过来,试了一下 还是进入不了延时 ,延时 是想二进制 时间可叠加

使用特权

评论回复
7
liunanmi| | 2019-9-11 18:30 | 只看该作者
三年级小学生 发表于 2019-9-11 18:23
谢谢 大佬 我已改过来,试了一下 还是进入不了延时 ,延时 是想二进制 时间可叠加 ...

定时器中断进不了吗? 前面定义的delay()====后面怎么来了个Delay_ms()

使用特权

评论回复
8
三年级小学生|  楼主 | 2019-9-11 18:37 | 只看该作者
liunanmi 发表于 2019-9-11 18:30
定时器中断进不了吗? 前面定义的delay()====后面怎么来了个Delay_ms() ...

       一个 delay(10);    //while延时
     Delay_ms(10); //滴答定时器延时
  

使用特权

评论回复
9
liunanmi| | 2019-9-12 08:55 | 只看该作者
主函数里的逻辑不对吧!!定时器的中断应该能进吧?先测一下中断能否进入!

使用特权

评论回复
10
sjnh| | 2019-9-12 09:08 | 只看该作者
不进中断的判断条件是什么,就是你怎么确定没有进入中断?
例如后面几个操作都是怎么定义的,几个if

使用特权

评论回复
11
香水城| | 2019-9-12 10:40 | 只看该作者
强烈建议你基于现有最新的 Cube库开着手编程,毕竟你是新手。

以你现状来看,借助调试工具看看定时器是否启动、相关中断是否使能,再就是检查下.s启动文件是否选择正确。

使用特权

评论回复
12
三年级小学生|  楼主 | 2019-9-12 14:45 | 只看该作者
香水城 发表于 2019-9-12 10:40
强烈建议你基于现有最新的 Cube库开着手编程,毕竟你是新手。

以你现状来看,借助调试工具看看定时器是否 ...

好的 我会去尝试的

使用特权

评论回复
13
三年级小学生|  楼主 | 2019-9-12 14:48 | 只看该作者
liunanmi 发表于 2019-9-12 08:55
主函数里的逻辑不对吧!!定时器的中断应该能进吧?先测一下中断能否进入! ...

饿呢 ,好我测一下

使用特权

评论回复
14
三年级小学生|  楼主 | 2019-9-12 14:49 | 只看该作者
sjnh 发表于 2019-9-12 09:08
不进中断的判断条件是什么,就是你怎么确定没有进入中断?
例如后面几个操作都是怎么定义的,几个if ...

  if 判断的是 引脚是否被拉低

使用特权

评论回复
15
三年级小学生|  楼主 | 2019-9-19 09:43 | 只看该作者
sjnh 发表于 2019-9-12 09:08
不进中断的判断条件是什么,就是你怎么确定没有进入中断?
例如后面几个操作都是怎么定义的,几个if ...

别的都测过了  唯独中断进不去

使用特权

评论回复
16
三年级小学生|  楼主 | 2019-9-19 09:44 | 只看该作者
liunanmi 发表于 2019-9-12 08:55
主函数里的逻辑不对吧!!定时器的中断应该能进吧?先测一下中断能否进入! ...

  别的都可以 就是中断进不去 换了TIM7 也不行

使用特权

评论回复
17
liunanmi| | 2019-9-19 20:56 | 只看该作者
三年级小学生 发表于 2019-9-19 09:44
别的都可以 就是中断进不去 换了TIM7 也不行

系统时钟设置了么??

使用特权

评论回复
18
三年级小学生|  楼主 | 2019-9-20 08:24 | 只看该作者
liunanmi 发表于 2019-9-19 20:56
系统时钟设置了么??

  好了  不知道是设置问题 还是别的问题  我换了TIM3  进得去

使用特权

评论回复
19
kingkits| | 2019-9-20 10:09 | 只看该作者
貌似你还要看看中断向量表有没有你这个函数的调用

使用特权

评论回复
20
八层楼| | 2019-10-12 12:48 | 只看该作者
呵呵呵 低级错误啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

15

帖子

0

粉丝