0

为了构建 I2C 间谍,我得到了 PIC32mx795f512L,我将在 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));

通过检查数据表,但我实际上不知道是否设置了所需的一切。尽管如此,我还是不知道如何通过 TX 发送数据。我发现这个话题 说:

要在 UART 上进行一些字符输出(本示例中的 a -),只需编写以下代码:

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

但我找不到使用“a”的位置。

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

4

2 回答 2

0

在建立UART沟通时,基本上遵循的事情很重要

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

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

对于第二个问题,UART检查忙位并通过Tx发送减号“-”后跟CRLFUART

于 2015-07-03T16:16:05.817 回答
0

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

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

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

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

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

  1. 初始化 UxBRG 寄存器以获得适当的波特率(见第 21.3 节“UART 波特率发生器”)。
  2. 通过写入 PDSEL<1:0> (UxMODE<2:1>)和 STSEL (UxMODE<0>)位来设置数据和停止位的数量以及奇偶校验选择。
  3. 如果需要中断,请设置相应中断允许控制寄存器 (IEC) 中的 UxRXIE 位。使用相应中断优先级控制寄存器(IPC)中的 UxIP<2:0> 和 UxIS<1:0> 控制位指定中断的优先级和子优先级。此外,通过写入 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 位传输,则读取一个字;否则,读取一个字节。每当缓冲区中有数据可用时,URXDA 位就会置位。
于 2015-07-07T07:17:50.140 回答