使用的是TivaWare_C_Series-1.0里面标准的uart_ehco的工程,一个代码都没有改,
使用的是LaunchPad,使用本身的LX4F20H没有问题,UART可以正常接受发送数据,但是将芯片换成LX4F231H以后,所有的串口都只能接受数据,而无法发送数据,也有用PD6和PD7作为UART2使用,使用示波器都能抓取到接受的数据的波形,但是发送数据的时候没有波形。
请问是这两颗IC需要有不同的配置吗?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
使用的是TivaWare_C_Series-1.0里面标准的uart_ehco的工程,一个代码都没有改,
使用的是LaunchPad,使用本身的LX4F20H没有问题,UART可以正常接受发送数据,但是将芯片换成LX4F231H以后,所有的串口都只能接受数据,而无法发送数据,也有用PD6和PD7作为UART2使用,使用示波器都能抓取到接受的数据的波形,但是发送数据的时候没有波形。
请问是这两颗IC需要有不同的配置吗?
如果你没改任何代码,应该在PA0,PA1抓到发送的数据波形,
至于说UART2的管脚PD6和PD7上抓不到发送的波形,那是因为PD7默认是NMI接口,如果要配置成UART2的TX端口,需要单独的代码配置。
下面是我的配置初始化和中断
void InitUART2() {
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART2);
GPIOPinConfigure(GPIO_PD6_U2RX);
GPIOPinConfigure(GPIO_PD7_U2TX);
GPIOPinTypeUART(GPIO_PORTD_BASE, GPIO_PIN_6 | GPIO_PIN_7);
UARTConfigSetExpClk(UART2_BASE, SysCtlClockGet(), 115200, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
IntEnable(INT_UART2); UARTIntEnable(UART2_BASE, UART_INT_RX | UART_INT_RT);
}
void UART2IntHandler(void) {
uint32_t ui32Status;
ui32Status = ROM_UARTIntStatus(UART2_BASE, true);
ROM_UARTIntClear(UART2_BASE, ui32Status);
while(ROM_UARTCharsAvail(UART2_BASE))
{
ROM_UARTCharPutNonBlocking(UART2_BASE, ROM_UARTCharGetNonBlocking(UART2_BASE));
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_PIN_2);
SysCtlDelay(SysCtlClockGet() / (1000 * 3));
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0);
}
}
我做实验,当有数据进入的时候使用示波器测试接受数据正常,PD7为低电平,都没有进行拉高。
使用PA0和PA1做试验的时候,我复制大量的数据的时候发现PA0和PA1都有波形,但是使用我通过键盘敲字符的时候,并没有将字符串重新发送过PC端。
再次强调下,TI的 M4芯片有的管脚在上电的默认状态是NMI(非屏蔽中断)管脚,如果要工作在GPIO或其他功能模式,需要在配置管脚时解锁配置。
具体方法如下,否者配置管脚为功能模块功能会失败。
HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
HWREG(GPIO_PORTF_BASE + GPIO_O_CR) = 0xFF;
GPIOPinConfigure(GPIO_PD7_U2TX);
GPIOPinTypeSSI(GPIO_PORTF_BASE, GPIO_PIN_0);
HWREG(GPIO_PORTD_BASE + GPIO_O_CR) = 0xFE;
HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = 00;