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 传输:
为合适的波特率初始化 UxBRG 寄存器(参见第 21.3 节“UART 波特率发生器”)。
通过写入 PDSEL<1:0> 设置数据和停止位的数量,以及奇偶校验 selection
位(UxMODE<2:1>)和 STSEL 位(UxMODE<0>)。
- 如果需要发送中断,设置相应中断中的UxTXIE控制位
启用控制寄存器 (IEC)。指定传输的中断优先级和子优先级
使用相应中断中的 UxIP<2:0> 和 UxIS<1:0> 控制位中断
优先级控制寄存器 (IPC)。此外,select 通过写入发送中断模式
UTXISEL 位(UxSTA<15:14>)。
- 通过设置 UTXEN 位(UxSTA<10>)启用传输,这也会设置
UxTXIF 位。 UxTXIF 位应在为该服务提供服务的软件例程中清零
UART 发送中断。 UxTXIF 位的操作由 UTXISEL 控制
控制位。
- 通过设置 ON 位 (UxMODE<15>) 启用 UART 模块。
- 将数据加载到 UxTXREG 寄存器(开始传输)
执行以下步骤设置UART接收:
- 为适当的波特率初始化 UxBRG 寄存器(见第 21.3 节“UART 波特率发生器”)。
- 通过写入 PDSEL<1:0> 设置数据和停止位的数量,以及奇偶校验 selection
(UxMODE<2:1>) 和 STSEL (UxMODE<0>) 位。
- 如果需要中断,设置相应中断允许控制中的UxRXIE位
注册(IEC)。使用 UxIP<2:0> 和
UxIS<1:0> 控制相应中断优先级控制寄存器(IPC)中的位。还,
select 通过写入 URXISEL<1:0> 位(UxSTA<7:6>)的接收中断模式。
- 通过设置 URXEN 位(UxSTA<12>)使能 UART 接收器。
- 通过设置 ON 位 (UxMODE<15>) 启用 UART 模块。
- 接收中断取决于 URXISEL<1:0> 位设置。如果接收中断
未使能,用户可以轮询 URXDA 位(UxSTA<0>)。 UxRXIF 位应该是
在为 UART 接收中断服务的软件例程中清除。
- 从接收缓冲区读取数据。如果9位传输是selected,读一个字;除此以外,
读取一个字节。只要缓冲区中有可用数据,就会设置 URXDA 位。
我得到了一个 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 传输:
为合适的波特率初始化 UxBRG 寄存器(参见第 21.3 节“UART 波特率发生器”)。
通过写入 PDSEL<1:0> 设置数据和停止位的数量,以及奇偶校验 selection 位(UxMODE<2:1>)和 STSEL 位(UxMODE<0>)。
- 如果需要发送中断,设置相应中断中的UxTXIE控制位 启用控制寄存器 (IEC)。指定传输的中断优先级和子优先级 使用相应中断中的 UxIP<2:0> 和 UxIS<1:0> 控制位中断 优先级控制寄存器 (IPC)。此外,select 通过写入发送中断模式 UTXISEL 位(UxSTA<15:14>)。
- 通过设置 UTXEN 位(UxSTA<10>)启用传输,这也会设置 UxTXIF 位。 UxTXIF 位应在为该服务提供服务的软件例程中清零 UART 发送中断。 UxTXIF 位的操作由 UTXISEL 控制 控制位。
- 通过设置 ON 位 (UxMODE<15>) 启用 UART 模块。
- 将数据加载到 UxTXREG 寄存器(开始传输)
执行以下步骤设置UART接收:
- 为适当的波特率初始化 UxBRG 寄存器(见第 21.3 节“UART 波特率发生器”)。
- 通过写入 PDSEL<1:0> 设置数据和停止位的数量,以及奇偶校验 selection (UxMODE<2:1>) 和 STSEL (UxMODE<0>) 位。
- 如果需要中断,设置相应中断允许控制中的UxRXIE位 注册(IEC)。使用 UxIP<2:0> 和 UxIS<1:0> 控制相应中断优先级控制寄存器(IPC)中的位。还, select 通过写入 URXISEL<1:0> 位(UxSTA<7:6>)的接收中断模式。
- 通过设置 URXEN 位(UxSTA<12>)使能 UART 接收器。
- 通过设置 ON 位 (UxMODE<15>) 启用 UART 模块。
- 接收中断取决于 URXISEL<1:0> 位设置。如果接收中断 未使能,用户可以轮询 URXDA 位(UxSTA<0>)。 UxRXIF 位应该是 在为 UART 接收中断服务的软件例程中清除。
- 从接收缓冲区读取数据。如果9位传输是selected,读一个字;除此以外, 读取一个字节。只要缓冲区中有可用数据,就会设置 URXDA 位。