STM32F103 72MHz时钟设置

将系统时钟初始化到72MHz的函数

根据数据手册和库函数,设置STM32时钟为72MHz
  1. 这是.c文件
#include "clock.h"

void Set_SysClockTo72M(void)
{
   
  	unsigned int faultTime = 0;
	unsigned int rccCrHserdy = 0;
	unsigned int rccCrPLLrdy = 0;
	
	rRCC_CR = RCC_CR_RESET;
	rRCC_CR &= ~(1<<16);
	rRCC_CR |= (1<<16);	
	
	do
	{
   
		rccCrHserdy = rRCC_CR & (1<<17);
		faultTime++;
	}
	while ((faultTime<0x0FFFFFFF) && (rccCrHserdy==0));
	
	if (
<think>好的,用户的问题是关于如何在STM32F103C8T6上正确配置时钟以支持PS2手柄的时钟配置教程。我需要根据提供的引用资料和现有的知识来构建一个清晰的回答。 首先,我得确认用户的需求。他们可能正在尝试将PS2手柄连接到STM32F103C8T6微控制器,但在配置时钟时遇到了问题。需要指导他们如何设置时钟,以确保PS2手柄的通信正常。 查阅提供的引用,引用[3]提到使用STM32Cube和HAL库来配置工程,这可能涉及到时钟树的配置。引用[4]中的代码片段显示预分频器的设置,这可能与定时器配置有关,而PS2手柄可能需要特定的时钟频率来进行数据通信。 接下来,我需要分步骤解释配置过程。首先,系统时钟配置是关键,因为PS2手柄的通信协议(如SPI或UART)需要正确的时钟频率。用户可能需要将主频设置72MHz,这是STM32F103的常见配置。然后,配置SPI或GPIO的时钟,确保相关外设的时钟使能。 另外,用户可能需要配置定时器或PWM来控制舵机或其他执行机构,如引用[4]中的舵机控制。但问题主要集中在PS2手柄的时钟配置,所以需要专注于通信接口的时钟设置。 需要注意可能的错误点,比如时钟源选择错误、分频系数设置不当导致波特率不匹配,或者外设时钟未启用。此外,用户可能遇到串口信号问题,如引用[2]提到的串口无信号或异常,这可能与时钟配置不当有关。 最后,生成相关问题,帮助用户进一步解决问题,例如询问SPI配置步骤或故障排除方法。</think>### STM32F103C8T6 PS2手柄时钟配置教程 在STM32F103C8T6上配置时钟以支持PS2手柄通信,需重点关注**系统主时钟**和**外设时钟(如SPI/UART)**的配置。以下是具体步骤: --- #### 1. **系统时钟配置** 通过STM32CubeMX工具配置系统时钟为**72MHz**(STM32F103最高主频): 1. 选择时钟源为外部高速晶振(HSE) 2. 配置PLL倍频系数为$\times 9$ $$ \text{HSE频率}(8\text{MHz}) \times \text{PLL倍频系数}(9) = 72\text{MHz} $$ 3. 设置AHB分频器为$\div 1$,APB1分频为$\div 2$,APB2分频为$\div 1$ (确保APB1不超过36MHz,APB2不超过72MHz) ![STM32时钟树配置示例](https://via.placeholder.com/300x200?text=Clock+Tree+Configuration) --- #### 2. **外设时钟配置** PS2手柄通常使用**SPI协议**或**自定义串行通信**,需启用对应外设时钟: - **SPI模式**(常见方案): ```c // 在CubeMX中启用SPI1/SPI2,配置时钟为APB2频率(72MHz) __HAL_RCC_SPI1_CLK_ENABLE(); // 使能SPI1时钟 ``` - **GPIO时钟使能**(用于数据线): ```c __HAL_RCC_GPIOA_CLK_ENABLE(); // 例如手柄DATA线接PA0~PA7 ``` --- #### 3. **定时器配置(可选)** 若需处理手柄中断信号或舵机控制(如引用[4]中的MG996舵机),需配置定时器: ```c TIM_HandleTypeDef htim; htim.Instance = TIM2; htim.Init.Prescaler = 7200 - 1; // 72MHz / 7200 = 10kHz htim.Init.Period = 100 - 1; // PWM周期10ms HAL_TIM_PWM_Init(&htim); // 初始化PWM ``` --- #### 4. **常见问题排查** - **串口无信号**(引用[2]):检查时钟分频是否导致波特率误差超过3% - **SPI通信失败**:确认SCK时钟极性(CPOL)和相位(CPHA)与手柄协议匹配 - **手柄响应延迟**:降低SPI时钟分频值(如从$\div 256$调整为$\div 16$) ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值