各位工程师帮忙啊!一个485发送数据的程序折磨几天了,都不见发出数据。前辈提点意见吧
#include "hw_ints.h" #include "hw_memmap.h" #include "hw_types.h" #include "gpio.h" #include "interrupt.h" #include "sysctl.h" #include "uart.h"
#define RE_DE GPIO_PIN_7 #define UART1_PIN GPIO_PIN_2|GPIO_PIN_3
static volatile const unsigned char *g_pucBuffer = 0; // 发送数据缓冲区指针 static volatile unsigned long g_ulCount = 0; // 发送数据个数 static const unsigned char g_pucString[] = "123456789ABCDE";
void WaitJTAG(void) { SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); GPIOPinTypeGPIOInput(GPIO_PORTA_BASE, GPIO_PIN_2); if (GPIOPinRead(GPIO_PORTA_BASE, GPIO_PIN_2) == 0X00) { for (;;); } SysCtlPeripheralDisable(SYSCTL_PERIPH_GPIOA); }
void UART1_ISR(void) // UART1中断服务函数 { unsigned long ulStatus; ulStatus = UARTIntStatus(UART1_BASE, true); // 获得中断状态。 UARTIntClear(UART1_BASE, ulStatus); // 清除等待响应的中断。 if(ulStatus & UART_INT_TX) // 检查是否有未响应的传输中断。 { while(g_ulCount && UARTSpaceAvail(UART1_BASE)) // 处理传输中断。 { UARTCharNonBlockingPut(UART1_BASE, *g_pucBuffer++); // 发送下一个字符。 g_ulCount--; // 发送字符数自减。 } } }
void UARTSend(const unsigned char *pucBuffer, unsigned long ulCount) // 发送数据处理函数 { while(g_ulCount); // 等待,直到之前的字符串发送完毕。 g_pucBuffer = pucBuffer; // 保存待传输的数据缓冲。 g_ulCount = ulCount; // 保存计数值。 while(UARTSpaceAvail(UART1_BASE)&&g_ulCount) // 处理传输中断。 { UARTCharNonBlockingPut(UART1_BASE, *g_pucBuffer++); // 发送下一个字符。 g_ulCount--; // 发送字符数自减。 } // 使能UART发送。 }
int main(void) { WaitJTAG(); SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ); // 设置晶振为时钟源。 SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); GPIOPinTypeUART(GPIO_PORTD_BASE, UART1_PIN); // 设置PD2,PD3为RXD,TXD GPIODirModeSet(GPIO_PORTC_BASE, RE_DE, GPIO_DIR_MODE_OUT); // 设置PC7为输出 GPIODirModeSet(GPIO_PORTD_BASE, UART1_PIN, GPIO_DIR_MODE_HW); // 设置PD2和PD3为UART引脚输出 // (PD2->RXD,PD3->TXD) UARTConfigSet(UART1_BASE, 9600, (UART_CONFIG_WLEN_8 | // 配置UART 为 9600波特率, UART_CONFIG_STOP_ONE | // 8-N-1模式发送数据。 UART_CONFIG_PAR_NONE) & 0xFFFFFFEF); IntMasterEnable(); // 使能处理器中断 GPIOPinWrite(GPIO_PORTC_BASE, RE_DE, 0); // 设置PC7为低电平 UARTIntEnable(UART1_BASE, UART_INT_TX); // 使能UART1发送中断 IntEnable(INT_UART1); // UARTEnable(UART1_BASE); GPIOPinWrite(GPIO_PORTC_BASE, RE_DE, RE_DE); // 将RS485设置为发送模式 UARTSend(g_pucString, sizeof (g_pucString) - 1); // 向UART发送一个字符串。 }
|