完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
不好意思,各位,初学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过来多少,那时钟频率就是多少。 我看到手册里的图 APB1的时钟好像是AHB分频来的,AHB的时钟代码哪里可以看到呢? 不是很理解。。。 问的比较基础,,,我也查过一些资料 麻烦各位了 谢谢 |
|
相关推荐
18个回答
|
|
void TIM2_IRQHandler(void)
{ if(TIM_GetITStatus(TIM2, TIM_IT_Update)!=RESET) { static int co_sec = 0; co_sec++; printf("%drn",co_sec); } }
最佳答案
|
|
|
|
|
|
|
|
找到原因了 没有清楚标志位
|
|
|
|
不过我还是想知道- - 时钟分配的问题,
|
|
|
|
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秒一次的频率~~ 希望对您有所帮助 |
|
|
|
|
|
非常感谢, 你说的让我更明白了。 不过我的提问可能没说清楚。 我比较疑惑的是72m这个值是在那个文档可以查阅到呢? 麻烦你了,谢谢 |
|
|
|
|
|
|
|
有啥不好意思的
|
|
|
|
看手册RCC这一章,里面描述了各个模块使用的频率,还有就是看框图。
|
|
|
|
每个芯片手册都有个 CLOCK TREE的,那里说的很清楚了。
|
|
|
|
谢谢!! 框图看过了,不过有些地方,麻烦斑竹君了。 APB1是由AHB给的,AHB最高是72,APB1最高是36 我程序中直接就用了 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); 那请问AHB是多少呢?在程序哪儿可以看到配置的呢? |
|
|
|
AHB的频率在时钟配置那看。请问用的是标准库还是HAL?
|
|
|
|
学习ing。。。。
|
|
|
|
用的是标准库, 如果可以的话,HAL的也顺带求指教,最近一直都没有做,可以马克一下做个笔记。 非常感谢。 |
|
|
|
标准库在system_stm32f10x.c中查看定义的主频频率,HAL库可以通过STM32Cube来查看,或者SystemClock_Config里面的配置计算。
|
|
|
|
|
|
HAL库可通过STM32Cube,在clock Configuration里查看。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1763 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
917 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1304 浏览 1 评论
LL库F030进行3个串口收发,2个串口为232,一个为485,长时间后,会出现串口1停止运行,另外两个正常,只有重启复原
1769 浏览 1 评论
559 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-15 01:22 , Processed in 1.316177 second(s), Total 79, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号