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

不好意思,问个定时器的问题

[复制链接]
beary 提问时间:2016-1-8 12:01 /
不好意思,各位,初学STM32,对于定时器的计算和频率的获取有些不太理解

我想稍微可以略精确的控制定时器的时间,
网上看到公式

f=(72M/(TIM_Prescaler+1)*(1+TIM_Period)) ;

不好意思,各位,初学STM32,对于定时器的计算和频率的获取有些不太理解

我想稍微可以略精确的控制定时器的时间,
网上看到公式

f=(72M/(TIM_Prescaler+1)*(1+TIM_Period)) ;


void MY_TIMERINIT(int arr,int psc)
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
        NVIC_InitTypeDef  NVIC_InitStruct;
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
        TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
        TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInitStruct.TIM_Period = arr;
        TIM_TimeBaseInitStruct.TIM_Prescaler = psc;
        TIM_TimeBaseInit( TIM2, &TIM_TimeBaseInitStruct);
        TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
        TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
        NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn;
        NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
        NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1 ;
        NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
        NVIC_Init(&NVIC_InitStruct);
}
arr = 9999;
psc = 7199;
打印的非常快
我看到代码里有
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
        TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;

看上去是APB1总线得到时钟,分频是1,看上去好像是APB1过来多少,那时钟频率就是多少。

我看到手册里的图
QQ图片20160108115944.png


APB1的时钟好像是AHB分频来的,AHB的时钟代码哪里可以看到呢?

不是很理解。。。

问的比较基础,,,我也查过一些资料

麻烦各位了  谢谢
QQ图片20160108115858.png
收藏 评论18 发布时间:2016-1-8 12:01

举报

18个回答
beary 回答时间:2016-1-8 12:20:45
太奇怪了。。怎么我设置了
int arr = 64999;
int psc = 64999;
速度还是很快。。。
beary 回答时间:2016-1-8 12:21:34
void TIM2_IRQHandler(void)
{
  if(TIM_GetITStatus(TIM2, TIM_IT_Update)!=RESET)
  {
    static int co_sec = 0;
    co_sec++;
    printf("%d\r\n",co_sec);
  }
}
beary 回答时间:2016-1-8 12:24:31
找到原因了 没有清楚标志位
beary 回答时间:2016-1-8 12:24:52
不过我还是想知道- -  时钟分配的问题,
wolfgang2015 回答时间:2016-1-8 12:27:32
f=(72M/(TIM_Prescaler+1)*(1+TIM_Period)) ;

一般
参数 (TIM_Prescaler+1) 处理成为1MHZ 的整数倍
参数 (1+TIM_Period)  对1MHZ的整数 分频成为所需要的具体频率

72MHZ  = 72000*1000

因为(TIM_Prescaler  最大 0xFF= 65535 那么 就只能处理成为 32766了 剩下的 2MHZ交给TIM_Period 来处理  TIM_Period=1999 可以处理为1秒一次的频率~~

希望对您有所帮助



xmshao 回答时间:2016-1-8 13:23:08

clk

clk

beary 回答时间:2016-1-8 14:51:58
wolfgang2015 发表于 2016-1-8 12:27
f=(72M/(TIM_Prescaler+1)*(1+TIM_Period)) ;

一般

非常感谢,
你说的让我更明白了。

不过我的提问可能没说清楚。
我比较疑惑的是72m这个值是在那个文档可以查阅到呢?


麻烦你了,谢谢
beary 回答时间:2016-1-8 14:52:13

还有配图,非常给力!非常感谢
65536 回答时间:2016-1-8 14:57:06
有啥不好意思的
12下一页

所属标签

相似问题

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