N32G45X 单片机如何把OSC-IN,OSC-OUT,调到PD0,PD1,请给出code
时间: 2025-07-01 17:27:37 浏览: 15
### N32G45X 单片机 OSC-IN 和 OSC-OUT 重映射到 PD0 和 PD1 的方法及代码示例
在 N32G45X 单片机中,OSC-IN 和 OSC-OUT 是与外部晶振相关的引脚。为了实现这些引脚的功能重映射到其他 GPIO 引脚(如 PD0 和 PD1),需要配置单片机的寄存器以启用重映射功能[^1]。以下是详细的说明和代码示例。
#### 配置步骤概述
为了将 OSC-IN 和 OSC-OUT 重映射到 PD0 和 PD1,必须完成以下任务:
1. 配置系统时钟控制寄存器(RCC)以允许重映射。
2. 设置 GPIO 功能选择寄存器以将 PD0 和 PD1 配置为 OSC-IN 和 OSC-OUT 的替代引脚。
3. 确保外部晶振正确连接并正常工作。
#### 示例代码
以下是一个完整的代码示例,展示如何在 N32G45X 中实现 OSC-IN 和 OSC-OUT 到 PD0 和 PD1 的重映射:
```c
#include "N32G45X.h"
void Oscillator_Remap(void) {
// 启用 GPIOD 时钟
RCC->APB2PCENR |= RCC_APB2Periph_GPIOD;
// 启用 AFIO 时钟
RCC->APB2PCENR |= RCC_APB2Periph_AFIO;
// 配置 AFIO 的重映射寄存器 (GPIO_EXTMSEL)
AFIO->MAPR |= AFIO_MAPR_OSC_REMAP_PD0_PD1; // 将 OSC 引脚重映射到 PD0 和 PD1
// 配置 PD0 和 PD1 为模拟输入模式(用于 OSC-IN 和 OSC-OUT)
GPIO_Digital_Input(GPIO_PORT_PD, GPIO_PIN_0);
GPIO_Digital_Input(GPIO_PORT_PD, GPIO_PIN_1);
// 确保外部晶振已正确连接并启动
// 配置系统时钟以使用外部晶振作为时钟源
SystemClock_Config_ExternalOscillator();
}
void GPIO_Digital_Input(uint8_t port, uint16_t pin) {
// 配置指定 GPIO 引脚为数字输入模式
switch (port) {
case GPIO_PORT_PD:
GPIO PD->CFGLR &= ~(0xF << (pin * 4)); // 清除配置位
GPIO PD->CFGLR |= (0x0 << (pin * 4)); // 设置为输入模式
break;
default:
break;
}
}
void SystemClock_Config_ExternalOscillator(void) {
// 配置系统时钟以使用外部晶振
RCC->CR |= RCC_CR_HSEON; // 启用外部高速晶振
while (!(RCC->CR & RCC_CR_HSERDY)) {
// 等待外部晶振稳定
}
// 配置 PLL 并选择外部晶振作为系统时钟源
RCC->CFGR |= RCC_CFGR_SW_HSE;
while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_HSE) {
// 等待系统时钟切换到外部晶振
}
}
```
#### 代码说明
1. **启用 GPIO 和 AFIO 时钟**:通过设置 `RCC->APB2PCENR` 寄存器,确保 GPIOD 和 AFIO 外设的时钟被启用。
2. **配置重映射寄存器**:通过设置 `AFIO->MAPR` 寄存器中的相关位,将 OSC-IN 和 OSC-OUT 引脚重映射到 PD0 和 PD1。
3. **配置 GPIO 引脚模式**:将 PD0 和 PD1 配置为模拟输入模式,以适应外部晶振的信号输入。
4. **启用外部晶振**:通过配置 `RCC->CR` 和 `RCC->CFGR` 寄存器,确保外部晶振被正确启用并作为系统时钟源。
#### 注意事项
- 在进行重映射之前,请确保外部晶振已正确连接到电路板上,并且其频率符合 N32G45X 的规格要求[^2]。
- 如果使用了不同的 GPIO 引脚或外设功能,请根据具体硬件设计调整代码中的寄存器配置。
- 确保在调试过程中检查系统的时钟配置是否正确,可以通过测量系统时钟频率来验证。
---
阅读全文
相关推荐

















