介绍
在做RS485通信的时候,使用UART1(GPIO_PB6_U1TX和GPIO_PB7_U1RX)和485收发器连接,发现485收发器只能给上位机发数据,接收模式下却无法接收数据,尽管已经按照正常的流程配置串口通信参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| GPIOPinConfigure(GPIO_PB6_U1TX); GPIOPinConfigure(GPIO_PB7_U1RX); GPIOPinTypeUART(UART1_PORT, UART1_TX_PIN | UART1_RX_PIN);
for(i = 0; i < 1000; i++) {}
UARTConfigSetExpClk(UART1_BASE, SysCtlClockGet(SYSTEM_CLOCK_SPEED), MODBUS_BAUD_RATE, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
for(i = 0; i < 1000; i++) {}
UARTEnable(UART1_BASE);
for(i = 0; i < 1000; i++) {}
IntMasterEnable();
IntRegister(INT_UART1, UART1IntHandler); IntEnable(INT_UART1); UARTIntEnable(UART1_BASE, UART_INT_RX | UART_INT_RT);
|
分析
查看F28M35 Datasheet,发现以下描述:PB7_GPIO15
默认写保护,需要特殊的处理方式还原为普通GPIO

解决
需要在配置UART1前先 解除引脚NMI
中断状态,然后接收中断就可以接收数据了
1
| GPIOPinUnlock(GPIO_PORTB_BASE, GPIO_PIN_7);
|