davidloon 发表于 2025-9-1 19:58

请教,关于APM32F072 USART4引脚交换问题

void Usart4_Initial(void)
{
   GPIO_Config_T gpioConfig;
    USART_Config_T usartConfigStruct;

        RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOC);
        RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_USART4);
       
        GPIO_ConfigPinAF(GPIOC, GPIO_PIN_SOURCE_10, GPIO_AF_PIN0);        /* Connect PXx to USARTx_Tx */
        GPIO_ConfigPinAF(GPIOC, GPIO_PIN_SOURCE_11, GPIO_AF_PIN0);        /* Connect PXx to USARTx_Rx */
        USART_EnableSWAPPin(USART4);
    /* Configure USART Tx as alternate function push-pull */
    /* Configure USART Rx as input floating */
   gpioConfig.mode = GPIO_MODE_AF;
   gpioConfig.pin = GPIO_PIN_10 | GPIO_PIN_11;
   gpioConfig.speed = GPIO_SPEED_50MHz;
   gpioConfig.outtype = GPIO_OUT_TYPE_PP;
   gpioConfig.pupd = GPIO_PUPD_PU;
   GPIO_Config(GPIOC, &gpioConfig);
       
    /* MINI_USARTs configured as follow: */
    /* BaudRate = 115200 baud */
    usartConfigStruct.baudRate = 115200;                                        /* BaudRate = 115200 baud */
    usartConfigStruct.mode   = USART_MODE_TX_RX;                                /* Receive and transmit enabled */
    usartConfigStruct.hardwareFlowCtrl = USART_FLOW_CTRL_NONE;        /* Hardware flow control disabled (RTS and CTS signals) */
    usartConfigStruct.parity   = USART_PARITY_NONE;                /* No parity */
    usartConfigStruct.stopBits =USART_STOP_BIT_1;                /* One Stop Bit */
    usartConfigStruct.wordLength = USART_WORD_LEN_8B;        /* Word Length = 8 Bits */
    USART_Config(USART4, &usartConfigStruct);                /* USART_Config */

    /* Enable USART_Interrupt_RXBNEIE */
    USART_EnableInterrupt(USART4, USART_INT_RXBNEIE);

        NVIC_EnableIRQRequest(USART3_4_IRQn, 2);

    /* Enable USART */
    USART_Enable(USART4);
}
USART4按上述配置后,P10/P11引脚交换, TX发不出信号,RX接收没有问题。如果不配置交换引脚功能,TX是可以发出信号的。想请教这个问题怎么解决

Gfan 发表于 2025-9-3 14:30

hi,我们在开发者论坛上也有回复哈,担心没看到,所以这边也回复一下



我们测试过,确实是这样,有可能是板子上TX/RX画反了,有如下建议哈:

[*]如果选用USART4,不要用交叉模式(交叉无效);
[*]使用USART1/ 2/ 3, (建议复用USART3),再使用交叉模式
[*]

https://community.geehy.cn/d/1161-apm32f072-yong-usart4ying-she-dao-pc10pc11zai-she-zhi-yin-jiao-jiao-huan-txfa-bu-chu-xin-hao/3


davidloon 发表于 2025-9-3 15:20

Gfan 发表于 2025-9-3 14:30
hi,我们在开发者论坛上也有回复哈,担心没看到,所以这边也回复一下




好的,谢谢!因为看到资料上说明能交换,为方便画板交换了。

davidloon 发表于 2025-9-3 15:21

Gfan 发表于 2025-9-3 14:30
hi,我们在开发者论坛上也有回复哈,担心没看到,所以这边也回复一下




4个串口都用了,没法修改。只能改板了

Gfan 发表于 2025-9-3 15:45

davidloon 发表于 2025-9-3 15:21
4个串口都用了,没法修改。只能改板了

好滴好滴,客气,后面有问题也随时来哈

Gfan 发表于 2025-9-3 15:47

本帖最后由 Gfan 于 2025-9-3 16:22 编辑

davidloon 发表于 2025-9-3 15:20
好的,谢谢!因为看到资料上说明能交换,为方便画板交换了。
不过想问一下,是什么资料说是能够交换的呀?

davidloon 发表于 2025-9-3 16:23

用户手册第288页,SDK包库函数都有说明
/*!
* @brief       Enables the swap Tx/Rx pins
*
* @param       usart:Select the the USART peripheral.
*                      It can be USART1/USART2/USART3/USART4/USART5/USART6/USART7/USART8.
*
* @retval      None
*
* @NOTE      The USART3/USART4 only for APM32F072 and APM32F091 devices.
*            USART5, USART6, USART7 and USART8 are available only for APM32F091 devices.
*/
void USART_EnableSWAPPin(USART_T* usart)
{
    usart->CTRL2_B.SWAPEN = BIT_SET;
}

Gfan 发表于 2025-9-3 17:13

davidloon 发表于 2025-9-3 16:23
用户手册第288页,SDK包库函数都有说明
/*!
* @brief       Enables the swap Tx/Rx pins


好咧收到,感谢反馈

GalaxyStroll 发表于 2025-9-4 20:32

这个坑踩的有点……
看看可不可以分时复用Usart3来实现4个串口,以避免改板

星空魔法师 发表于 2025-9-5 09:24

我遇到过类似的问题,后来发现是AF映射配置不正确导致的。你可以尝试重新检查你的AF映射设置,确保P10和P11引脚正确映射到了USART4的TX和RX。

FrostShimmer 发表于 2025-9-6 10:28

学习了。还是避免这么使用吧!

davidloon 发表于 2025-9-11 20:09

星空魔法师 发表于 2025-9-5 09:24
我遇到过类似的问题,后来发现是AF映射配置不正确导致的。你可以尝试重新检查你的AF映射设置,确保P10和P11 ...

映射应该是对的,不交换引脚功能是正常的

davidloon 发表于 2025-9-11 20:13

GalaxyStroll 发表于 2025-9-4 20:32
这个坑踩的有点……
看看可不可以分时复用Usart3来实现4个串口,以避免改板 ...

连续切换也容易出现问题,第一次使用极海MCU。还是要尽量避免使用引脚交换功能

神话编织者 发表于 2025-9-12 17:01

看来这个锅要程序员来背了啊

梦之一瞥 发表于 2025-9-13 09:38

学习了,知道这个功能了。
页: [1]
查看完整版本: 请教,关于APM32F072 USART4引脚交换问题