PIC 32 TTL通信

时间:2015-07-03 09:21:50

标签: microcontroller pic mplab ttl pic32

为了构建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发送数据。 我找到了this topic 在哪里说:

  

要在UART上输入一些字符串输出(在本例中为a),只需编写以下代码:

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

但我找不到使用“a”的地方。

所以,请,如果有人能够帮助我,请随意这样做。

2 个答案:

答案 0 :(得分:0)

在设置UART通信

时,基本上一件事情很重要
  • UART 波特率
  • UART引脚初始化(TRIS中的PIC位)
  • 多少数据位(7或8)
  • 多少停止位(1或1.5或2)
  • 奇偶(无或奇或偶)

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

对于第二个问题,我会检查UART忙位并减号' - '随后CRLF通过UART Tx

发送

答案 1 :(得分:0)

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

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

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

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

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