单片机学习小组
直播中

golabs

8年用户 891经验值
擅长:可编程逻辑 电源/新能源 MEMS/传感技术 测量仪表
私信 关注

NUC230的GPIO复用成为UART时,必须去设置不同的IO复用在UART上吗?

请问一下各位大大,NUC230的GPIO复用成为UART时,必须去设置不同的IO复用在UART上,我看工程范例中写到

    /* Set GPB multi-function pins for UART0 RXD and TXD */
SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB0_Msk | SYS_GPB_MFP_PB1_Msk);
SYS->GPB_MFP |= SYS_GPB_MFP_PB0_UART0_RXD | SYS_GPB_MFP_PB1_UART0_TXD;

想问为什么要如此操作,可以改写成下面方式执行嘛?

SYS->GPB_MFP = SYS_GPB_MFP_PB0_UART0_RXD | SYS_GPB_MFP_PB1_UART0_TXD;

回帖(1)

杨万富

2024-1-2 16:10:23
在将GPIO复用成UART时,需要设置不同的IO复用方式,并将它们配置为UART的接收和发送引脚。这是因为GPIO可以被配置为多种不同的功能,例如GPIO、ADC、I2C、SPI等等,每种功能都有不同的引脚复用方式。因此,在将GPIO用作UART时,需要指定引脚的复用方式。

在NUC230中,使用SYS->GPB_MFP寄存器来配置GPIO引脚的复用方式。该寄存器的每个位都对应一个GPIO引脚,设置为1表示将该引脚配置为相应的功能。因此,在将GPIO复用为UART时,需要将PB0和PB1引脚配置为UART0的接收和发送引脚,而不是其他功能,例如ADC或I2C。

因此,将GPB_MFP设置为SYS_GPB_MFP_PB0_UART0_RXD | SYS_GPB_MFP_PB1_UART0_TXD并不足够,因为其他GPB引脚的状态可能被清除了。正确的操作是先将GPB_MFP的相应位清零,然后再设置为UART0的引脚,如下所示:

SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB0_Msk | SYS_GPB_MFP_PB1_Msk); //清零PB0和PB1引脚的状态
SYS->GPB_MFP |= SYS_GPB_MFP_PB0_UART0_RXD | SYS_GPB_MFP_PB1_UART0_TXD; //将PB0和PB1引脚配置为UART0接收和发送引脚
举报

更多回帖

发帖
×
20
完善资料,
赚取积分