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.

[参考译文] EK-TM4C123GXL:TM4C123上的 UART:无法从接收 FIFO 读取

Guru**** 2220740 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/651579/ek-tm4c123gxl-uart-on-tm4c123-not-able-to-read-from-receive-fifo

器件型号:EK-TM4C123GXL

在 UART 端口2 Rx 引脚上接收字符时遇到问题。 我已将(硬件)引脚 PB1 (Tx ox UART1)连接到 PD6 (UART2的 Rx)。 我成功地从 UART1端口传输数据、但无法在 UART 端口2 Rx 引脚上接收任何数据。 我也在发布代码。 在这方面,即使是小幅帮助也是值得赞赏的。

#include 
#include 
#include 
#include "inc/hw_memmap.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"
#include "driverlib/interrupts.intruarts/include"
#include "h/intruarts.h"






//
//
//此函数将 UART1设置为用于 launchpad
//和 GPS 模块之间的通信。
////
*****************
void
ConfigureUART1 (void)
{

//
//启用用于 UART1引脚的 GPIO 端口 B。
// TODO:将其更改为您正在使用的 GPIO 端口。
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);

//
//为端口 B0和 B1上的 UART1功能配置引脚复用。
//如果您的器件不支持引脚复用、则无需执行此步骤。
// TODO:更改此选项以选择您正在使用的端口/引脚。
//
GPIOPinConfigure (GPIO_PB0_U1RX);
GPIOPinConfigure (GPIO_PB1_U1TX);

//
//启用 UART1,以便我们可以配置时钟。
//
SysCtlPeripheralEnable (SYSCTL_Periph_UART1);

//
//使用内部16MHz 振荡器作为 UART 时钟源。
//与 SIR 核对
//
UARTClockSourceSet (UART1_base、UART_CLOCK_PIOSC);

//
//为这些引脚选择替代(UART)功能。
// TODO:更改此选项以选择您正在使用的端口/引脚。
//
GPIOPinTypeUART (GPIO_PORTB_BASE、GPIO_PIN_0 | GPIO_PIN_1);

//
//初始化 UART1。
//
//UARTStdioConfig (1、9600、16000000);

UARTClockSourceSet (UART1_base、UART_CLOCK_PIOSC);

UARTConfigSetExpClk (UART1_base、UART_CLOCK_PIOSC、9600、UART_CONFIG_PAR_ZERO);

UARTFIFOEnable (UART1_BASE);

}

//*********
//
//此函数将 UART2设置为用于 UART1和 UART2之间的通信。
////
*****************
void
ConfigureUART2 (void)
{

//
//启用用于 UART2引脚的 GPIO 端口 D。
// TODO:将其更改为您正在使用的 GPIO 端口。
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);

//
//为端口 D6和 D7上的 UART2功能配置引脚复用。
//如果您的器件不支持引脚复用、则无需执行此步骤。
// TODO:更改此选项以选择您正在使用的端口/引脚。
//
GPIOPinConfigure (GPIO_PD6_U2RX);
GPIOPinConfigure (GPIO_PD7_U2TX);

//
//启用 UART1,以便我们可以配置时钟。
//
SysCtlPeripheralEnable (SYSCTL_Periph_UART2);

//
//使用内部16MHz 振荡器作为 UART 时钟源。
//与 SIR 核对
//
UARTClockSourceSet (UART2_base、UART_CLOCK_PIOSC);

//
//为这些引脚选择替代(UART)功能。
// TODO:更改此选项以选择您正在使用的端口/引脚。
//
GPIOPinTypeUART (GPIO_PORTD_base、GPIO_PIN_6 | GPIO_PIN_7);

//
//初始化 UART1。
//
//UARTStdioConfig (1、9600、16000000);

UARTClockSourceSet (UART2_base、UART_CLOCK_PIOSC);

UARTConfigSetExpClk (UART2_base、UART_CLOCK_PIOSC、9600、UART_CONFIG_PAR_ZERO);

UARTFIFOEnable (UART2_base);

}


//*********
//
//此函数使用简单的轮询方法提供1秒延迟。
////
*****************
void
SimpleDelay (void)
{
//
//延迟周期1秒
//
SysCtlDelay (16000000 / 3);
}

