/* * @brief 时钟引脚初始化 * * @param None * * @retval None * */ static void bsp_clk_gpio_init(void) { GPIO_Config_T gpioConfig; RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOA); GPIO_ConfigStructInit(&gpioConfig); gpioConfig.pin = GPIO_PIN_8; gpioConfig.mode = GPIO_MODE_AF; gpioConfig.outtype = GPIO_OUT_TYPE_PP; gpioConfig.speed = GPIO_SPEED_50MHz; gpioConfig.pupd = GPIO_PUPD_NO; GPIO_Config(GPIOA, &gpioConfig); GPIO_ConfigPinAF(GPIOA, GPIO_PIN_SOURCE_8, GPIO_AF_PIN0); }复制/* * @brief 时钟初始化 * * @param None * * @retval None * */ void bsp_clk_init(void) { bsp_clk_gpio_init(); /* SYSCLK 作为时钟输出 */ RCM_ConfigCOC(RCM_COC_SYSCLK); }复制/* * @brief 系统时钟切为HSI * * @param None * * @retval None * */ void bsp_clk_sysclk_to_hsi(void) { /* 使能HSI并等待稳定 */ RCM_EnableHSI(); while (RCM_ReadStatusFlag(RCM_FLAG_HSIRDY) == RESET); /* 系统时钟切换为HSI */ RCM_ConfigSYSCLK(RCM_SYSCLK_SEL_HSI); while (RCM_ReadSYSCLKSource() != RCM_SYSCLK_SEL_HSI); }复制/* * @brief 系统时钟切为HSE * * @param None * * @retval None * */ void bsp_clk_sysclk_to_hse(void) { /* 使能HSE并等待稳定 */ RCM_ConfigHSE(RCM_HSE_OPEN); while (RCM_ReadStatusFlag(RCM_FLAG_HSERDY) == RESET); /* 系统时钟切换为HSE */ RCM_ConfigSYSCLK(RCM_SYSCLK_SEL_HSE); while (RCM_ReadSYSCLKSource() != RCM_SYSCLK_SEL_HSE); }复制/* * @brief 系统时钟切为PLL 12MHz * * @param None * * @retval None * */ void bsp_clk_sysclk_to_pll_12MHz(void) { /* 先关闭PLL */ RCM_DisablePLL(); while (RCM_ReadStatusFlag(RCM_FLAG_PLLRDY) == SET); /* 使能HSE并等待稳定 */ RCM_ConfigHSE(RCM_HSE_OPEN); while (RCM_ReadStatusFlag(RCM_FLAG_HSERDY) == RESET); /* 配置PLL */ RCM_ConfigCLKDIV(RCM_CLK_DIV_2); /* 8 / 2 = 4MHz */ RCM_ConfigPLL(RCM_PLL_SEL_HSE, RCM_PLLMF_3); /* 4 * 3 = 12MHz */ /* 使能PLL */ RCM_EnablePLL(); while (RCM_ReadStatusFlag(RCM_FLAG_PLLRDY) != SET); /* 系统时钟切换为PLL */ RCM_ConfigSYSCLK(RCM_SYSCLK_SEL_PLL); while (RCM_ReadSYSCLKSource() != RCM_SYSCLK_SEL_PLL); } 测试代码如下: 复制void delay(uint32_t n) { volatile uint32_t d = n; while (--d); } // 应用初始化 void app_init(void) { bsp_clk_init(); bsp_clk_sysclk_to_hsi(); }复制// 应用任务 void app_task(void) { delay(0xFFFFF); bsp_clk_sysclk_to_pll_12MHz(); delay(0xFFFFF); bsp_clk_sysclk_to_hse(); delay(0xFFFFF); bsp_clk_sysclk_to_hsi(); } 详细代码,请查看附件! CLK_SWITCH.zip (2.04 MB, 下载次数: 0) 2025-10-15 18:51 上传 点击文件名下载附件 时钟切换驱动代码
/* * @brief 时钟初始化 * * @param None * * @retval None * */ void bsp_clk_init(void) { bsp_clk_gpio_init(); /* SYSCLK 作为时钟输出 */ RCM_ConfigCOC(RCM_COC_SYSCLK); }复制/* * @brief 系统时钟切为HSI * * @param None * * @retval None * */ void bsp_clk_sysclk_to_hsi(void) { /* 使能HSI并等待稳定 */ RCM_EnableHSI(); while (RCM_ReadStatusFlag(RCM_FLAG_HSIRDY) == RESET); /* 系统时钟切换为HSI */ RCM_ConfigSYSCLK(RCM_SYSCLK_SEL_HSI); while (RCM_ReadSYSCLKSource() != RCM_SYSCLK_SEL_HSI); }复制/* * @brief 系统时钟切为HSE * * @param None * * @retval None * */ void bsp_clk_sysclk_to_hse(void) { /* 使能HSE并等待稳定 */ RCM_ConfigHSE(RCM_HSE_OPEN); while (RCM_ReadStatusFlag(RCM_FLAG_HSERDY) == RESET); /* 系统时钟切换为HSE */ RCM_ConfigSYSCLK(RCM_SYSCLK_SEL_HSE); while (RCM_ReadSYSCLKSource() != RCM_SYSCLK_SEL_HSE); }复制/* * @brief 系统时钟切为PLL 12MHz * * @param None * * @retval None * */ void bsp_clk_sysclk_to_pll_12MHz(void) { /* 先关闭PLL */ RCM_DisablePLL(); while (RCM_ReadStatusFlag(RCM_FLAG_PLLRDY) == SET); /* 使能HSE并等待稳定 */ RCM_ConfigHSE(RCM_HSE_OPEN); while (RCM_ReadStatusFlag(RCM_FLAG_HSERDY) == RESET); /* 配置PLL */ RCM_ConfigCLKDIV(RCM_CLK_DIV_2); /* 8 / 2 = 4MHz */ RCM_ConfigPLL(RCM_PLL_SEL_HSE, RCM_PLLMF_3); /* 4 * 3 = 12MHz */ /* 使能PLL */ RCM_EnablePLL(); while (RCM_ReadStatusFlag(RCM_FLAG_PLLRDY) != SET); /* 系统时钟切换为PLL */ RCM_ConfigSYSCLK(RCM_SYSCLK_SEL_PLL); while (RCM_ReadSYSCLKSource() != RCM_SYSCLK_SEL_PLL); } 测试代码如下: 复制void delay(uint32_t n) { volatile uint32_t d = n; while (--d); } // 应用初始化 void app_init(void) { bsp_clk_init(); bsp_clk_sysclk_to_hsi(); }复制// 应用任务 void app_task(void) { delay(0xFFFFF); bsp_clk_sysclk_to_pll_12MHz(); delay(0xFFFFF); bsp_clk_sysclk_to_hse(); delay(0xFFFFF); bsp_clk_sysclk_to_hsi(); } 详细代码,请查看附件! CLK_SWITCH.zip (2.04 MB, 下载次数: 0) 2025-10-15 18:51 上传 点击文件名下载附件 时钟切换驱动代码
/* * @brief 系统时钟切为HSI * * @param None * * @retval None * */ void bsp_clk_sysclk_to_hsi(void) { /* 使能HSI并等待稳定 */ RCM_EnableHSI(); while (RCM_ReadStatusFlag(RCM_FLAG_HSIRDY) == RESET); /* 系统时钟切换为HSI */ RCM_ConfigSYSCLK(RCM_SYSCLK_SEL_HSI); while (RCM_ReadSYSCLKSource() != RCM_SYSCLK_SEL_HSI); }复制/* * @brief 系统时钟切为HSE * * @param None * * @retval None * */ void bsp_clk_sysclk_to_hse(void) { /* 使能HSE并等待稳定 */ RCM_ConfigHSE(RCM_HSE_OPEN); while (RCM_ReadStatusFlag(RCM_FLAG_HSERDY) == RESET); /* 系统时钟切换为HSE */ RCM_ConfigSYSCLK(RCM_SYSCLK_SEL_HSE); while (RCM_ReadSYSCLKSource() != RCM_SYSCLK_SEL_HSE); }复制/* * @brief 系统时钟切为PLL 12MHz * * @param None * * @retval None * */ void bsp_clk_sysclk_to_pll_12MHz(void) { /* 先关闭PLL */ RCM_DisablePLL(); while (RCM_ReadStatusFlag(RCM_FLAG_PLLRDY) == SET); /* 使能HSE并等待稳定 */ RCM_ConfigHSE(RCM_HSE_OPEN); while (RCM_ReadStatusFlag(RCM_FLAG_HSERDY) == RESET); /* 配置PLL */ RCM_ConfigCLKDIV(RCM_CLK_DIV_2); /* 8 / 2 = 4MHz */ RCM_ConfigPLL(RCM_PLL_SEL_HSE, RCM_PLLMF_3); /* 4 * 3 = 12MHz */ /* 使能PLL */ RCM_EnablePLL(); while (RCM_ReadStatusFlag(RCM_FLAG_PLLRDY) != SET); /* 系统时钟切换为PLL */ RCM_ConfigSYSCLK(RCM_SYSCLK_SEL_PLL); while (RCM_ReadSYSCLKSource() != RCM_SYSCLK_SEL_PLL); } 测试代码如下: 复制void delay(uint32_t n) { volatile uint32_t d = n; while (--d); } // 应用初始化 void app_init(void) { bsp_clk_init(); bsp_clk_sysclk_to_hsi(); }复制// 应用任务 void app_task(void) { delay(0xFFFFF); bsp_clk_sysclk_to_pll_12MHz(); delay(0xFFFFF); bsp_clk_sysclk_to_hse(); delay(0xFFFFF); bsp_clk_sysclk_to_hsi(); } 详细代码,请查看附件! CLK_SWITCH.zip (2.04 MB, 下载次数: 0) 2025-10-15 18:51 上传 点击文件名下载附件 时钟切换驱动代码
/* * @brief 系统时钟切为HSE * * @param None * * @retval None * */ void bsp_clk_sysclk_to_hse(void) { /* 使能HSE并等待稳定 */ RCM_ConfigHSE(RCM_HSE_OPEN); while (RCM_ReadStatusFlag(RCM_FLAG_HSERDY) == RESET); /* 系统时钟切换为HSE */ RCM_ConfigSYSCLK(RCM_SYSCLK_SEL_HSE); while (RCM_ReadSYSCLKSource() != RCM_SYSCLK_SEL_HSE); }复制/* * @brief 系统时钟切为PLL 12MHz * * @param None * * @retval None * */ void bsp_clk_sysclk_to_pll_12MHz(void) { /* 先关闭PLL */ RCM_DisablePLL(); while (RCM_ReadStatusFlag(RCM_FLAG_PLLRDY) == SET); /* 使能HSE并等待稳定 */ RCM_ConfigHSE(RCM_HSE_OPEN); while (RCM_ReadStatusFlag(RCM_FLAG_HSERDY) == RESET); /* 配置PLL */ RCM_ConfigCLKDIV(RCM_CLK_DIV_2); /* 8 / 2 = 4MHz */ RCM_ConfigPLL(RCM_PLL_SEL_HSE, RCM_PLLMF_3); /* 4 * 3 = 12MHz */ /* 使能PLL */ RCM_EnablePLL(); while (RCM_ReadStatusFlag(RCM_FLAG_PLLRDY) != SET); /* 系统时钟切换为PLL */ RCM_ConfigSYSCLK(RCM_SYSCLK_SEL_PLL); while (RCM_ReadSYSCLKSource() != RCM_SYSCLK_SEL_PLL); } 测试代码如下: 复制void delay(uint32_t n) { volatile uint32_t d = n; while (--d); } // 应用初始化 void app_init(void) { bsp_clk_init(); bsp_clk_sysclk_to_hsi(); }复制// 应用任务 void app_task(void) { delay(0xFFFFF); bsp_clk_sysclk_to_pll_12MHz(); delay(0xFFFFF); bsp_clk_sysclk_to_hse(); delay(0xFFFFF); bsp_clk_sysclk_to_hsi(); } 详细代码,请查看附件! CLK_SWITCH.zip (2.04 MB, 下载次数: 0) 2025-10-15 18:51 上传 点击文件名下载附件 时钟切换驱动代码
/* * @brief 系统时钟切为PLL 12MHz * * @param None * * @retval None * */ void bsp_clk_sysclk_to_pll_12MHz(void) { /* 先关闭PLL */ RCM_DisablePLL(); while (RCM_ReadStatusFlag(RCM_FLAG_PLLRDY) == SET); /* 使能HSE并等待稳定 */ RCM_ConfigHSE(RCM_HSE_OPEN); while (RCM_ReadStatusFlag(RCM_FLAG_HSERDY) == RESET); /* 配置PLL */ RCM_ConfigCLKDIV(RCM_CLK_DIV_2); /* 8 / 2 = 4MHz */ RCM_ConfigPLL(RCM_PLL_SEL_HSE, RCM_PLLMF_3); /* 4 * 3 = 12MHz */ /* 使能PLL */ RCM_EnablePLL(); while (RCM_ReadStatusFlag(RCM_FLAG_PLLRDY) != SET); /* 系统时钟切换为PLL */ RCM_ConfigSYSCLK(RCM_SYSCLK_SEL_PLL); while (RCM_ReadSYSCLKSource() != RCM_SYSCLK_SEL_PLL); } 测试代码如下: 复制void delay(uint32_t n) { volatile uint32_t d = n; while (--d); } // 应用初始化 void app_init(void) { bsp_clk_init(); bsp_clk_sysclk_to_hsi(); }复制// 应用任务 void app_task(void) { delay(0xFFFFF); bsp_clk_sysclk_to_pll_12MHz(); delay(0xFFFFF); bsp_clk_sysclk_to_hse(); delay(0xFFFFF); bsp_clk_sysclk_to_hsi(); } 详细代码,请查看附件! CLK_SWITCH.zip (2.04 MB, 下载次数: 0) 2025-10-15 18:51 上传 点击文件名下载附件 时钟切换驱动代码
void delay(uint32_t n) { volatile uint32_t d = n; while (--d); } // 应用初始化 void app_init(void) { bsp_clk_init(); bsp_clk_sysclk_to_hsi(); }复制// 应用任务 void app_task(void) { delay(0xFFFFF); bsp_clk_sysclk_to_pll_12MHz(); delay(0xFFFFF); bsp_clk_sysclk_to_hse(); delay(0xFFFFF); bsp_clk_sysclk_to_hsi(); } 详细代码,请查看附件! CLK_SWITCH.zip (2.04 MB, 下载次数: 0) 2025-10-15 18:51 上传 点击文件名下载附件 时钟切换驱动代码
// 应用任务 void app_task(void) { delay(0xFFFFF); bsp_clk_sysclk_to_pll_12MHz(); delay(0xFFFFF); bsp_clk_sysclk_to_hse(); delay(0xFFFFF); bsp_clk_sysclk_to_hsi(); } 详细代码,请查看附件! CLK_SWITCH.zip (2.04 MB, 下载次数: 0) 2025-10-15 18:51 上传 点击文件名下载附件 时钟切换驱动代码
收藏0 举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
人才类勋章
26
54
0
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号