介绍

在做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
// 配置UART1引脚
GPIOPinConfigure(GPIO_PB6_U1TX);
GPIOPinConfigure(GPIO_PB7_U1RX);
GPIOPinTypeUART(UART1_PORT, UART1_TX_PIN | UART1_RX_PIN);

// 等待引脚配置生效
for(i = 0; i < 1000; i++) {}

// 配置UART参数 - Modbus标准波特率,8-N-1模式
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++) {}

// 使能UART
UARTEnable(UART1_BASE);

// 等待UART使能生效
for(i = 0; i < 1000; i++) {}

// 使能处理器中断
IntMasterEnable();

// 注册UART中断处理函数
IntRegister(INT_UART1, UART1IntHandler);
IntEnable(INT_UART1);
UARTIntEnable(UART1_BASE, UART_INT_RX | UART_INT_RT);

分析

查看F28M35 Datasheet,发现以下描述:PB7_GPIO15默认写保护,需要特殊的处理方式还原为普通GPIO

img

解决

需要在配置UART1前先 解除引脚NMI中断状态,然后接收中断就可以接收数据了

1
GPIOPinUnlock(GPIO_PORTB_BASE, GPIO_PIN_7); 

下里巴人
海纳百川,文以载道
hywing技术自留地
总访问 113701 次 | 本页访问 326