//*********
//
//向 UART0发送字符串。
////
*****************
void
UART1Send (const uint8_t * pui8Buffer、uint32_t ui32Count)
{
//
//循环,同时有更多字符要发送。
//
while (ui32Count---)
{

//
//将下一个字符写入 UART。
//

while (!UARTSpaceAvail (UART1_base)){
//等待 Tx FIFO 中的空间可用。
UARTFIFODisable (UART1_BASE);

UARTFIFOEnable (UART1_BASE);

}

UARTCharPut (UART1_base、* pui8Buffer++);

//
//打开 LED (绿色)。
//
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_3、GPIO_PIN_3);

SimpleDelay();

//关闭 LED (绿色)。
//
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_3、0x00);

//
//打开 LED (蓝色)。
//
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、GPIO_PIN_2);

SimpleDelay();

//
//关闭 LED (蓝色)。
//
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、0x00);


}
}

//*********
//
//针对闪烁 LED 的配置。
////
*****************
void
ConfigureLED (void){
//
//启用用于板载 LED 的 GPIO 端口。
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);

//
//检查是否启用了外设访问。
//
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOF))
{
}

//
//为 LED 启用 GPIO 引脚(PF3、PF2、PF1)。
//将方向设置为输出,并启用 GPIO
//用于数字功能的引脚。
//
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_3);
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_2);
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_1);

}


//*********
//
//主要功能
//
//*********

