PIC 32 TTL通讯

PIC 32 TTL communication

我得到了一个 PIC32mx795f512L,以便为 I2C 构建一个间谍,我将在 SDA、SCL 和 GND 上连接 3 根线,然后我必须检测发送的数据。这部分没问题。现在,一旦我有了数据,我就必须通过 RX、TX 将它发送到计算机(实际上,我将它发送到一个将其转换为 RS232 的适配器),这就是我的问题。

我真的不知道如何初始化此通信。 现在我输入:

mPORTFClearBits(BIT_8);
TRISFbits.TRISF8=0;        // RF8 output==>TX1
TRISFbits.TRISF2=1;        // RF1 input==>RX1
U1STA = 0x1400; // Enable Tx(inv) and Rx
U1BRG = 8332; // value = (80000000 / BAUD) - 1 = 9600
U1MODE = 0x8008; // Enable UART with 1 stop bit, no parity and BRGH
OpenUART1(UART_EN | UART_BRGH_FOUR, UART_RX_ENABLE | UART_TX_ENABLE, UBRG(UART1_BAUD));

通过查资料sheet但其实我不知道是否所有需要的都设置好了。 尽管如此,我还是不知道如何通过 TX 发送数据。 我找到了 this topic 上面写着:

To make some char output (a - into this example) on the UART simply write this code:

   if(!BusyUART1()) 
   putsUART1("-\r\n"); "

但是我找不到"a"在哪里使用。

所以,如果有人觉得可以帮助我,请随时帮助我。

在设置UART 通信时,基本上以下事项很重要

  • UART 波特率
  • UART 引脚初始化(PIC 中的TRIS 位)
  • 多少数据位(7或8)
  • 有多少停止位(1或1.5或2)
  • 奇偶校验(无或奇或偶)

我可以看到在你的代码中初始化了所有这些东西,这些都是必要的。所以这是对你第一个问题的回答。

对于你的第二个问题,UART 忙位被检查并且 减号 '-' 后跟 CRLF 通过 UART发送

按照以下步骤设置 UART 传输:

  1. 为合适的波特率初始化 UxBRG 寄存器(参见第 21.3 节“UART 波特率发生器”)。

  2. 通过写入 PDSEL<1:0> 设置数据和停止位的数量,以及奇偶校验 selection 位(UxMODE<2:1>)和 STSEL 位(UxMODE<0>)。

  3. 如果需要发送中断,设置相应中断中的UxTXIE控制位 启用控制寄存器 (IEC)。指定传输的中断优先级和子优先级 使用相应中断中的 UxIP<2:0> 和 UxIS<1:0> 控制位中断 优先级控制寄存器 (IPC)。此外,select 通过写入发送中断模式 UTXISEL 位(UxSTA<15:14>)。
  4. 通过设置 UTXEN 位(UxSTA<10>)启用传输,这也会设置 UxTXIF 位。 UxTXIF 位应在为该服务提供服务的软件例程中清零 UART 发送中断。 UxTXIF 位的操作由 UTXISEL 控制 控制位。
  5. 通过设置 ON 位 (UxMODE<15>) 启用 UART 模块。
  6. 将数据加载到 UxTXREG 寄存器(开始传输)

执行以下步骤设置UART接收:

  1. 为适当的波特率初始化 UxBRG 寄存器(见第 21.3 节“UART 波特率发生器”)。
  2. 通过写入 PDSEL<1:0> 设置数据和停止位的数量,以及奇偶校验 selection (UxMODE<2:1>) 和 STSEL (UxMODE<0>) 位。
  3. 如果需要中断,设置相应中断允许控制中的UxRXIE位 注册(IEC)。使用 UxIP<2:0> 和 UxIS<1:0> 控制相应中断优先级控制寄存器(IPC)中的位。还, select 通过写入 URXISEL<1:0> 位(UxSTA<7:6>)的接收中断模式。
  4. 通过设置 URXEN 位(UxSTA<12>)使能 UART 接收器。
  5. 通过设置 ON 位 (UxMODE<15>) 启用 UART 模块。
  6. 接收中断取决于 URXISEL<1:0> 位设置。如果接收中断 未使能,用户可以轮询 URXDA 位(UxSTA<0>)。 UxRXIF 位应该是 在为 UART 接收中断服务的软件例程中清除。
  7. 从接收缓冲区读取数据。如果9位传输是selected,读一个字;除此以外, 读取一个字节。只要缓冲区中有可用数据,就会设置 URXDA 位。