STM32F0中外设工作时钟和控制时钟的理解

转载源:http://www.51hei.com/bbs/dpj-52772-1.html

使用STM32F0芯片的I2C1,根据STM32F0参考手册描述,I2C1的时钟可以自行选择HSI或者SYSCLK。
比如选择HSI作为I2C1的工作时钟时,在用STM32CUBEMX配置生成初始化代码时,还要配置I2C1的APB时钟【如下面截图所示】
1
2

这里关于I2C1的工作时钟即source clock,和APB时钟,我们可以把它看成两部分。
一部分是I2C1的工作模块,另外一部分是其控制模块,或者说控制接口模块。
前者的工作时钟可以在HIS和SYSCLK二者间进行选择。
控制模块的时钟仍然由外设时钟PCLK提供,保障外设相关寄存器的正常工作。CPU借助于APB总线访问相关寄存器达到对I2C1工作模块的控制,包括对I2C1模块的开启和关闭。
所以上面代码做两件事:I2C1工作时钟源选择;I2C1模块工作时钟的开启使能。
至于前面提到的“还要配置I2C1的APB”应是一种误解,这里只是通过APB总线访问I2C1控制模块,实质就是通过访问寄存器来控制I2C1工作时钟的开启。
3

那stm32f070f6p6在cubemx中有配置2个uart,但为什么在clock configuration只有uart1可以配置呢?【如下图】
4
5

这个问题跟第一个问题时类似的,只是换了个外设而已。在STM32F070F6P6芯片里,USART1可以有多个时钟源,所以单列出来让用户选择。而USART2固定使用PCLK时钟,只有开启和关闭的问题,不存在其它时钟源选择。所以STM32CUBEMX就没把它有单列出来。
同样,对于USART1,除了对其工作时钟源做选择外,跟上面I2C1一样,其外设模块时钟也有关闭或使能的问题,CPU通过APB外设总线访问USART1的相关寄存器完成。

小结下,STM32芯片中有多个工作时钟源的外设很常见。不过,我们不要把外设工作时钟和CPU访问它的外设总线时钟混为一谈。很多情况下,外设工作时钟来源于其总线时钟,将总线时钟进行分频或倍频后再作为外设工作时钟。当然也有诸如上面提到的情况,外设工作时钟源跟其外设总线时钟没有关系,只是外设控制接口挂在外设总线上。还是以上面谈到的STM32F0芯片为例,ADC外设的工作时钟源也有两个,即HSI14和PCLK;RTC也有多个工作时钟源,如LSE,HSE,LSI。

不管这些外设有多少个工作时钟源,但CPU访问它们还是通过外设总线完成,比如APB总线。也就是说各个外设都是挂在相应的外设总线上的。本质上讲,CPU通过外设总线访问各外设的寄存器来发布指令或获取数据及状态,从而实现对各个外设工作的管控。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STM32时钟系统是非常复杂的,它采用了多时钟源的方法来解决不同外设时钟频率的需求。不同的外设可能需要不同的时钟频率来启动,为了兼容不同速度的设备并减少功耗,STM32时钟系统提供了多个时钟源和时钟树。\[2\] 关于STM32接口时钟和最大时钟的问题,具体的接口时钟和最大时钟频率取决于具体的STM32型号和外设。每个STM32型号都有不同的时钟树和时钟分频器,可以根据需要进行配置。一般来说,不同的外设有不同的最大时钟频率限制,可以在相关的参考手册或数据手册找到具体的信息。\[1\]\[3\] 在使用STM32时,可以根据具体的需求和外设的要求来配置接口时钟和最大时钟频率。这可以通过设置时钟源、时钟分频器和时钟树来实现。具体的配置方法可以参考相关的开发文档和参考手册。 #### 引用[.reference_title] - *1* [STM32-时钟系统详解](https://blog.csdn.net/qq_44016222/article/details/123223733)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【STM32】系统时钟RCC详解(超详细,超全面)](https://blog.csdn.net/as480133937/article/details/98845509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【STM32】初学者必读STM32时钟系统详解](https://blog.csdn.net/m0_54916619/article/details/130182697)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值