HC32 GPIO使用注意点

和STM32 的区别

项目STM32HC32
GPIO 输出推挽、开漏CMOS、NMOS
输入浮空 (可配置上下拉)需要配置u16PinDir 上下拉配置u16PullUp
时钟不同端口要先使能不同的时钟所有端口通用一个函数GPIO_Unlock()
速度GPIO_Speed_10MHz GPIO_Speed_2MHz GPIO_Speed_50MHzPIN_DRV_LOW PIN_DRV_MID PIN_DRV_HIGH
等待时间/需要根据主频配置等待时间 GPIO_SetReadWaitCycle
复用功能

使用时注意点

1、在是HC的时候要首先解锁相关寄存器的保护

/**
 * @brief  MCU Peripheral registers write unprotected.
 * @param  None
 * @retval None
 * @note Comment/uncomment each API depending on APP requires.
 */
void Peripheral_WE(void)
{
    /* Unlock GPIO register: PSPCR, PCCR, PINAER, PCRxy */
    GPIO_Unlock();
    /* Unlock PWC register: FCG0 */
    PWC_FCG0_Unlock();
    /* Unlock PWC, CLK, PVD registers, @ref PWC_REG_Write_Unlock_Code for details */
    PWC_Unlock(PWC_UNLOCK_CODE_0 | PWC_UNLOCK_CODE_1);
    /* Unlock SRAM register: WTCR */
    SRAM_WTCR_Unlock();
    /* Unlock SRAM register: CKCR */
    SRAM_CKCR_Unlock();
    /* Unlock all EFM registers */
    EFM_Unlock();
    /* Unlock EFM register: FWMC */
    EFM_FWMC_Unlock();
    /* Unlock EFM OTP write protect registers */
//    EFM_OTP_WP_Unlock();
}

2、注意设置GPIO的 等待时间如果不配置默认上电 001(默认值) 1周期 50~100MHz,当主频设置为240M的时候在读取和设置输出比较频繁的情况下回出现莫名的问题。
3、复用功能 例如两个串口 尽量不要同时使用 Func20,如

switch(usart)
    {
        case USART1:
        {
            // PA9 - TX       PA10 - RX
            GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_09, GPIO_FUNC_20_USART1_TX, PIN_SUBFUNC_DISABLE);
            GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_10, GPIO_FUNC_20_USART1_RX, PIN_SUBFUNC_DISABLE);
        }
        break;
        case USART2:    //原有的2 映射到串口4
        {
            // PA2 - TX       PA3 - RX
            GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_02, GPIO_FUNC_20_USART1_TX, PIN_SUBFUNC_DISABLE);
            GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_03, GPIO_FUNC_20_USART1_TX, PIN_SUBFUNC_DISABLE);
        }
        break;
        default: break;
    }

应更改为

switch(usart)
    {
        case USART1:
        {
            // PA9 - TX       PA10 - RX
            GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_09, GPIO_FUNC_20_USART1_TX, PIN_SUBFUNC_DISABLE);
            GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_10, GPIO_FUNC_20_USART1_RX, PIN_SUBFUNC_DISABLE);
        }
        break;
        case USART2:    //原有的2 映射到串口4
        {
            // PA2 - TX       PA3 - RX
            GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_02, GPIO_FUNC_32_USART4_TX, PIN_SUBFUNC_DISABLE);
            GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_03, GPIO_FUNC_32_USART4_TX, PIN_SUBFUNC_DISABLE);
        }
        break;
        default: break;
    }

同时使用Func20 会出现串口2部分中断异常(具体不知道芯片原因,还是其他的反正更改到funC32 完全正常)。
3、串行通信接口分为三个组。可以根据不同的管脚查询官方的数据手册然后自己配置
在这里插入图片描述
4、使用GPIO_StructInit 后注意默认值,需要更改成自己想要的配置。
5、上电后 TRACE/JTAG对应的管脚默认是调试功能。若果使用普通的GPIO时一定要注意先关闭复用功能。
6、串口下载 和STM32的 串口1不同。需要根据芯片选择对应的管脚。具体参考官网给的《Cortex-M离线编程器Ⅱ用户手册.pdf》或者直接联系FAE。操作不当会锁死芯片。

在这里插入图片描述

