工具/软件:Code Composer Studio
您好!
我正在使用通信协议,使用 UART1 (RS 485)与外部设备通信。 我已检查回送、TX 和 RX 配置是否成功完成,因为它是回送字符。 当我向外部器件 UART1成功发送数据时、外部器件 HMI 显示从 UART1 (TM4C123GXL)接收到的数据。 如果我通过 HMI 发送数据,则无法在 TM4C123gxl 端获取数据。 过去两天我几乎找不到这个错误、如果有任何解决方案、对我来说都很有帮助。
这里是我的收发代码:
//
#include
#include
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "driverlib/debug.h"
#include "driverlib/fpu.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
unsigned char BUF1[100]={"S"、'N'、'G'}; //发送数据
unsigned char BUF2[100];
unsigned int i;
#define RS485base GPIO_Porta_base
#define MAX485_DE GPIO_PIN_6
#define MAX485_RE_NEG GPIO_PIN_7
//*********
//
#ifdef 调试
无效
_error__(char * pcFilename、uint32_t ui32Line)
{
}
#endif
//********
void preTransmission ();
void postTransmission ();
//
空 UART0_PUT_CHAR (常量 uint8_t pui8Buffer)
{
预传送();
//将下一个字符写入 UART。
//
UARTCharPut (UART0_BASE、pui8Buffer);
postTransmission ();
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//UART 1发送功能
void uart1_put 字符(uint8_t BUF3)
{
预传送();
UARTCharPut (UART1_BASE、BUF3);
postTransmission ();
}
/////////////////////////////////////////////////////////////// //UART 1接收 功能
void uart1_get_char ()
{
postTransmission ();
unsigned char j=0;
while (ROM_UARTCharsAvail (UART1_base))
{
BUF2[j]=UARTCharGet (UART1_BASE);
UART0_PUT_CHAR (BUF2[j]);
SysCtlDelay (2000);
J++;
预传送();
}
int k;
for (k=0;<j;k++) 0.0.
{
BUF2[k]=0;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
空预传输()
{
GPIOPinWrite (GPIO_Porta_base、MAX485_RE_NEG、 MAX485_RE_NEG);
GPIOPinWrite (GPIO_Porta_base、MAX485_DE、MAX485_DE);
}
void postTransmission ()
{
GPIOPinWrite (GPIO_Porta_base、MAX485_RE_NEG、0x00);
GPIOPinWrite (GPIO_Porta_base、MAX485_DE、0x00);
}
空 RS485enable()
{
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
GPIOPinTypeGPIOOutput (RS485base、MAX485_DE|MAX485_RE_NEG);
}
//
int main (空)
{
//unsigned char pui8Buffer;
//为中断处理程序启用怠惰堆栈。 这允许使用浮点
//在中断处理程序中使用的指令,但代价是
//额外的堆栈用法。
//
ROM_FPUEnable();
ROM_FPULazyStackingEnable();
//
//将时钟设置为直接从晶体运行。
//
ROM_SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHz);
//
//启用用于板载 LED 的 GPIO 端口。
//
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
//
//为 LED 启用 GPIO 引脚(PF2)。
//
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_2);
//
//启用此示例使用的外设。
//
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART1);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
//
//启用处理器中断。
//
// rom_IntMasterEnable();
//
//将 GPIO A0和 A1设置为 UART 引脚。
//
GPIOPinConfigure (GPIO_PA0_U0RX);
GPIOPinConfigure (GPIO_PA1_U0TX);
GPIOPinConfigure (GPIO_PB0_U1RX);
GPIOPinConfigure (GPIO_PB1_U1TX);
ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
ROM_GPIOPinTypeUART (GPIO_PORTB_BASE、GPIO_PIN_0 | GPIO_PIN_1);
//
//将 UART 配置为115、200、8-N-1操作。
//
ROM_UARTConfigSetExpClk (UART0_BASE、ROM_SysCtlClockGet ()、19200、
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
ROM_UARTConfigSetExpClk (UART1_base、ROM_SysCtlClockGet ()、19200、
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
RS485enable();
//循环通过 UART 永久回显数据。
//
GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_6、0x00);
GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_7、0x00);
while (1)
{
uint32_t 值= 0;
uint8_t i=0;
for (i=0;i<6;i++)
{
uart1_Put_char (BUF1[i]); //传输数据
}
uart1_get_char (); //接收数据
}
}
串行监视器输出窗口
