【问题标题】:UART only receiving FF and FEUART 只接收 FF 和 FE
【发布时间】:2021-04-28 03:47:58
【问题描述】:

我目前正在通过 FT232 从 PIC18F4620 传输到 CoolTerm。我目前只收到来自 PIC 的 FF 和 FE。我想知道为什么会这样。 Rx - TX 已正确切换,连接它们的电缆似乎是安全的。我能想到的唯一问题是波特率不正确,但是查看数据表我不相信。任何见解将不胜感激。 (我随意选择了 51 作为我的测试编号。任何数字或字母都可以)。

Circuit



const unsigned char MSG0[] = "Transmitting... ";
const unsigned char MSG1[] = "Sent:";
const unsigned char MSG2[] = "TEST:";

// Subroutine Declarationsb
#include <pic18.h>

// Subroutines
#include        "lcd_portd.c"

#include <delays.h>
#include <plib.h>
#include <stdint.h>

void UART_TX_Init(void)
{
    BRG16 = 0;
    BRGH = 1; // Set For High-Speed Baud Rate
    SPBRG = 64; // Set The Baud Rate To Be 9600 bps
  //--[ Enable The Ascynchronous Serial Port ]--
    SYNC = 0;
    SPEN = 1;
  //--[ Set The RX-TX Pins to be in UART mode (not io) ]--
    TRISC6 = 1;  // As stated in the datasheet
    TRISC7 = 1;  // As stated in the datasheet
    TXEN = 1; // Enable UART Transmission
}

void UART_Writes(uint8_t data)
{
    while(!TRMT);
    TXREG = data;
}

// Main Routine
void main(void)
{
    UART_TX_Init();
    unsigned int result = 0;
    unsigned int i;
    uint8_t      data = 51;
    TRISA = 0;
    TRISC = 0;
    TRISB = 0;
    TRISD = 0;
    TRISE = 0;
    TRISA = 0;
    TRISB = 0x00;
    PORTC = 0;
    PORTD = 0;
    PORTE = 0;
    ADCON1 = 0x0F;

    LCD_Init();                  // initialize the LCD
    LCD_Move(0,0);  for (i=0; i<20; i++) LCD_Write(MSG0[i]); 
    Wait_ms(100); 
    LCD_Move(1,0);  for (i=0; i<5; i++) LCD_Write(MSG1[i]); 
    while(1) {
        Wait_ms(1000);
        UART_Writes(data);
        LCD_Move(1,5); LCD_Out(data,3,0);
    }
}


CoolTerm

【问题讨论】:

  • 与您的问题无关,但请尝试重新格式化代码以使缩进一致。不一致的缩进使代码更难阅读和遵循。恰当的例子:UART_Writes 函数,乍一看,TXREG = data; 似乎在循环内。
  • 与您的问题更相关的是,双方的起始位、停止位、奇偶校验、波特率等是否完全相同?
  • 您是否有示波器跟踪来确认线路上的波形是否符合预期?
  • "receiving FF and FE"表示接收端使用了不正确的波特率或一些这样的错误设置。

标签: c uart pic18


【解决方案1】:

您的时钟频率是多少?您是如何配置晶体振荡器设置的?请分享您的时钟设置和配置。

如果时钟设置正确,则计算正确的波特率并尝试。

void UART_Writes(uint8_t data)
{

while(!TRMT)
{
  //put Nop() and try
}
    TXREG = data;
}

【讨论】:

  • 其实这并不能回答问题。您的意思是发表评论吗?
  • 我已经在上面的帖子中发布了电路。
  • @thebusybee ,垃圾的原因很可能是晶体设置或波特率不稳定,而不是物理接线问题,或者可能是UART配置错误。
  • 当然,但是您没有发布一个回答说这里就是这种情况。您正在询问 OP,它属于问题下方的评论中,以便 OP 可以做出反应并扩展问题。 - 您显示的来源与 OP 相同,只是您用花括号替换了分号。这也不是问题的答案,因为它没有任何改变。
猜你喜欢
  • 2016-07-21
  • 1970-01-01
  • 2019-09-13
  • 2017-09-16
  • 1970-01-01
  • 2017-09-26
  • 1970-01-01
  • 1970-01-01
  • 2018-06-20
相关资源
最近更新 更多