佚名通过本文主要向大家介绍了泰国旅游通讯问题,日本旅游通讯问题,通讯问题,总线通讯问题,qq通讯录导入遇到问题等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: LPC1768 485通讯问题
描述:
描述:
LPC1768485通讯
我的设备(用A表示)通过串口0中断接收另一个设备(用B表示)发送的数据(分三帧发送),A设备收到正确的数据后需要应答,B设备才会发送剩余的数据。A设备和B设备是通过485通讯的,为了查看B设备发送的数据和A设备应答的数据是否正常,我在485线上挂了一个485转232的转换器,通过电脑串口接收485上的所有数据,发现B设备下发的数据是对的,A设备应答的数据也是对的,但是就是接收不到B设备的剩余数据(一种可能B设备没有收到A设备的回复,另一种可能B设备收到的回复数据有误),奇怪的是我通过电脑串口模拟应答数据给B设备,它就能发出剩余的数据,现在我也搞不懂了,怀疑是A设备串口发送的问题,相关代码如下,希望路过的各位帮忙看看,谢谢!
#ifndef __UART_H
#define __UART_H
#include "LPC17xx.h"
#define FOSC 12000000 /* 振荡器频率 */
#define FCCLK (FOSC * 8) /* 主时钟频率<=100Mhz */
/* FOSC的整数倍 */
#define FCCO (FCCLK * 3) /* PLL频率(275Mhz~550Mhz) */
/* 与FCCLK相同,或是其的偶数倍 */
#define FPCLK (FCCLK / 4) /* 外设时钟频率,FCCLK的1/2、1/4*/
/* 或与FCCLK相同 */
#define UART0_BPS (38400) /* 串口0通信波特率 */
#define UART3_BPS (19200) /* 串口3通信波特率 */
//#define UART_SBUF (LPC_UART0->RBR) /*串口0发送*/
#endif
/*********************************************************************************************************
** Function name: UART0_Init
** Descriptions: 按默认值初始化串口0的引脚和通讯参数。设置为8位数据位,1位停止位,无奇偶校验
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void UART0_Init (void)
{
uint16_t usFdiv;
/* UART0 */
LPC_PINCON->PINSEL0 |= (1 << 4); /* Pin P0.2 used as TXD0 (Com0) */
LPC_PINCON->PINSEL0 |= (1 << 6); /* Pin P0.3 used as RXD0 (Com0) */
LPC_UART0->LCR = 0x83; /* 允许设置波特率 */
usFdiv = (FPCLK / 16) / UART0_BPS; /* 设置波特率 38400 */
LPC_UART0->DLM = usFdiv / 256;
LPC_UART0->DLL = usFdiv % 256;
LPC_UART0->LCR = 0x03; /* 锁定波特率 */
LPC_UART0->FCR = 0x06;
LPC_UART0->IER = 0x01; /* 使能接收中断 */
NVIC_EnableIRQ(UART0_IRQn); &nb