uCOS iii/uCOS Ⅲ系统时钟解释及CAN通信速度的配置

摘要:
系统在startup_ Init()时调用BSP;此函数初始化系统各部分的时钟=0x08);//检查倍频后HSE9是否用作系统时钟RCC _ ClockSecuritySystemCmd;}RCC_ APB2PeriphClockCmd;}这完成了系统72M时钟的配置。然后,根据时钟树,系统时钟可以如下所示。SYSCLK可由三个设备提供,即高速内部时钟HSI、PLLCLK、HSE和PCLK1。功能RCC_PCLK1Config;可以看出,它被配置为系统时钟2分频,即36MHz。然后,连接到PCLK1的设备的时钟为36MHz。

系统在启动时调用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时钟的配置,然后根据时钟树如下

uCOS iii/uCOS Ⅲ系统时钟解释及CAN通信速度的配置第1张

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

uCOS iii/uCOS Ⅲ系统时钟解释及CAN通信速度的配置第2张

由寄存器应该可知系统那些外设挂接在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的通信波特率。


免责声明:文章转载自《uCOS iii/uCOS Ⅲ系统时钟解释及CAN通信速度的配置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇R语言入门:处理缺失值和数据清洗Android 蓝牙开发(1)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Nest.js 6.0.0 正式版发布,基于 TypeScript 的 Node.js 框架

开发四年只会写业务代码,分布式高并发都不会还做程序员?   Nest.js 6.0.0 正式版发布了。Nest 是构建高效、可扩展的 Node.js Web 应用程序的框架。它使用现代的 JavaScript 或 TypeScript(保留与纯 JavaScript 的兼容性),并结合 OOP(面向对象编程),FP(函数式编程)和 FRP(函数响应式编程...

STM32系统时钟RCC(基于HAL库)

基础认识 为什么要有时钟: 时钟就是单片机的心脏,其每跳动一次,整个单片机的电路就会同步动作一次。时钟的速率决定了两次动作的间隔时间。速率越快,单片机在单位时间内所执行的动作将越多。时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令。时钟系统就是CPU的脉搏,决定cpu速率。 为什么这么多个时钟源: STM32系统是复杂的,高精度、低精度、...

进程间通信ipc机制 生产者消费者模型(进程部分)

IPC 机制有两种 一个是管道 一个是队列(队列=管道+锁) 管道用来实现两个进程连接进行通信 subprocess.Popen('tasklist',shell=True,) 就相当于 p=Process(target=tasklist) 只是发送一个信号出去 就是开一个子进程 主进程要想拿到子进程命令的运行结果,子进程的运行结果就是一堆数据,放在子进程...

Modbus通讯两种传输方式

控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。 ASCII模式: : 地址 功能代码 数据数量 数据1 ... 数据n LRC高字节 LRC低字节 回车 换行...

iframe+postMessage不同源页面通信

父页面 父页面运行在8080端口,通过iframe标签引用子页面,通过postMessage发送消息给iframe中的子页面。 <template> <div class="hello"> <iframe src="http://10.10.30.5:8081" height="100%"><...

Windows phone 8 学习笔记(3) 通信(转)

Windows phone 8 可利用的数据通信方式比较广泛,在硬件支持的前提下,我们可以利用WiFi、蓝牙、临近感应等多种方式。数据交互一般通过套接字来完成,我们将在本文详细的分析。 快速导航:一、WP8套接字二、蓝牙三、NFC四、获取网络状态五、访问web的几种方式 一、WP8套接字 1)创建套接字客户端 Windows phone 8中的套接字并...