经过几次反复测试,今天串口通讯终于成功了。测试过程如下:
首先在MMC中配置好EUSART1,我选择的是8位数据,波特率为9600,为什么不选115200,因为在本单片机中只有9600的误码率最低,仅0.16%,没有比这更低的误码率了。
引脚的配置用默认的,即RB5为RX,RB7为TX,这些设置不用变动。
生成基本代码后,初始化函数已经包含在main()函数的SYSTEM_Initialize()中,只要将接收和发送的范例复制到主循环中,这段代码在eusart1.h文件中可以找到,不过要注意头文件里的代码有两处拼写错误,其中一个是缺少字母,另一个是缺少连接符。
这是当接收到串口信息时立即将收到的信息发送返回,我在此添加了led灯闪亮,以便观察。另外我还添加了一个自动循环发送从ASCII码33到120的代码,以便测试发送状况。下面是main函数代码:
void main(void)
{
// initialize the device
SYSTEM_Initialize();
// When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
// Use the following macros to:
// Enable the Global Interrupts
//INTERRUPT_GlobalInterruptEnable();
// Enable the Peripheral Interrupts
//INTERRUPT_PeripheralInterruptEnable();
// Disable the Global Interrupts
//INTERRUPT_GlobalInterruptDisable();
// Disable the Peripheral Interrupts
//INTERRUPT_PeripheralInterruptDisable();
TMR0_StartTimer();
IO_RA2_SetLow();
for(mode=0;mode<6;mode++){
delay_ms(500);
IO_RA2_Toggle();
}
mode = 33;
IO_RA2_SetHigh();
while (1)
{
// Add your application code
ms++;
if(ms>500){
ms = 0;
mode++;
if(mode>120)
mode = 33;
EUSART1_Write(mode);
}
if(0==IO_RC2_GetValue()){
IO_RA2_SetLow();
delay_ms(200);
IO_RA2_SetHigh();
}
// Logic to echo received data
if(EUSART1_is_rx_ready())
{
IO_RA2_SetLow();
rxData = EUSART1_Read();
if(EUSART1_is_tx_ready())
{
EUSART1_Write(rxData);
}
// delay_ms(500);
IO_RA2_SetHigh();
}
}
}
下面是测试过程:
通过use to TTL转接板(CH340)将电脑与开发板连接好:
这是电脑上串口调试助手显示的信息:
|