HC32F460_SWD_JTAG_引脚复用问题笔记

项目场景:

在使用华大MCU_HC32F460进行开发时,由于资源分配问题,原本用来调试的PA13、PA14、PA15引脚被复用成了USART的通信引脚。在按照配置USART通信引脚的流程对PA13、PA14引脚进行配置后无法正常通信。

问题描述:

单独对PA13、PA14进行GPIO配置,并简单编写一段程序使其一段时间内循环翻转电平点亮LED灯。观察得知,LED未出现预期的闪烁状态,且用逻辑分析检测未看到任何电平翻转现象。

@Override
      /* configuration structure initialization */
    MEM_ZERO_STRUCT(stcPortInit);

    stcPortInit.enPinMode = Pin_Mode_Out;
    stcPortInit.enExInt = Enable;
    stcPortInit.enPullUp = Enable;

    /* LED0 Port/Pin initialization */
    PORT_Init(LED0_PORT, LED0_PIN, &stcPortInit);

    /* LED1 Port/Pin initialization */
    PORT_Init(LED1_PORT, LED1_PIN, &stcPortInit);

    /* LED2 Port/Pin initialization */
    PORT_Init(LED2_PORT, LED2_PIN, &stcPortInit);

    /* LED3 Port/Pin initialization */
    PORT_Init(LED3_PORT, LED3_PIN, &stcPortInit);
	

    while(1)
    {
        LED0_TOGGLE();
        Ddl_Delay1ms(DLY_MS);
        LED1_TOGGLE();
        Ddl_Delay1ms(DLY_MS);
        LED2_TOGGLE();
        Ddl_Delay1ms(DLY_MS);
        LED3_TOGGLE();
        Ddl_Delay1ms(DLY_MS);
			
        /* de-init if necessary */
        //PORT_DeInit();
    };

原因分析:

PA13、PA14作为调试引脚在底层默认中可能存在更高的优先级,即使我们按照GPIO配置流程将PA13、PA14复用配置为其它功能,但在底层设置中PA13、PA14脚作为SWD调试引脚的优先级更高导致我们对其的配置无效。

解决方案:

在浏览了HC相关的库函数之后,发现了能够屏蔽SWD调试的相关函数,在配置PA13、PA14之前关闭其调试使能即可进行后续操作。

@ddl
/**
 *******************************************************************************
 ** \brief   Special control register Setting
 **
 ** \param   [in]  u8DebugPort          Debug port setting register, This parameter
 **                                     can be any composed value of @ref en_debug_port_t
 **
 ** \param   [in] enFunc                The new state of the debug ports.
 ** \arg     Enable                     Enable.
 ** \arg     Disable                    Disable.
 **
 ** \retval  Ok                         Debug port set successful
 **
 ******************************************************************************/
en_result_t PORT_DebugPortSetting(uint8_t u8DebugPort, en_functional_state_t enFunc)
{
    /* parameter check */
    DDL_ASSERT(IS_VALID_DEBUGPIN(u8DebugPort));
    DDL_ASSERT(IS_FUNCTIONAL_STATE(enFunc));

    PORT_Unlock();

    if (Enable == enFunc)
    {
        M4_PORT->PSPCR |= (uint16_t)(u8DebugPort & 0x1Ful);
    }
    else
    {
        M4_PORT->PSPCR &= (uint16_t)(~(u8DebugPort & 0x1Ful));
    }

    PORT_Lock();
    return Ok;
}

(注意:如果屏蔽SWD,那么Jlink将无法下载程序,需要使用华大的ISP工具+短接Boot模式烧写)
在配置前添加如下代码,即可解决:

PORT_DebugPortSetting(TCK_SWCLK,Disable);
PORT_DebugPortSetting(TMS_SWDIO,Disable);

或者屏蔽全部调试引脚使能

PORT_DebugPortSetting(ALL_DBG_PIN,Disable);
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值