打印

外设时钟源频率和gpio口的频率设置关系?

[复制链接]
2544|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wuliangtianzu|  楼主 | 2016-3-17 13:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void RCC_Configuration(void)
{
        /* 定义枚举类型变量 HSEStartUpStatus */
        ErrorStatus HSEStartUpStatus;

          /* 复位系统时钟设置*/
          RCC_DeInit();
          /* 开启HSE*/
          RCC_HSEConfig(RCC_HSE_ON);
          /* 等待HSE起振并稳定*/
          HSEStartUpStatus = RCC_WaitForHSEStartUp();
        /* 判断HSE起是否振成功,是则进入if()内部 */
          if(HSEStartUpStatus == SUCCESS)
          {
            /* 选择HCLK(AHB)时钟源为SYSCLK 1分频 */
            RCC_HCLKConfig(RCC_SYSCLK_Div1);
            /* 选择PCLK2时钟源为 HCLK(AHB) 1分频 */
            RCC_PCLK2Config(RCC_HCLK_Div1);
            /* 选择PCLK1时钟源为 HCLK(AHB) 2分频 */
            RCC_PCLK1Config(RCC_HCLK_Div2);
        
        
            /* 设置FLASH延时周期数为2 */
            FLASH_SetLatency(FLASH_Latency_2);
            /* 使能FLASH预取缓存 */
            FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
        
        
            /* 选择锁相环(PLL)时钟源为HSE 1分频,倍频数为9,则PLL输出频率为 8MHz * 9 = 72MHz */
            RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
            /* 使能PLL */
            RCC_PLLCmd(ENABLE);
            /* 等待PLL输出稳定 */
            while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
            /* 选择SYSCLK时钟源为PLL */
            RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
            /* 等待PLL成为SYSCLK时钟源 */
            while(RCC_GetSYSCLKSource() != 0x08);
          }
          /* 打开APB2总线上的GPIOA时钟*/
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
}


/*******************************************************************************
* 函数名          : GPIO_Configuration
* 函数描述            : 设置各GPIO端口功能
* 输入参数      : 无
* 输出结果      : 无
* 返回值        : 无
*******************************************************************************/
void GPIO_Configuration(void)
{
          GPIO_InitTypeDef GPIO_InitStructure;

          /* 设置PA2,PA3,PA1口为推挽输出,最大翻转频率为50MHz*/
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 ;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
          GPIO_Init(GPIOA , &GPIO_InitStructure);
}
请问一下,时钟配置中选择PLL为系统时钟72Mhz,经过两次一分频,给APB2上的外设提供的时钟频率为pclk2 仍为72mhz .但是在下面的GPIO口的配置中,端口的最大频率只为50Mhz,这是不是有问题呢?

相关帖子

沙发
ahhsyf| | 2016-3-17 22:59 | 只看该作者
没问题,这个由IO配置寄存器决定的。外设的时钟可以小于总线的时钟。

使用特权

评论回复
板凳
wuliangtianzu|  楼主 | 2016-3-18 10:14 | 只看该作者
ahhsyf 发表于 2016-3-17 22:59
没问题,这个由IO配置寄存器决定的。外设的时钟可以小于总线的时钟。

送给外设的时钟信号是有总线接出的pclk2 决定的吧,那么72兆的频率通过端口配置的最大50兆的通道,不会产生失真吗

使用特权

评论回复
地板
wangjiahao88| | 2016-3-18 20:18 | 只看该作者
那么72兆的频率通过端口配置的最大50兆的通道,不会产生失真吗

-------
失真,应该是会的吧!

------
需加整形或者门电路!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

27

帖子

0

粉丝