485通信问题
移植到LPC2378上,UART0接的RS485和上位机通信,P0.6是收发转换控制引脚#define U0PINS0x50
在board.c中,修改引脚
void rt_hw_console_init()
{
/* Enable RxD and TxD pins */
PINSEL0 |= U0PINS;
/* 8 bits, no Parity, 1 Stop bit */
U0LCR = 0x83;
FIO0DIR |= RS485_CON; //P0.6为输出
FIO0CLR |= RS485_CON; //接收状态
/* Setup Baudrate */
U0DLL = (PCLK/16/BAUD_RATE) & 0xFF;
U0DLM = ((PCLK/16/BAUD_RATE) >> 8) & 0xFF;
/* DLAB = 0 */
U0LCR = 0x03;
}
然后是输出函数
void rt_hw_console_output(const char* str)
{
FIO0SET |= RS485_CON; // 发送状态
while (*str)
{
if (*str=='\n')
{
while (!(U0LSR & 0x20));
U0THR = '\r';
}
while (!(U0LSR & 0x20));
U0THR = *str;
str ++;
}
FIO0CLR |= RS485_CON; // 接收状态
}
在serial.c中的 rt_hw_serial_init(void)函数中也添加
PINSEL0 = 0x50;
FIO0DIR|=(0x01<<6);
FIO0CLR|=(0x01<<6);//默认为接收状态
在rt_serial_write(rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size)中的发送循环前后添加
if((dev->parent.name)=="uart1")
{
FIO0SET|=(0x01<<6);
}
。
。
。
if((dev->parent.name)=="uart1")
{
FIO0SET|=(0x01<<6);
}
下载到板上启动,logo接收正常,"finsh<<"也显示出来了,但是输入字符没反应,是超级终端配置有问题还是rtt的中断接收有地方需要改动?
看各位已经网络、模拟器啥啥的都跑上了,也想赶快跟上大家的步伐,有点心急
能否提点一二
页:
[1]