<think>好的,我现在需要帮助用户找到HC32F460芯片的GPIO复用配置方法或相关资料。用户之前已经问过关于GPIO配置结构体的问题,现在他们可能已经了解基本配置,但需要更深入的复用功能设置。 首先,我得回忆一下HC32F460的GPIO复用功能是如何配置的。通常,微控制器的GPIO复用涉及到引脚功能的选择,比如作为普通IO还是外设功能。根据用户提供的引用内容,结构体stc_port_init_t中的enPinSubFunc字段可能与此相关。用户手册中提到enPinSubFunc是用于启用引脚子功能的,这可能是指复用功能的选择。 接下来,我需要确认复用配置的具体步骤。通常步骤包括:启用相关外设的时钟,配置GPIO的模式为复用模式,选择具体的复用功能,可能还需要设置其他参数如上下拉、驱动能力等。需要查阅华大的官方资料,确认enPinSubFunc的具体用法,以及如何与复用功能寄存器配合使用。 用户可能需要具体的代码示例,所以应该准备一个配置GPIO为UART功能的例子。例如,配置PA9为UART_TX,需要设置enPinMode为复用模式,enPinSubFunc为Enable,然后通过外设复用寄存器选择UART功能。同时,确保时钟配置正确,比如启用GPIOA和USART的时钟。 还需要考虑用户可能遇到的问题,比如复用功能寄存器(PORTx_PFSR)的地址和设置方法,不同引脚对应的复用功能编号,以及如何查找这些信息。建议用户参考官方数据手册中的GPIO章节和复用功能表,因为这些表格详细列出了每个引脚可用的复用功能及其对应的寄存器设置。 另外,用户可能需要知道如何切换回普通GPIO模式,这时候需要将enPinSubFunc设为Disable,并将enPinMode设置为输入或输出模式。同时,提醒用户注意复用功能与其他外设配置的冲突,确保同一引脚不会同时用于多个功能。 最后,确保回答结构清晰,分步骤说明配置流程,提供代码示例,并指出参考资料的位置,方便用户进一步查阅。同时,生成的相关问题要围绕用户可能遇到的后续问题,比如如何配置特定外设的复用功能,复用冲突如何处理,以及如何验证配置是否正确等。</think>根据HC32F460用户手册,GPIO复用功能配置主要通过端口复用选择寄存器(PORTx_PFSR)和端口初始化结构体实现,具体步骤如下: ### 一、GPIO复用配置步骤 1. **时钟使能**:先使能对应GPIO端口时钟 ```c Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); // 全局GPIO时钟 Sysctrl_SetPeripheralGate(SysctrlPeripheralPortA, TRUE); // 具体端口时钟 ``` 2. **配置复用模式**:在stc_port_init_t结构体中设置 ```c stc_port_init_t stcGpioCfg = { .enPinMode = Pin_Mode_Mux, // 复用模式 .enLatch = Disable, // 输出锁存 .enExInt = Disable, // 外部中断 .enInvert = Disable, // 输入反向 .enPullUp = Disable, // 上拉电阻 .enPinDrv = Pin_Drv_High, // 驱动能力 .enPinOType = Pin_OType_Cmos, // 输出类型 .enPinSubFunc = Enable // 关键参数:启用复用子功能 }; PORT_Init(PortA, Pin09, &stcGpioCfg); // 以PA9为例 ``` 3. **设置复用功能**:通过PORTx_PFSR寄存器选择具体功能 ```c PORT_SetFunc(PortA, Pin09, Func_Uart1_Tx, Enable); // 设置为UART1_TX ``` ### 二、关键参数说明 1. **enPinSubFunc**: - Enable:启用外设复用功能 - Disable:恢复为普通GPIO模式 2. **复用功能选择**: - 通过PORT_SetFunc()函数的第三个参数指定 - 功能编号对应芯片手册"复用功能映射表"(如Func_Uart1_Tx=0x02) ### 三、验证配置方法 1. 使用万用表测量引脚电平变化 2. 通过调试器查看PORTx_PFSR寄存器值 3. 使用逻辑分析仪捕捉外设信号 ### 四、注意事项 1. 复用功能与外设时钟必须同时使能 2. 避免同一引脚同时配置多个复用功能 3. 模拟外设(ADC等)需禁用数字复用功能 > 完整复用功能映射表详见《HC32F460用户手册》第8.3节"Port function switching register"[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值