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的通信波特率。


  • 相关阅读:
    Linux安全加固
    mosquitto
    Docker设置2375端口
    linux shell 常见的时间戳操作
    tar打包并且排除log目录
    spring boot2整合shiro安全框架实现前后端分离的JWT token登录验证
    http post
    scp命令 Linux和Windows文件互传
    git did not exit cleanly (exit code 1) 的解决办法
    windows安装TortoiseGit详细使用教程【基础篇】
  • 原文地址:https://www.cnblogs.com/siahekai/p/5840326.html
Copyright © 2011-2022 走看看