本人正在用ARM通过max485对台达变频器通讯, 大家看看程序有没有问题 /**************************************************************************** * 文件名:SENDSTR.C * 功能:向串口发送数据。
****************************************************************************/ #include "config.h"
#define INT8U unsigned char #define UART_BPS 19200 /* 定义通讯波特率 */ INT8U OUT_BUF2[17]={0x3a, 0x30,0x31, 0x30,0x36, 0x32,0x30,0x30,0x31, 0x30,0x30,0x31,0x32, 0x43,0x37, 0x0D,0x0A};//通讯协议 /**************************************************************************** * 名称:DelayNS() * 功能:长软件延时 * 入口参数:dly 延时参数,值越大,延时越久 * 出口参数:无 ****************************************************************************/ void DelayNS(uint32 dly) { uint32 i;
for(; dly>0; dly--) for(i=0; i<5000; i++); }
//#define UART_BPS 19200 /* 定义通讯波特率 */ /**************************************************************************** * 名称:UART0_Ini()
****************************************************************************/ void UART1_Ini(void) { uint16 Fdiv;
U1LCR = 0x87; // DLAB = 1,可设置波特率 Fdiv = (Fpclk / 16) / UART_BPS; // 设置波特率 U1DLM = Fdiv / 256; U1DLL = Fdiv % 256; U1LCR = 0x07; }
/**************************************************************************** * 名称:UART0_SendByte() * 功能:向串口发送字节数据,并等待发送完毕。 * 入口参数:data 要发送的数据 * 出口参数:无 ****************************************************************************/ void UART1_SendByte(uint8 data) { U1THR = data; // 发送数据 while( (U1LSR&0x40)==0 ); // 等待数据发送完毕 }
/**************************************************************************** * 名称:UART0_SendStr() * 功能:向串口发送一字符串 ****************************************************************************/ void UART1_SendStr() { INT8U i; for(i=0;i<17;i++) { IO0SET|=0x10; UART1_SendByte(OUT_BUF2); IO0CLR|=0x10; } }
/**************************************************************************** * 名称:main() * 功能: ****************************************************************************/ int main(void) { PINSEL0 = 0x00050000;// 设置I/O连接到P0.4(收发控制IO) IO0DIR=0x10; UART1_Ini();
while(1) { UART1_SendStr(); DelayNS(10); } return(0); }
不知道发送程序有没有问题,调试到 U1THR = data; // 发送数据 while( (U1LSR&0x40)==0 ); // 等待数据发送完毕
变频器就显示通讯错误。
|