zoukankan      html  css  js  c++  java
  • uCOS iii/uCOS Ⅲ系统时钟解释及CAN通信速度的配置

    系统在启动时调用BSP_Init();该函数会初始化系统的各部分时钟。

    void  BSP_Init (void)
    {
    BSP_RCC_Configuration();//初始化系统时钟
        BSP_LED_Init();                                             /* Initialize the I/Os for the LED      controls.       */

    }

    所以分析BSP_RCC_Configuration()函数如下:

    static void BSP_RCC_Configuration(void)
    {
    ErrorStatus HSEStartUpStatus;
    RCC_DeInit();//复位RCC模块的寄存器,复位成缺省值
    RCC_HSEConfig(RCC_HSE_ON);//开启 External High Speed oscillator (HSE)时钟,用HSE的时钟作为PLL的时钟源 
    HSEStartUpStatus=RCC_WaitForHSEStartUp();//获取HSE启动状态
    if(HSEStartUpStatus==SUCCESS)//如果HSE启动成功
    {
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);


    FLASH_SetLatency(FLASH_Latency_2);


    RCC_HCLKConfig(RCC_SYSCLK_Div1);


    RCC_PCLK2Config(RCC_HCLK_Div1);
    RCC_PCLK1Config(RCC_HCLK_Div2);




    RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//配置PLL倍频源为HSE,不分频,倍频倍数为9,所以系统时钟8M*9=72M


    RCC_PLLCmd(ENABLE); //启动PLL 


    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//配置系统时钟
    //while(RCC_GetSYSCLKSource()!=0x80);
    while(RCC_GetSYSCLKSource() != 0x08);//检查是否将HSE 9倍频后作为系统时钟
    RCC_ClockSecuritySystemCmd(ENABLE);


    }
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
    }

    这样完成了系统72M时钟的配置,然后根据时钟树如下


    可知系统时钟,SYSCLK可由三个设备提供,分别为高速内部时钟HSI,PLLCLK,HSE(外部晶振),PCLK1该函数RCC_PCLK1Config(RCC_HCLK_Div2);可知将其配置为了系统时钟2分频,即36MHz。那么挂接在PCLK1上的设备的时钟就是36MHz。


    由寄存器应该可知系统那些外设挂接在APB1上,例如我们要对CAN进行初始化,则已经知道APB1的外设36MHz,则如果设置如下

      CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;   //BTR-SJW 重新同步跳跃宽度 1个时间单元
      CAN_InitStructure.CAN_BS1=CAN_BS1_2tq;   //BTR-TS1 时间段1 占用了2个时间单元
      CAN_InitStructure.CAN_BS2=CAN_BS2_3tq;   //BTR-TS1 时间段2 占用了3个时间单元

      CAN_InitStructure.CAN_Prescaler =6;

    则有

     定义了时间单元的时间长度 36/(1+2+3)/6=1Mbps,即为CAN的通信波特率。


  • 相关阅读:
    Docker-Compose搭建单体SkyWalking 6.2
    Docker搭建MySQL主从集群,基于GTID
    【简记】修改Docker数据目录位置,包含镜像位置
    【拆分版】Docker-compose构建Kibana单实例,基于7.1.0
    【拆分版】Docker-compose构建Logstash多实例,基于7.1.0
    【拆分版】Docker-compose构建Zookeeper集群管理Kafka集群
    命令行模式和python交互模式
    详解 HTTPS、TLS、SSL、HTTP区别和关系
    windows下如何查看进程、端口占用、杀死进程教程
    pycharm最常用的快捷键总结
  • 原文地址:https://www.cnblogs.com/siahekai/p/11000824.html
Copyright © 2011-2022 走看看