完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我不知道 ,我要帮你顶起来,一起学习!
|
|
|
|
是不是这两个总线的时钟不一样
|
|
|
|
本帖最后由 Dylan疾风闪电 于 2016-7-4 09:11 编辑
回答:APB1和APB2的时钟频率不一样。 具体F030看一下时钟树,貌似M0的是AHB 、APB。具体库中的APB1和APB2是怎么定义的,还要查证一下。---------------------------------------------------------------------------------------------------------------------------------- 从官方例程中的描述来看 PAB2源自HCLK。 |
|
|
|
差多少了?时钟频率一样吗?会不会是中断优先级的问题?
|
|
|
|
时钟初始化函数里面有定义的呀, 2条总线频率不一样的
void RCC_config() //如果外部晶振为8M,PLLCLK=SYSCLK=72M,HCLK=72M,//P2CLK=72M,P1CLK=36M,ADCCLK=36M,USBCLK=48M,TIMCLK=72M { ................. RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB不分频,HCLK=SYSCLK RCC_PCLK2Config(RCC_HCLK_Div1);//设置APB2不分频,P2CLK=HCLK =72MHz RCC_PCLK1Config(RCC_HCLK_Div2); //设置APB1 为2分频,P1CLK=HCLK/2=72/2=36MHz .................. |
|
|
|
应该是两条总线频率不同导致的,希望楼主解决后分享一下经验
|
|
|
|
1、这个您理解的话,要结合时钟树来理解;
2、您应该用到了中断吧。中断分组,中断优先级也会使得两个定时器进入中断的时间不一样哦。 3、还有溢出时间是有专门的计算公式来计算的。如果您觉得这个也是没有差别的话,用示波器比较也是一种方法。再或者打断点,用示波器看波形也可以啊。 |
|
|
|
讲道理!
既然你已经确定了 2两个挂载不同的APB上,那就去看APB上到底分配了多少频率 一般APB1和APB2上的时钟都是 系统时钟经过 AHB Prescaler 分频得到 HCLK HCLK 经过APB1 Prescaler 得到APB1时钟,而总线下TIMER的时钟源为APB1的2倍 HCLK 经过APB2 Prescaler 得到APB2时钟,而总线下TIMER的时钟源为APB2的2倍 所以,要确定APB1和APB2的频率是否一样,只要确定APB1 Prescaler和APB2 Prescaler 是否一样就对了 然后再通过预分频和计数器(基本定时器设置这2就可以了,通用和高级定时器要设置的参数会更多),得到自己想要的中断时间。 |
|
|
|
楼主来了,表示采集不到任何重要的信息,问题还没有解决
|
|
|
|
那HCLK时钟是如何定义的???? |
|
|
|
我是用16M的晶振,二分频,然后二倍频,最终系统的时钟为16M,然而APB1的时钟是16M正常,而APB2的时钟也就只有8M,根据挂载在这两个总线上的TIM3和TIM15的定时器,完全相同的配置,最终得出的结果不一样而做出的结论 |
|
|
|
hongliwei 发表于 2019-1-29 11:46 你这个库函数是STM32F030的吗?为什么对应的库函数没有找到的? |
|
|
|
|
|
|
|
FAI_weilijuan 发表于 2019-1-29 12:04 波形和预期的结果一样, |
|
|
|
查看了RCC的CFGR寄存器找不到关于APB2的总线时钟分频的设置,另外文档关于APB2的描述几乎为0 |
|
|
|
没有一个人遇到相同问题的吗?
|
|
|
|
V3.5库函数代码里面有, 通用的, 不针对某个型号的(启动文件汇编代码才针对型号)在启动文件加载时自动运行的. 你就知道不同和可改变就OK了. 如果想改, 就自定一个函数, 加上上面几条, 想改几分频就几分频(不超出手册定义的最大频率), 在主程序初始化完成后调用一次, 以后时钟就是你后面设定的跑了. 想验证就做个0.5秒取反的灯, 亮一次就1S, 数1分钟就懂了. |
|
|
|
是解决了还是没解决呢? 还有你看下F0的有没有时钟配置工具,就是在一个excel中的工具,用哪个看看。可能会更加清晰一点时钟这块。除了时钟,不知道我8楼的回复对您有没有帮助。 |
|
|
|
FAI_weilijuan 发表于 2019-1-29 14:01 是没有解决,现在项目就按照实际的结果来实现,但是还是找不到理论和现实出现问题的地方 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
991 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
970 浏览 2 评论
2080 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1177 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1599 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 15:44 , Processed in 0.782239 second(s), Total 77, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号