stm32cubeMX学习十二、为什么配置时钟72MHz却变成了64MHz?(基于野火STM32F103ZET6开发板)

本文介绍了在使用STM32CubeMX配置STM32F103ZET6开发板时,尝试将系统时钟设置为72MHz,但实际结果变为64MHz的问题。通过查阅资料,发现原因是需要选择外部时钟源才能达到72MHz,并详细说明了如何正确配置为72MHz的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本程序编写基于秉火霸道STM32F103ZET6运行环境。
在这里插入图片描述
这是还没有配置之前的系统时钟默认值
在这里插入图片描述
这里默认选择的是HSI(内部时钟源),将时钟频率配置为8MHz。
接下来我们根据提示将时钟源调到72MHz(最大)。
我们输入72
在这里插入图片描述
点击OK
在这里插入图片描述
于是莫名其妙的就变成了64。
在这里插入图片描述
这是为啥呢?
原因:(参考野火提供的HAL库教程)

<think>好的,用户的问题是关于STM32F103ZET6野火开发板的按键映射和配置方法。我需要先回顾一下用户提供的引用内容,看看有没有相关的信息。 首先,引用[1]提到了外部中断(按键)的使用案例,这应该和按键配置相关。里面提到硬件平台是野火开发板,软件平台是Keil MDK,可能需要用到外部中断的配置步骤。用户可能想知道如何将按键连接到GPIO,并设置中断处理函数。 然后,引用[3]中提到了游戏摇杆模块的使用,其中Z轴作为普通按键处理,使用ADC读取X、Y的模拟量。这里可能涉及到按键的GPIO配置,特别是如果按键是数字输入的话,可能需要设置上拉或下拉电阻,以及读取引脚状态的方法。 用户的问题具体是关于按键的映射,也就是每个按键对应的GPIO引脚,以及如何配置这些引脚,比如输入模式、中断方式还是轮询方式。需要明确野火开发板上的按键连接到了哪些引脚。例如,用户可能想知道开发板上的用户按键(比如BOOT0、RESET或其他自定义按键)对应的具体引脚号。 根据常见的开发板设计,野火STM32F103ZET6开发板可能有多个用户按键,例如WK_UP(PA0)、KEY1(PE3)、KEY2(PE4)等。这些按键通常连接在特定的GPIO引脚上,并且需要配置这些引脚为输入模式,可能启用内部上拉或下拉电阻,具体取决于按键的硬件电路是低电平有效还是高电平有效。 配置步骤可能包括:使能GPIO时钟,初始化GPIO为输入模式,配置中断(如果需要的话),编写中断服务函数处理按键事件。例如,使用外部中断时,需要配置NVIC,设置中断优先级,并在中断服务函数中处理按键的按下和释放。 另外,引用[2]中提到的USART配置步骤可能不直接相关,但涉及到GPIO的复用功能配置,这可能对理解GPIO配置有帮助,不过按键通常是普通的输入,不需要复用功能。 用户可能需要具体的代码示例,比如如何用标准外设库或者HAL库配置这些GPIO,以及如何读取按键状态。同时,是否需要消抖处理,或者是否使用中断方式还是轮询方式,这些都是配置时需要考虑的因素。 总结下来,回答需要包括以下几点: 1. 按键的物理引脚映射(例如KEY1对应PE3等)。 2. GPIO的配置步骤,如时钟使能、输入模式、上拉/下拉设置。 3. 中断配置方法(如使用外部中断)。 4. 示例代码片段,展示配置和读取按键的过程。 5. 可能的相关问题,如消抖处理、多按键检测等。 需要确保回答准确,引用正确的资料,例如引用[1]中的外部中断案例和引用[3]中的按键作为普通输入的情况。同时,检查是否有其他引用中的信息被遗漏,比如是否需要参考其他配置步骤。 可能还需要提醒用户查阅开发板的原理图,以确认按键的实际连接引脚,因为不同版本的开发板可能有不同的设计。如果用户没有原理图,可能需要提供常见的野火开发板按键映射作为参考。 最后,生成相关问题,帮助用户进一步学习,比如如何实现按键消抖,或者如何使用中断方式检测按键。</think>关于STM32F103ZET6野火开发板的按键映射与配置方法,以下是详细说明: ### 一、按键硬件映射 野火STM32F103ZET6开发板通常包含以下按键(以霸道V2开发板为例): 1. **WK_UP**(唤醒键):连接到PA0,高电平有效 2. **KEY1**:连接到PE3,低电平有效 3. **KEY2**:连接到PE4,低电平有效 4. **KEY3**:连接到PE2,低电平有效[^1] ### 二、配置步骤 #### 1. GPIO初始化 ```c // 使能GPIO时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOE, ENABLE); // 配置WK_UP(浮空输入) GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStruct); // 配置KEY1-3(上拉输入) GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_2; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; // 内部上拉 GPIO_Init(GPIOE, &GPIO_InitStruct); ``` #### 2. 外部中断配置(以KEY1为例) ```c // 配置EXTI中断线 GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource3); EXTI_InitTypeDef EXTI_InitStruct; EXTI_InitStruct.EXTI_Line = EXTI_Line3; EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling; // 下降沿触发 EXTI_InitStruct.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStruct); // 配置NVIC NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel = EXTI3_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x01; NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x01; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); ``` #### 3. 中断服务函数 ```c void EXTI3_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line3) != RESET) { // 按键处理逻辑 EXTI_ClearITPendingBit(EXTI_Line3); } } ``` ### 三、按键状态读取 ```c uint8_t key_scan(void) { if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3) == 0) { // KEY1按下 delay_ms(10); // 消抖 if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3) == 0) return KEY1_PRESS; } // 其他按键同理 return NO_PRESS; } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Engineer-Bruce_Yang

谢谢您

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值