你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103计时器TIM1不准

[复制链接]
liweizhang 提问时间:2018-5-16 17:00 /
大家好!
我今天想用STM32F103C8T6的TIM1作为1KHz定时器,但是,注意到该定时器的中断频率不正确。请大家帮助一下啊,先谢谢啦

代码如下:
#include "TIM1.h"
/*
* 函数名:TIM1_Mode_Config
* 描述  :TIM1 输出PWM信号初始化,只要调用这个函数         
* 输入  :无
* 输出  :无
* 调用  :外部调用
*/
void TIM1_Init(void)
{
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
        NVIC_TIM1_Configuration();
//        TIM1_GPIO_Config();
        TIM1_Configuration();
}
void NVIC_TIM1_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        //打开TIM1的全局中断,在中断中判断是更新中断还是捕捉中断
        /* Enable the TIM1 global Interrupt */
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
        NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}
/*
* 函数名:TIM1_GPIO_Config
* 描述  :配置TIM1复用输出PWM时用到的I/O
* 输入  :无
* 输出  :无
* 调用  :内部调用
*/


void TIM1_GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;


        GPIO_StructInit(&GPIO_InitStructure);
        /*转速输入,捕捉输入模式 用PA0配置成 */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        /*
        GPIO_StructInit(&GPIO_InitStructure);
                //转速输入,捕捉输入模式 用PA0配置成
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);*/
}
//转速输入捕捉,
void TIM1_Configuration(void)
{

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_ICInitTypeDef  TIM_ICInitStructure;
//TIM_ICInitTypeDef  TIM_ICInitStructure;
/* Time Base configuration */

TIM_DeInit(TIM1);
TIM_TimeBaseStructure.TIM_Prescaler = 7200-1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = 10000-1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
//TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

/*        TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;                                                                       
        TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;
        TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
        TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
        TIM_ICInitStructure.TIM_ICFilter = 0;

        TIM_ICInit(TIM1, &TIM_ICInitStructure);
*/
//         TIM_TIxExternalClockConfig(TIM1,TIM_TIxExternalCLK1Source_TI1,TIM_ICPolarity_Rising,0);//设置为外部输入
        //TIM_ETRClockMode2Config(TIM1, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
//         TIM_SetCounter(TIM1, 0);   // 清零计数器CNT
        TIM_ClearFlag(TIM1, TIM_FLAG_Update);                                                                          /* 清除溢出中断标志 */
        TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
        //TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);
        TIM_ARRPreloadConfig(TIM1, ENABLE);                    // 使能TIM4重载寄存器ARR

        TIM_Cmd(TIM1,ENABLE);//使能计数  

}
void TIM1_Configuration1(void) //??????????
{
        TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;

           //??TIMER1?????
        TIM_DeInit(TIM1);

           TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
        TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
        TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); // Time base configuration

        TIM_ETRClockMode2Config(TIM1, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
        TIM_SetCounter(TIM1, 0);   // 清零计数器CNT       
        TIM_Cmd(TIM1, ENABLE);
}  


收藏 评论8 发布时间:2018-5-16 17:00

举报

8个回答
与龙共舞 回答时间:2018-5-16 17:09:08
72MHZ的话
7200-1----10000-1----->1HZ
7200-1----10-1--------->1000HZ
TIM_TimeBaseStructure.TIM_Period = 10-1;

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

toofree 回答时间:2018-5-16 18:08:20
请先跑几个标准库的程序。
“STM32F10x_StdPeriph_Lib_V3.1.2\Project\STM32F10x_StdPeriph_Examples\TIM\TimeBase”

你的程序不全。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

feixiang20 回答时间:2018-5-17 00:21:42
查看了类似疑问,不知道是不是临界代码的问题

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

liweizhang 回答时间:2018-5-17 08:12:39
非常感谢大家的帮助
liweizhang 回答时间:2018-5-17 09:15:58
与龙共舞 发表于 2018-5-16 17:09
72MHZ的话
7200-1----10000-1----->1HZ
7200-1----10-1--------->1000HZ

按照上述的参数修改了,计时时间仍然不是1000hz,是不是时钟那里设置有问题呢?
yklstudent-1794 回答时间:2018-5-17 09:19:10
那就先确认系统时钟

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

xiaoqin2046 回答时间:2018-5-17 09:39:44
学习了

评分

参与人数 1ST金币 -1 收起 理由
zero99 -1 灌水处罚

查看全部评分

五哥1 回答时间:2018-5-31 18:37:34
这几个函数都没有错,你的TIM的调用程序?要不你用CUBE快速生成一个测试程序看看。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版