主题中讨论的其他器件:UCD3138A64、 UCD3138128
工具/软件:Code Composer Studio
您好、先生、您能不能详细介绍如何通过 UCD3138a64中的 UART 引脚连接 WIFI (ESP8266)模块、也可以提供一些程序或小细节。 谢谢你。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
您好、先生、您能不能详细介绍如何通过 UCD3138a64中的 UART 引脚连接 WIFI (ESP8266)模块、也可以提供一些程序或小细节。 谢谢你。
SIR 您已经在 UART 社区中发布了 UART 程序,它 在 UART 0引脚上运行良好。 我在初始化过程中在 UART1上遇到的问题
(三
下面的代码在 UART 0上正常运行、但在编辑 UART1后应用相同的代码未正常运行
void init_uart0 (void)
{
volatile unsigned char rx_BYTE;
Uart0Regs.UARTCTRL3.bit.SW_RESET = 0;//初始化 UART 时软件复位
Uart0Regs.UARTCTRL0.bit.data_size = 7;//8位
Uart0Regs.UARTCTRL0.bit.STOP = 1;/2停止位
Uart0Regs.UARTCTRL0.bit.SYNC_MODE = 1;//异步模式
Uart0Regs.UARTHBAUD.bit_BAUD_DIV_H = 0;
Uart0Regs.UARTMBAUD.bit.BAUD_DIV_M = 0;
Uart0Regs.UARTLBAUD.bit.BAUD_DIV_L = 49;//对于38400 //对于控制板为47,对于开环为44
Uart0Regs.UARTRRXST.bit.RX_ENA=1;//启用 RX
Uart0Regs.UARTTXST.bit.TX_ENA=1;//启用 TX
UART0Regs.UARTINTST.ALL = 0xff;//这两条语句应清除状态位
Uart0Regs.UARTINTST.ALL = 0;
RX_BYTE = Uart1Regs.UARTRXBUF.bit.RXDAT;//清除 RXRDY 标志
Uart0Regs.UARTIOCTRLTX.bit.IO_FUNC = 1;//启用发送引脚
Uart0Regs.UARTIOCTRLRX.bit.IO_FUNC = 1;//启用接收引脚
Uart0Regs.UARTCTRL3.bit.clock = 1;//内部时钟选择;
Uart0Regs.UARTCTRL3.bit.SW_RESET = 1;//软件复位已释放 UART 初始化完成?
Uart0Regs.UARTIOCTRLSCLK/bit.IO_FUNC = 0;//禁用 UART 的外部时钟。
Uart0Regs.UARTTXBUF.ALL =';//输出一个字节来启动操作。
}
空字符_out_0 (字符数据)
{
volatile char rx_Byte;
while (Uart0Regs.UARTTXST.bit.TX_RDY = 0)
{
if (Uart0Regs.UARTRXST.bit.RX_RDY = 1)
{
RX_BYTE = Uart0Regs.UARTRXBUF.bit.RXDAT;//清除 RXRDY 标志
}
PMBus_handler ();
}
Uart0Regs.UARTTXBUF.ALL = DATA;//输出一个字节
}
*********
您能否发送 UART1、以便我可以将 AT 命令发送到 wifi。
为了确保这一点、我尝试了 UCD3138128上的 UART1、除了存储器大小外、它与 A64相同。 它工作正常、至少在传输过程中是如此。 我没有测试接收端。
以下是初始化代码:
void init_uart1 (void)
{
易失性 uint32 rx_Byte1;//volatile、用于发出关于设置但不读取的警告
Uart1Regs.UARTCTRL3.bit.SW_RESET = 0;//初始化 UART 时软件复位
Uart1Regs.UARTCTRL0.bit.data_size = 7;//8位
Uart1Regs.UARTCTRL0.bit.STOP = 1;/2停止位
Uart1Regs.UARTCTRL0.bit.SYNC_MODE = 1;//异步模式
Uart1Regs.UARTHBAUD.ALL = 0;
Uart1Regs.UARTMBAUD.ALL =波特率值 M;
Uart1Regs.UARTLBAUD.ALL = BAUD_RATE _VALUE L; //对于38400 //对于控制板为47,对于开环为44
Uart1Regs.UARTRRXST.bit.RX_ENA=1;//启用 RX
Uart1Regs.UARTTXST.bit.TX_ENA=1;//启用 TX
UART1Regs.UARTINTST.ALL = 0xff; //这两条语句应清除状态位
Uart1Regs.UARTINTST.ALL = 0;
RX_BYTE1 = Uart1Regs.UARTRXBUF.ALL;//清除 RXRDY 标志
Uart1Regs.UARTIOCTRLTX.bit.IO_FUNC = 1;//启用发送引脚
Uart1Regs.UARTIOCTRLRX.bit.IO_FUNC = 1;//启用接收引脚
Uart1Regs.UARTCTRL3.bit.clock = 1;//内部时钟选择;
Uart1Regs.UARTCTRL3.bit.SW_RESET = 1;//软件复位已释放 UART 初始化完成?
Uart1Regs.UARTIOCTRLSCLK/bit.IO_FUNC = 0;//禁用 UART 的外部时钟。
Uart1Regs.UARTTXBUF.ALL ='\n';//输出一个字节来启动操作。
}
我缩小了主函数、以便它所做的就是初始化 PMBus 和 UART1、然后输出一个字符:
void main()
{
init_uart1();
INIT_PMBus (88);
for (;;)
{
CHAR_OUT (0xAA);
}
}
我更改了 char_out 以切换到 uart1、并添加对 PMBus_handler 的调用:
void char_out (char 数据)
{
while (Uart1Regs.UARTTXST.bit.TX_RDY = 0)
{
PMBus_handler ();
}
Uart1Regs.UARTTXBUF.ALL = DATA;//输出一个字节
}
我还不得不说:
#include "PMBus_common.h"
以避免出现警告消息。
我建议您尝试相同的方法、看看它是否适合您。 这样、就没有其他代码会使事情变得混乱。
我一直在尝试考虑可能阻止它工作的因素、在我看来、也许 GLBIOEN 寄存器中的位正在被置位? 这会将这些位的控制权从 UART 中带走、并将其提供给全局 IO 逻辑。
如果是我、我会说我可能完全看错了引脚、但可能没有人会犯这个错误。 或者、外部可能有一些硬件使事情混乱-例如、您将一 个器件的 TX 连接到另一个器件的 TX、将 RX 连接到 RX。