嵌入式硬件系统的时钟系统

简介: 嵌入式硬件系统的时钟系统

嵌入式硬件系统的时钟系统

在嵌入式硬件系统中,时钟系统是至关重要的,它负责为处理器、外设和其他系统组件提供同步的时序信号。时钟系统包括主时钟源、时钟分频器、时钟控制器等组件,下面将通过示例代码详细说明。
 1. 时钟初始化
在嵌入式系统中,首先需要初始化时钟系统以确保各个组件能够按预期工作。
 示例代码(使用STM32CubeMX生成的初始化代码):

#include "main.h"
#include "stm32f4xx_hal.h"
void SystemClock_Config(void);
int main(void) {
    HAL_Init();
    SystemClock_Config();
    // 初始化其他系统组件
    // ...
    while (1) {
        // 主循环
    }
}
void SystemClock_Config(void) {
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    // 初始化时钟源
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
    RCC_OscInitStruct.HSIState = RCC_HSI_ON;
    RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
    RCC_OscInitStruct.PLL.PLLM = 16;
    RCC_OscInitStruct.PLL.PLLN = 336;
    RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;
    RCC_OscInitStruct.PLL.PLLQ = 7;
    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
        Error_Handler();
    }
    // 初始化系统时钟
    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
                                | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) {
        Error_Handler();
    }
}



 2. 时钟切换
在某些情况下,可能需要在运行时切换系统时钟源或改变时钟频率。
 示例代码(切换系统时钟源):

void SwitchToExternalClock(void) {
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    // 配置外部时钟源
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
    RCC_OscInitStruct.HSEState = RCC_HSE_ON;
    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
        Error_Handler();
    }
    // 切换系统时钟
    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
                                | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSE;
    if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) {
        Error_Handler();
    }
}



 3. 时钟频率测量
有时需要测量时钟频率,以确保系统工作在预期的频率下。
示例代码(测量系统时钟频率):
void MeasureSystemClock(void) {
   uint32_t system_clock = HAL_RCC_GetSysClockFreq();
   // 使用system_clock进行相应操作
}

 4. 时钟中断
时钟系统通常还会触发中断,以便及时处理特定的时钟相关事件。
示例代码(时钟中断处理函数):

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
    if (htim->Instance == TIM2) {
        // 处理TIM2定时器中断事件
    }
}


以上是关于嵌入式硬件系统时钟系统的示例说明。通过适当配置和管理时钟系统,可以确保系统各组件的正常运行和协调。

相关文章
|
7月前
|
前端开发
【前端设计】寄存器与主功能电路为异步时钟时的功能影响探索
【前端设计】寄存器与主功能电路为异步时钟时的功能影响探索
|
7月前
|
自然语言处理 监控 算法
|
5天前
|
存储 传感器 运维
基于PLC系统的设计_kaic
基于PLC系统的设计_kaic
|
5天前
|
传感器 存储 安全
基于单片机的定时温控系统的设计_kaic
基于单片机的定时温控系统的设计_kaic
|
5天前
|
监控 算法 定位技术
LabVIEW压电驱动迟滞补偿控制
LabVIEW压电驱动迟滞补偿控制
|
5天前
|
数据采集 传感器 数据可视化
LabVIEW是如何控制硬件的?
LabVIEW是如何控制硬件的?
|
5天前
|
传感器
嵌入式硬件系统的中断系
嵌入式硬件系统的中断系
17 1
|
9月前
|
存储 数据建模 Serverless
微型计算机系统
4.2 Excel的基本操作 4.2.1工作簿的新建和打开 1、工作簿与工作表 工作簿是指在excel中用来存储并处理数据的文件,其扩展名是.xlsx。 各工作簿是由工作表组成的,每个工作簿都可以包含一个或多个工作表,用户可以用其中的工作表来组织种相关数据。工作表不能单独存盘,只有工作簿才能以文件的形式存盘;因此执行保存命令式对工作簿执行的,会将其中所有工作表一起保存。 1)工作簿(Sheet)是一个由行和列交叉排列的二维表格,也称作电子表格,用于组织和分析数据。 2)Excel的一个工作簿默认有3个工作表,用户可以根据需要添加工作表,一个工作簿最多可以包括无数个工作表 3)但新建时
|
11月前
|
异构计算
基于FPGA的电梯控制系统设计
在本项目中一共分为了五个模块:时钟分频、按键消抖、状态控制、蜂鸣、译码显示及流水指示灯。
|
C语言 芯片
基于单片机的作息时间控制钟系统
基于单片机的作息时间控制钟系统
198 0
基于单片机的作息时间控制钟系统