硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2583|回复: 0
收起左侧

[RCC] 为什么H7所有官方例程都没有使能APB3和APB4时钟的原因说明

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106692
QQ
发表于 2018-7-23 10:11:22 | 显示全部楼层 |阅读模式
HAL库里面仅给了下面6个:
  1. /** @defgroup RCC_System_Clock_Type  RCC System Clock Type
  2.   * @{
  3.   */
  4. #define RCC_CLOCKTYPE_SYSCLK           ((uint32_t)0x00000001)
  5. #define RCC_CLOCKTYPE_HCLK             ((uint32_t)0x00000002)
  6. #define RCC_CLOCKTYPE_D1PCLK1          ((uint32_t)0x00000004)
  7. #define RCC_CLOCKTYPE_PCLK1            ((uint32_t)0x00000008)
  8. #define RCC_CLOCKTYPE_PCLK2            ((uint32_t)0x00000010)
  9. #define RCC_CLOCKTYPE_D3PCLK1          ((uint32_t)0x00000020)
复制代码


标准的总线初始化是下面这样,也仅初始了上面6个:
  1. /* Select PLL as system clock source and configure  bus clocks dividers */
  2.         RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 | \
  3.                                                                  RCC_CLOCKTYPE_PCLK2  | RCC_CLOCKTYPE_D3PCLK1);

  4.         RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  5.         RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
  6.         RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
  7.         RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;  
  8.         RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
  9.         RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
  10.         RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
  11.         ret = HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);
  12.         if(ret != HAL_OK)
  13.         {
  14.                 Error_Handler();
  15.         }
复制代码


那么问题来了:
RCC_CLOCKTYPE_SYSCLK  代表系统时钟
RCC_CLOCKTYPE_HCLK     代表AHB1,2,3,4时钟
RCC_CLOCKTYPE_PCLK1    代表APB1时钟
RCC_CLOCKTYPE_PCLK2    代表APB2时钟

RCC_CLOCKTYPE_D1PCLK1和RCC_CLOCKTYPE_D3PCLK1代表的是什么鬼?怎么没有RCC_CLOCKTYPE_PCLK3和RCC_CLOCKTYPE_PCLK4,最终的问题就在这里了。

其实RCC_CLOCKTYPE_D1PCLK1就是RCC_CLOCKTYPE_PCLK3,而RCC_CLOCKTYPE_D3PCLK1就是RCC_CLOCKTYPE_PCLK4,为什么这么说,根本原因看下面这个图就清晰了

PCLK3是D1PPRE分频产生的。
PCLK4是D3PPRE分频参数的。

所以HAL库起了这么一个神奇的名字。
QQ截图20180723100105.png


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-30 06:47 , Processed in 0.158600 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表