OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3942|回复: 1

F103定时1s不准确,接近两秒了,求大神帮帮我把

[复制链接]

1

主题

12

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2019-1-6
在线时间
42 小时
发表于 2020-12-13 01:01:25 | 显示全部楼层 |阅读模式
1金钱
#include "stm32f10x.h"
#include "bsp_basictim.h"
#include "rccclkconfig.h"
#include "sys.h"
#include "usart.h"         
#include "stdio.h"
#include "bsp_led.h"

uint16_t time=0;
int main()
{

HSE_SetSysClk(RCC_PLLMul_9);  //系统时钟HCLK被配置为8M*9=72M
  LED_GPIO_Config();

        BASIC_TIM_Init();
        BASIC_TIM_APBxClock_FUN(BASIC_TIM_CLK, ENABLE);
        while(1)
        {
               
                if(time==1000)
                {
                        time=0;
                        LED1_TOGGLE;
                }
        }

//////////////////
#include "bsp_basictim.h"

static void BASIC_TIM_NVIC_Config(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;
    // 设置中断组为0
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);               
                // 设置中断来源
    NVIC_InitStructure.NVIC_IRQChannel = BASIC_TIM_IRQ ;       
                // 设置主优先级为 0
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;         
          // 设置抢占优先级为3
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;       
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

static void BASIC_TIM_Config(void)
{
                TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
               
                // 开启定时器时钟,即内部时钟CK_INT=72M
    BASIC_TIM_APBxClock_FUN(BASIC_TIM_CLK, ENABLE);
       
                // 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断
    TIM_TimeBaseStructure.TIM_Period = BASIC_TIM_Period;       

          // 时钟预分频数为
    TIM_TimeBaseStructure.TIM_Prescaler= BASIC_TIM_Prescaler;
       
                // 时钟分频因子 ,基本定时器没有,不用管
    //TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
               
                // 计数器计数模式,基本定时器只能向上计数,没有计数模式的设置
    //TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
               
                // 重复计数器的值,基本定时器没有,不用管
                //TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
       
          // 初始化定时器
    TIM_TimeBaseInit(BASIC_TIM, &TIM_TimeBaseStructure);
               
                // 清除计数器中断标志位
    TIM_ClearFlag(BASIC_TIM, TIM_FLAG_Update);
          
                // 开启计数器中断
    TIM_ITConfig(BASIC_TIM,TIM_IT_Update,ENABLE);
               
                // 使能计数器
    TIM_Cmd(BASIC_TIM, ENABLE);
}

void BASIC_TIM_Init(void)
{
        BASIC_TIM_NVIC_Config();
        BASIC_TIM_Config();
}
///////#include "bsp_led.h"   

/**
  * @brief  初始化控制LED的IO
  * @param  无
  * @retval 无
  */
void LED_GPIO_Config(void)
{               
                /*定义一个GPIO_InitTypeDef类型的结构体*/
                GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE, ENABLE);//使能PB,PE端口时钟

       
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
//        GPIO_ResetBits(GPIOB,GPIO_Pin_5);                       
LED1_OFF;
               
        GPIO_Init(GPIOE,&GPIO_InitStructure);
//        GPIO_ResetBits(GPIOE,GPIO_Pin_5);                       
        LED0_OFF;
               
               
}
}

TIM—基本定时器-定时.rar

279.86 KB, 下载次数: 2

定时器6定时1s不准确

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

12

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2019-1-6
在线时间
42 小时
 楼主| 发表于 2020-12-13 01:02:11 | 显示全部楼层
#ifndef __BSP_BASICTIM_H
#define __BSP_BASICTIM_H
#include "stm32f10x.h"
#endif
/********************基本定时器TIM参数定义,只限TIM6、7************/
#define BASIC_TIM6 //如果使用的是TIM7,注释掉本行即可
#ifdef         BASIC_TIM6

#define BASIC_TIM                                                                                        TIM6
#define BASIC_TIM_APBxClock_FUN                        RCC_APB1PeriphClockCmd
#define BASIC_TIM_CLK                                                                  RCC_APB1Periph_TIM6
#define BASIC_TIM_Prescaler                                                71
#define BASIC_TIM_Period                                                        1000-1
#define BASIC_TIM_IRQ                                                                        TIM6_IRQn
#define BASIC_TIM_IRQHandler                                        TIM6_IRQHandler

#else
#define BASIC_TIM                                                                                        TIM7
#define BASIC_TIM_APBx_Clock_FUN                        RCC_APB1PeriphClockCmd
#define BASIC_TIM_CLK                                                                        RCC_APB1Periph_TIM7
#define BASIC_TIM_Prescaler                                                71
#define BASIC_TIM_Period                                                        1000-1
#define BASIC_TIM_IRQ                                                                        TIM7_IRQn
#define BASIC_TIM_IRQHandler                                        TIM7_IRQHandler

#endif
static void BASIC_TIM_NVIC_Config(void);

void BASIC_TIM_Init(void);
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 20:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表