CH32X033 PC18 口如何映射成USART3 TX的功能

我在用CH32X033开发中,需要将调试信息通过USART3发送出来。

只有PC18口可以重新映射到TX3。

我在debug.c的初始化代码如下

#if(DEBUG == DEBUG_UART3)

    GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);

    GPIO_PinRemapConfig(GPIO_PartialRemap1_USART3, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_18;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

    GPIO_Init(GPIOC, &GPIO_InitStructure);


但用printf发送的信息完全无效。请指导一下该如何设置。谢谢


要最先把 AFIO 的时钟打开。


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);

这里已经开了AFIO时钟。

我试过

void GPIO_Toggle_PC18(void)

{

    GPIO_InitTypeDef GPIO_InitStructure = {0};


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_18;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOC, &GPIO_InitStructure);

}


然后

GPIO_WriteBit(GPIOC, GPIO_Pin_18,0)

GPIO_WriteBit(GPIOC, GPIO_Pin_18,1)

PC18可以正确输出高低电平。

说明PC18可以作为普通IO输出状态。

但是重新映射却找不到相关说明。只能请原厂解决。


您好,可以参考下图配置试一下,注意下载完成后重新上电试一下。后续若有问题,可邮箱(lzs@wch.cn)沟通。

image.png


谢谢TECH62,刚验证完毕,你的做法可以成功。


重新验证了一遍,如果把以下这行指令

    GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);

不按照你给定的顺序执行,就不能成功映射USART3 TX。

具体原因应该和芯片内部设计相关,没有公开文档,就只能靠原厂支持了。


再次感谢沁恒的快速支援。


只有登录才能回复,可以选择微信账号登录