int
main (void)
{

ConfigureLED();

配置 UART1 ();

配置 UART2 ();

while (true){
uint32_t rec = 0;

UART1Send ((uint8_t *)"ABCDEFGHKLIJMNOP"、16);

SimpleDelay();

while (!UARTCharsAvail (UART2_base)){
//
//等待 UART2的接收 FIFO 中出现一个字符。
//
}

//
//提取字符。 根据、"REc"将为 true 或 false
//接收 FIFO 中存在字符。
//
REC = UARTCharGetNonBlocking (UART2_base);

if (rec){

//
//打开红色 LED。
//
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、GPIO_PIN_1);

SimpleDelay();

//
//关闭红色 LED。
//
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、0x00);

SimpleDelay();

}
}

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Suyash Bagad"]在这方面,即使是小的帮助也将不胜感激。

    事实上、这种"小帮助"是我的专长。    BTW -非常出色的帖子-格式良好且清晰呈现。   而且-刚刚注意到-这是您的"第一篇帖子"-非常出色!

    这里有几个问题/意见: (和赤裸裸的意见)

    • 您如何知道您的传输成功?    (这还没有说明-我们与您的远程人员"假设"是危险的-您是否确定了 TX 输出的范围?
    • 减去通常的 UART"线路驱动器"-在 UART 的 TX 引脚上添加一个上拉电阻器可能会很有用(甚至是必要的)。    请回想一下、任何"连接的"RX 引脚都等待"信号电平变化"以标记"开始位"键的到达。   除非 UART TX"默认为数据输出高电平"、否则我要添加该电阻器。  (10K 应该)
    • 您启用 UART -但不要"等待其准备就绪!"   (通过 SysCtlPeripheralReady()函数。)    "不等待"(可能)有时工作(甚至经常工作)-但不能保证!
    • 您选择了更复杂的"UART_CONFIG_PAR_ZERO "参数。   虽然这样做可能是有效的-"PAR_NONE"证明更常见- KISS 要求您、"Start Basic!"
    • "外设驱动程序库用户指南"中的代码示例"UARTCharGetNonBlocking ()"中采用了"while"、 这(可能)放宽了"打开 UART FIFO 包装"所需的时序。   (可能)  您使用的"如果"可能会证明可疑...
    • 一如既往-我会尽可能靠近"发生故障的 RX 引脚"进行探测(当然要小心)、以确保 TX 信号(真正的)到达。

    同样、您的职位是"有史以来最好的"首次发布职位的有力候选人!   做得很好!   (因此应该有一个"类似"的说法-但该奖项已被删除-并且没有任何好的/好的理由!)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我可以提供一些帮助。 在设置 UART1和 UART2时调用函数 UARTConfigSetExpClk 的第二个参数 是时钟速率、而不是时钟源编号。 它应如下所示:

    UARTConfigSetExpClk (UART2_base、16000000、9600、UART_CONFIG_PAR_ZERO);
    

    这将使波特率达到9600。

    您的代码在 UART1上发送16个字符、每个字符之间每次发送一个字符、延迟为1秒。 然后从 UART2的 FIFO 读取一个字符、延迟2秒、重复在 UART1上发送16个字符。 这是您打算做的事情吗? UART2上的 FIFO 将第二次溢出。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、还有两个建议。 首先、您没有设置字符长度。 默认情况下、它仅为5位。 如果与 GPS 通信、您可能需要以下内容:

    UARTConfigSetExpClk (UART2_base、16000000、9600、(UART_CONFIG_WLEN_8 |UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_NONE));
    

    接下来、必须先启用引脚端口和 UART、然后再将引脚类型设置为 UART。

    //启用用于 UART2引脚的 GPIO 端口 D。
    // TODO:将其更改为您正在使用的 GPIO 端口。
    //
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
    
    //
    //启用 UART1,以便我们可以配置时钟。
    //
    SysCtlPeripheralEnable (SYSCTL_Periph_UART2);
    //
    //为端口 D6和 D7上的 UART2功能配置引脚复用。
    //如果您的器件不支持引脚复用、则无需执行此步骤。
    // TODO:更改此选项以选择您正在使用的端口/引脚。
    //
    GPIOPinConfigure (GPIO_PD6_U2RX);
    GPIOPinConfigure (GPIO_PD7_U2TX);
    

    话虽如此、我建议您仔细查看一些有关外设初始化方式的示例代码。 有时、函数调用顺序等简单的东西很重要。

    塞缪尔·克莱门斯(用马克·吐温的笔名写的)年轻时,因担任河船船长而接受采访时,他被问及他是否知道所有的沙条都在哪里。 他立即回答"不、但我知道他们不在哪里"。 使用成熟的示例代码就像我们知道"沙条不知道"的地方一样。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    虽然 Twain 先生可能"避开了沙条"-难道这里的人不应该认识到"甚至是示例代码"有时会忽略(必要/有用)函数调用吗?

    提供的示例(上面的帖子)没有提到"外设就绪"的"有用调用"、而"并非总是"需要、这种"防御性编码"会起到"合理"的作用!    (避免使用砂条。)

    上述"笔记本"的内容是:"引脚类型"-但列出了"引脚配置"-假设"引脚类型"遵循"引脚配置"-可以将其视为"通用规则"吗?   (团队/我发现、尽管"文档组合"很多、但却没有提及此规则。)

    请注意-(如早期回答帖子中所述) PDL "很难避免"、最重要的是"外设初始化"-邀请海报进入高悬崖。    (可提供"河景"!)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢  和所有其他人的所有建议!

    您在建议可疑传输时、正是正确的。 我使用示波器检查了传输引脚、除了恒定3.5-3.6V (APPx)之外什么都没有。  

    回到基础知识、我尝试编写一个更简单的代码来测试 UART 传输。 我已经配置了 UART0和 UART2端口、并且我正在将(稍作修改) UART0处接收到的任何字符再次回显到 UART0 (因此、如果我按"A"并从 PC 发送到 UART0、我会在 PC 上的串行监视器上看到"B")。 现在、我还将同一个字符回显到 UART2端口(即从 UART2 Tx 引脚(PD7)传输"A")、并检查示波器上同一引脚(PD7)上的信号、再次获得恒定的"0"电压。  

    最后、UART0端口工作正常、但 UART2 (或 UART1、我已经尝试过这两种)端口不工作。 请帮我调试这个、我从昨天开始就一直在努力!

    #include 
    #include 
    #include 
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "driverlib/gpio.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/sysctal.h"
    #include "driverlib/uart/uart.h"
    
    
    #include "SysConfigCtl(SysClock_map.h"
    
    )|
    
    
    配置 GPIOSYSC_0 (SysCtl_sysctl);USTRF_0_US_0_UST_GPIOSYSC_0 (SysCtl_USTRF_0_0_UST_GPIO0_USTRO)
    
    GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
    UARTConfigSetExpClk (UART0_BASE、SysCtlClockGet ()、115200、
    (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
    
    
    SysCtlPeripheralEnable (SYSCTL_PERIPH_UART2);
    SysCtlPeripheralEnable (SYSCTL_PERIPH_GPIOD);
    GPIOConfigure (GPIO_PD6_U2RX);GPTOL_PINTX_Configure
    
    GPIOPinTypeUART (GPIO_PORTD_base、GPIO_PIN_6 | GPIO_PIN_7);
    UARTConfigSetExpClk (UART2_base、SysCtlClockGet ()、9600、
    (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE);
    
    }
    
    int main (void){
    
    ConfigureUART ();
    UARTCharPut (UART0_BASE、'E');
    UARTCharPut (UART0_BASE、'n');
    UARTCharPut (UART0_BASE、"t");
    UARTCharPut (UART0_BASE、"e");
    UARTCharPut (UART0_BASE、 'R');
    UARTCharPut (UART0_BASE、');
    UARTCharPut (UART0_BASE、'T');
    UARTCharPut (UART0_BASE、'e');
    UARTCharPut (UART0_BASE、'x');
    UARTCharPut (UART0_BASE、 "T");
    UARTCharPut (UART0_BASE、":");
    UARTCharPut (UART0_BASE、");
    
    UARTCharPut (UART2_base、'a');
    
    while (1)
    {
    if (UARTCharsAvail (UART0_BASE)){
    uint32_t recd = 0;
    recd = UARTCharGet (UART0_BASE);
    UARTCharPut (UART0_BASE、recd+1);
    UART2_BASE (UARTChart) recd);
    }
    
    }
    
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Suyash、
    如何(以电气方式)将 UART1或 UART2输出连接到终端?
    您是否知道 Tiva 的输出与 PC UART 的预期输入不直接兼容?
    搜索 TTL 和 RS232级别以更好地理解、因为这可能是问题所在。
    如果您在 PD7上看不到任何内容、这毫无意义、但是... 你确定吗? 非活动的 UART 输出引脚实际上会保持高电平、而不是如您所描述的低电平、并且引脚配置很简单、看起来是正确的...
    此致
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Suyash、

    您还发表了另一篇经过深思熟虑、格式良好且详细的文章-这也是太棒了! (在图表上表现良好-尤其是对于一个"如此新"的人而言。)

    这里还有一个-可能"错过了事实"、PD7是一个"Devil Pin"-应该避免-除非您准备"将注意力从您的"中心任务转移到另一个任务!"     (这是严重违反亲吻-无论公司/我喜欢什么成功-最常源于"亲吻聚焦和持续努力!"    (即、我们"展示"-并将"激光聚焦"置于"手头任务"的最小元素中!)

    "避免"使用 PD7和 PF0 -我将在您解决 UART 问题后进行解释。   (这种偏离您的中心任务!)

    选择不包含" Devil 引脚"的 UART。

    请注意、"仅"UART0 "享受"到外部(主要是 USB)世界的电平转换(到 USB)连接。      我相信您正在"在两个 MCU UART 之间"传输数据、这样可以避免此问题、但您仍可能会挑战您在任何非 UART0端口"识别数据"的能力...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是最真实的 CB1!
    看到了吗? 甚至像我这样的“老猴子”也错过了魔鬼的钉子!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我之前没有看到以下内容-您能否进一步了解详情?

    [引用 user="Suyash Bagad">我正在将 UART0处接收到的任何字符再次回显到 UART0...   现在、我还将同一个字符回显到 UART2端口(即从 UART2 Tx 引脚(PD7)传输"A")[/QUERP]

    请帮助我自己(和他人)了解-哪个端口和引脚(曾)接收您 的"UART2 TX (PD7)输出?"    这种明确程度是必要的,但却是不存在的。    和-正如我之前提到的、应该避免使用"PD7是一个 Devil 引脚"。   (偏离我们的关键路径!)

    通过选择另一个 UART 端口(无 Devil 引脚)、我们(仍然)需要知道您 正在连接的"方式、内容和位置"!    (请提供-就像您在第一个出色的帖子上所做的那样:(例如、PAX 至 PBY 等)   这将证明非常有用。   再次查看您的报价(突出显示部分)-我们不知道该传输的目的地!    (“A”正在去某处!)    这很重要-不是吗?

    缓慢、 稳定、专注、 每次一小部分任务-是您的推荐流程。    (这就是我通过 Tech FiRM Public 的方式)

    我要进一步赞扬你"打破千年准则"( 始终且仅限于)作出回应-"他们有(他们认为的)近乎完美的答案/评论。    这样就会让"其他方""在风中摇摆"-永远不知道您:a)已收到我们的请求;b)不知道如何响应;c)在我们的请求上很难工作;或 d)已放弃!    这些"替代含义"都不会对您有利/有利-这是不是吗?    

    更好的是-"尊敬的客户-收到并根据您的请求"努力工作"。   将以 x 小时/天/周/千年等的次数返回给您。"   至少这是"某件事"-我们注意到、您今天早些时候也曾写过类似的-这是为(其他)千禧一代提供的-他们可能"在这条线程上漫步"。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 CB1_MOBILE (1830783),我很抱歉没有回复,是的,我正在努力查看您和他人的建议是否有效。

    因此、我尝试使用 UART1、因为引脚 PD7似乎是"邪恶"。 我的最终目标是从 GPS 模块读取数据(通过向 SIM808发送适当的 AT 命令)、并在计算机的串行控制台上查看数据。 下面的简单代码等待在 UART0 Rx 端口读取字符、如果它找到任何内容(例如、从计算机到通过 USB 连接器的 Launchpad 的字符"A")、它应该回显接收到的字符的修改版本(即"a"+ 1 = 66 ="B")、 这可以在串行监视器上看到。 此外、我从计算机发送到 UART0的字符、与我从 UART1的 Tx 引脚传输的字符相同、用于将其发送到 SIM808模块。

    请帮帮我。

    硬件连接:

    1) 1)通过 USB COD 将计算机连接到 TM4C123GXL。 (即默认情况下 launchpad 上的 UART0)

    2)引脚 PB0 (launchpad 上 UART1的 Rx)连接到 SIMM808 GSM-GPS 模块的 Tx。

    3)引脚 PB1 (launchpad 上 UART1的 Tx)到 SIMM808 GSM-GPS 模块的 Rx。

    4)两块电路板上的接地短路。

    5) 5)在 PB0和 PB1引脚端放置12K 电阻器。

    示波器结果:

    在引脚 PB0和 PB1上、恒定电压(约为3V)、但只要我持续按下键盘上的某些键、PB0和 PB1上的电压电平就会脉冲下降并再次上升。 我附上示波器的图片。

    drive.google.com/open





     代码:

    #include 
    #include 
    #include 
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "driverlib/gpio.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/uart.h"
    
    void
    ConfigureUART (){
    
    SysCtlClockSet (SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);
    SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
    GPIOPinConfigure (GPIO_PA0_U0RX);
    GPIOPinConfigure (GPIO_PA1_U0TX);
    GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
    UARTConfigSetExpClk (UART0_BASE、SysCtlClockGet ()、115200、
    (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE);
    
    
    SysCtlPeripheralEnable (SYSCTL_Periph_UART1);
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
    GPIOPinConfigure (GPIO_PB0_U1RX);
    GPIOPinConfigure (GPIO_PB1_U1TX);
    GPIOPinTypeUART (GPIO_PORTB_BASE、GPIO_PIN_0 | GPIO_PIN_1);
    UARTConfigSetExpClk (UART1_base、SysCtlClockGet ()、9600、
    (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE);
    
    }
    
    int main (void){
    
    ConfigureUART();
    UARTCharPut (UART0_BASE、'E');
    UARTCharPut (UART0_BASE、"n");
    UARTCharPut (UART0_BASE、"t");
    UARTCharPut (UART0_BASE、"e");
    UARTCharPut (UART0_BASE、"r");
    UARTCharPut (UART0_BASE、');
    UARTCharPut (UART0_BASE、"T");
    UARTCharPut (UART0_BASE、"e");
    UARTCharPut (UART0_BASE、"x");
    UARTCharPut (UART0_BASE、"t");
    UARTCharPut (UART0_BASE、":");
    UARTCharPut (UART0_BASE、');
    
    UARTCharPut (UART1_BASE、'A');
    UARTCharPut (UART1_BASE、"T");
    
    while (1)
    {
    if (UARTCharsAvail (UART0_BASE)){
    uint32_t recd = 0;
    RID = UARTCharGet (UART0_BASE);
    UARTCharPut (UART0_BASE、RHD+1);
    UARTCharPut (UART1_base、recd);
    }
    
    }
    
    
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我知道您的"使命"是能够"命令/控制"您的 GSM 模块。     然而,这一旅程由 "许多步骤"组成。     您对 GSM 模块的介绍可能会使"新问题"发挥作用、从而"打破 kiss 的影响"、这是公司/我发现的关键错误!

    现在、你已经被"PD7 (魔鬼针)""蛇头"所取代-虽然"不是"那么邪恶-你的新 PB0和 PB1都表现为(可能)"麻烦的针脚!"    很久以前-供应商代理放置了"鼠疫-抗议者" R9、R10、使其"将 PB0与 PD6相连"、将 PB1与 PD7相连。   如果您的电路板是"LPAD"-并且 PD6或 PD7应该配置为 GPIO 输出-破坏性的"引脚争用"就到了您的家门口。   如果可能、请移除 R9和 R10、以免他们再制造邪恶...   (实际上、我应该已经在"123 LPAD 可疑引脚"列表中添加了 PB0/PB1。)

    您的最新代码受到供应商产品的启发、避免了使用"外设就绪"检查。     虽然不是(总是)需要----这种"防御做法"是"最佳做法"----但应予以采用。  您对 PDL 的阅读将显示"per. RDY"函数。    (您在其中"循环"、确保"刚刚启用"的外设已完成其保留。)

    Plz Standby -午夜对我来说-必须确定代表您的"安全 UART"的易用性...

    和上一步:我将列出那些支持 UART 的端口/引脚-它们是"安全的"-和-出现在"4C'123 LPAD 接头"上-以简化连接:

    • PC4、PC5  UART_4
    • PC6、PC7  UART_3
    • PE0、PE1  UART_7
    • PE4、PE5  UART_5

    我从 LPAD 手册 Pgs 中的 w/中收集了这些数据。 9-11.    请注意、PE0、1会出现在不同的接头上、从而导致互连"混乱"。

    总之、在您能够积极验证"非 UART_0性能!"的正确性之前、我会避免引入 GSM!    如果您要获取(再次称为"求和、借用(合法)获取"CMOS 到 USB 转换器")、则可以节省大量时间和精力、以便您可以"直接将" PC 连接到 LPAD 的"非 UART_0" UART 端口。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当然、会等待您的回复。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    回答已完成-请"幽默我"-现在请避免使用 GSM。   (现在03:15 CST 美国-狗猫"战斗"让我感到敬畏-他们和我现在都在"日出"之前完成了。)

    请注意我的列表 "Devil & otherwise suspect - ports/pins!"    

    我还准备了一个  (可能)出现在 LPAD 接头上的"安全 UART 端口"列表-使互连"快速/简单"。    (我的互连类型...)

    并添加(被遗忘)"检查外设就绪"-  我们必须确保减少(理想情况下、识别和消除)故障的"所有途径"...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我购买了一个 USB 转串行转换器并检查了 UART、它现在工作了! :D
    我将进一步探讨 GSM-MUC 通信。
    非常感谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对您来说很好-很高兴您坚持下去。

    请注意、有(几个)"类型"的"USB 转串行"转换器。    此类"串行转换器"可能包含"USB 转 RS23"-这可能会损坏您的 MCU!    请注意我的语言(之前)"USB 转 CMOS"-它最好地描述了一个"MCU 友好型-无损" USB 转换器。

    祝贺您的成功-感谢您在此处支付"已解决"(支付部分费用-不多)帐单(保持一些我们喜欢 的"白炽灯"亮起/亮起)...

    如果您描述最终选择的"Whise" UART 以及"What you changed - code wise (您更改了什么-代码明智)"以获得"Working Now status!"、则会对其他人有用。

    此外、您还撰写了"优秀系列文章"-深思熟虑和详细-清晰地描述了您的问题-代码易于阅读(即格式化)-非常适合新的(甚至是普通的)海报...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对于与我一样的问题,无论谁陷入同一个问题,请注意:

    1)如  、PD7和 PF0确实是"邪恶的"、如果有选项、请始终选择 UART3、4、5、7端口中的任何一个。

    2) 2)对于我来说、UART3、4运行良好、5和7也可以、但我尚未检查它们。  

    3) 3)这是最重要的结论:如果您正在寻找从 UART 端口到示波器的"信号"、请不要担心每次接收或传输字符时都会出现尖峰。 我已经花了60个小时担心这个问题、直到我使用串行转 USB (请记住、TTL 电平转换器 RS232会破坏您的板、因为它在12V 电平下工作)检查了我的端口。 因此、我正在调试示波器问题以找到问题、我不确定、但示波器的采样或配置可能存在一些问题。

    无论如何、我希望在几天内完成与 GSM 的沟通、并且再次期待您将来也能提供所有帮助! 来自印度的爱!

    最后、示波器上每次传输或接收的信号图片、是的、它们是尖峰、不是预期的数字信号、但您的 UART 没有什么问题! 谢谢!

    drive.google.com/open

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    出色-在短时间内、您将(可能)"运行此论坛"。    (但避免"补充他人"(此处为一个"SPI 挑战")对象...)
    您的代码-它是否(完全)-从您今天早上早些时候的帖子中更改?   (12月12日:54日、23日)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    只能使用 UART 端口3配置而不是 UART2。 休息时间不变。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的-对于其他人- Suyash 的代码-如上所述@ 12:54 a.m. 12月23日,这是报道的工作!

    我会(仍然)添加,“Check for Peripheral Ready”(检查外围设备就绪)-“Incompletely initialized peripheral”(未完全初始化的外围设备)可能不会(始终)被检测到-并且可以,“重复您的一天...” 或天数..."