ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU

澳洲国际天津时时彩彩票: [STM32F0] 那位大佬大神帮忙看一下 为什么TIM6定时器延时 不起作用

永利游戏开户直营
598|18
楼主


    #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); //滴答定时器延时

      }

    }

沙发
| 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
| 2019-9-11 18:14 | 只看该作者
你这定义的两个变量名是一样的,还没看出来??
6
 楼主 | 2019-9-11 18:23 | 只看该作者
liunanmi 发表于 2019-9-11 18:14
你这定义的两个变量名是一样的,还没看出来??

试了一下 还是进入不了延时 ,延时 是想二进制 时间可叠加
7
| 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
| 2019-9-12 08:55 | 只看该作者
主函数里的逻辑不对吧!!定时器的中断应该能进吧?先测一下中断能否进入!
10
| 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
| 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
| 2019-9-20 10:09 | 只看该作者
貌似你还要看看中断向量表有没有你这个函数的调用
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

永利游戏开户直营 快速回复 返回顶部 返回列表
永利游戏开户直营 维多利亚YG电子开奖号历史 澳门新葡京娱乐网址游戏 杏彩官方 江山AG国际馆计划群大全
钱柜重庆时时彩彩票官网 mg三魔法 tt江西时时彩计划软件 澳门太阳城北京PK10彩票官网 女神国际湖南快乐十分开奖结果
百家乐安徽快3开奖时刻表 永利吉利彩票走势图 免费空间背景音乐 申博快乐十分时时彩平台网址 江山幸运农场时时彩计划软件
澳门金三角娱乐登入 重庆时时彩网址大全登入 www.99sbc.com 大发888北京PK10时时彩平台网址 tt广东11选5官网