麒麟座MINI板串口乱码(HAL库晶振配置)

本文介绍使用STM32 HAL库时遇到的时钟配置问题,特别是当使用不同频率晶振时如何正确配置输入频率,以解决串口通信出现乱码的问题。

网上说STM32默认是8MHZ晶振,但是用其他频率的晶振都可以
之前用的ZET6的开发板,没有注意过这个问题,现在MINI板CBT6使用的12MHZ晶振,用和原来一样的串口代码输出的是乱码,变了很多个波特率都是乱码
网上有一些教程说怎么改,不过大部分是标准库的,不是HAL库,不能用,所以在HAL库中配置如下

STM32CUBEMX提供了配置时钟的页面,在下面的input frequency中之前是8MHZ,所以在PLL框中显示的是8MHZ,但是如果自己板子上是12MHZ,就可以将input frequency改为12MHZ

### 基于STM32F103C8T6最小系统使用HAL进行晶振配置 #### HAL中的晶振配置概述 在基于STM32F103C8T6的最小系统开发过程中,通过ST官方提供的HAL可以方便地完成晶振配置。具体来说,晶振配置主要涉及系统的时钟源设置以及相关GPIO的功能分配。当启用外部高速晶振(HSE)时,PD0和PD1会被自动配置晶振输入/输出引脚[^4]。 以下是详细的配置过程: #### 配置步骤说明 1. **初始化时钟源** 使用STM32CubeMX工具生成初始代码框架,在此阶段可以选择是否启用外部高速晶振(HSE)。如果选择了Crystal/Ceramic Resonator,则会将PD0和PD1分别用于晶振信号输入和输出[^4]。 2. **修改RCC模块参数** 在`stm32f1xx_hal_conf.h`文件中确认启用了相应的宏定义以支持HSE模式下的操作。例如: ```c #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ ``` 3. **编写具体的初始化函数** 下面是一个简单的示例程序片段展示如何手动调整并验证HSE状态: ```c void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /* Enable HSE Oscillator and activate PLL with HSE as source */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; // 启用外部晶体震荡器 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; // 设置PLL倍频因子 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); // 错误处理机制 } /* Initialize SysTick */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 选择PLL作为系统时钟源 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_2) != HAL_OK) { Error_Handler(); } } ``` 这段代码实现了对外部8MHz晶振的支持,并通过锁相环(PLL)将其提升至72MHz供CPU运行所需频率[^4]。 #### 注意事项 - 如果未正确连接外部晶振或者其负载电容数值不当可能导致启动失败。 - 当前版本仅适用于具备标准封装形式且带有独立XOSC管脚布局的产品型号;对于集成内部RC振荡单元变种可能有所差异,请参照对应数据手册核实细节[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值