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.

[参考译文] 编译器/TM4C123GH6PM:UART1面临问题。

Guru**** 2331900 points
Other Parts Discussed in Thread: TM4C123GH6PM, EK-TM4C123GXL
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/596617/compiler-tm4c123gh6pm-facing-problem-with-uart1

器件型号:TM4C123GH6PM
主题中讨论的其他器件: TM4C123EK-TM4C123GXL

工具/软件:TI C/C++编译器

我在 Keil uVision4上编写了代码、我正在尝试使用#UART1。 但我在下面编写的代码中找不到错误。 为了  使#PortF 上的 LED 闪烁、我还使用了相同的代码来对寄存器的值进行一些必要的更改、并将#UART1替换为#UART0 (之前使用的 UAT0)。 该代码运行良好。

但现在、我遇到了 UART1问题、不知道代码中的问题是什么。 我认为我对寄存器做了错误的操作  

GPIOD->PCTL =(GPIOB->PCTL&0xFFFFFF00)+0x00000040;//GPIO PORTB 0-1

请指导我、现在我尝试使用 UART1来使端口 F 上的 LED 闪烁、因为我想将 GSM 与 TM4C123GH6PM launchpad 连接、因为 UART0的 Rx 和 Tx 没有外部引脚、 这就是为什么我要在引脚 PB0和 PB1上使用 UART1以及 Rx 和 Tx。  

#include

#include

 

void PLL_Init (void);

void UART1_Init (void);

void PortF_Init (void);

void UartWrite (char *pstr);

unsigned char receiver (void);

void transmitter (unsigned char data);

 

int main (void){

   unsigned char 命令;

PLL_Init();                                     

   UART1_Init();                               

PortF_Init();

 

UartWrite ("此程序通过 UART 控制端口 F 上的 LED。\r\n");

 

   while (1)

   {

UartWrite ("输入命令\"0\"、\"1\"、\"2\"、\"3\":");     

UartWrite ("at");        

                                          

       命令=接收器();

       发射器(命令);

UartWrite ("at\r\n");

 

       switch (command){

           情况"0":                

                           GPIOF->DATA = 0x00;

                           中断;

           案例"1":                

                           GPIOF->DATA = 0x02;

                           中断;

           案例"2":                

                           GPIOF->DATA = 0x04;

                           中断;

           案例"3":                

                           GPIOF->DATA = 0x08;

                           中断;

           默认值:

UartWrite ("错误的命令! \r\n");                            

                           中断;

       

   }

 

空 UART1_Init (空)

   sysctl->RCGCUART |= 0x00000002; //UART1

   SYSCTl->RCGCGPIO |= 0x00000002;  //PORTB 时钟启用

   UART1->CTL &=~0x00000002;           //UART1禁用

   UART0->IBRD = 43;                             //波特整数

   UART1->FBRD = 26;                              //波特率悬空

   UART1->LCRH = 0x00000070;               //启用 FEN 和 WLEN

   UART1->CTL |= 0x01;                         /UART 使能;

   GPIOB->AFSEL |= 0x03;                       // PORTB 0-1上的其它替代函数

   GPIOB->DEN |= 0x02;                           // PORTB 0-1输出

   GPIOB->PCTL =(GPIOB->PCTL&0xFFFFFF00)+0x00000040;       //GPIO PORTB 0-1

   GPIOB->AMSEL &=~0x03;                   //模拟禁用

 

void PLL_Init (void)

{    

 sysctl->RCC2 |= 0x8000000;  

 sysctl->RCC2 |= 0x00000800;  

 sysctl->RCC =(sysctl->RCC &~0x000007C0)+ 0x00000540;   

 sysctl->RCC2 &=~0x00000070;  

 sysctl->RCC2 &=~0x00002000;  

 sysctl->RCC2 |= 0x40000000;

 sysctl->RCC2 =(sysctl->RCC2 &~ 0x1FC00000)+(4<<22);   

 while ((sysctl->RIS&0x00000040)=0){};   

 sysctl->RCC2 &=~0x00000800;

 

空 PortF_Init (空)

 volatile unsigned long delay;

 sysctl->RCGC2|= 0x00000020;     

 延迟= sysctl->RCGC2;  

 GPIOF->AMSEL &=~0x0E;      

 GPIOF->PCTL &=~0x0000FFF0;                  

 GPIOF->DIR |= 0x0E;         

 GPIOF->AFSEL &=~0x0E;         

 GPIOF->DEN |= 0x0E;         

 

void UartWrite (char *pstr){

   while (*pstr!= 0)   {

       发射器(*pstr++);        

   }

unsigned char receiver (void){

   while ((UART1->FR&0x10)!= 0){};

   返回 UART1->DR&0xFF;

void transmitter (unsigned char data){

   while ((UART1->FR&0x20)!= 0){};

   UART1->DR =数据;

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

    请下载 TivaWare 库并使用提供的函数。 TivaWare 中的库函数和示例极大地简化了外设初始化任务。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    主席先生,我只是从我的老师那里学习了初始化。 我不知道如何使用外设初始化/和外设库,我已经下载了 Tivaware 软件并已阅读了外设库,但我没有使用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在下面有一个与我的工作相关的代码。 但在 Keil Uvisio4中进行编译时出错。 以下是错误31、其中有副本:
    重建目标'Target 1'
    汇编 STARTUP_TM4C123.....
    编译 system_TM4C123.c..
    编译 GSM[ERIPHERAL.C...
    GSM[ERIPHERAL.c (9):错误:#20:标识符"NULL"未定义
    静态 char * msgContent = NULL;//消息内容占位符
    GSM[ERIPHERAL.c (27):警告:#223-D:隐式声明函数"SysCtlPeripheralEnable"
    SysCtlPeripheralEnable (SYSCTL_Periph_UART2);//启用 UART2上的时钟
    GSM[ERIPHERAL.c (27):错误:#20:标识符"SYSCTL_PERIPH_UART2 "未定义
    SysCtlPeripheralEnable (SYSCTL_Periph_UART2);//启用 UART2上的时钟
    GSM[ERIPHERAL.c (28):错误:#20:标识符"SYSCTL_PERIPH_GPIOD"未定义
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);//启用端口 D 上的时钟// PD6和 PD7将是 RX 和 TX 到 GSM 模块
    GSM[ERIPHERAL.c (29):警告:#223-D:隐式声明函数"SysCtlPeripheralReady"
    while (!SysCtlPeripheralReady (SYSCTL_Periph_UART2));//等待 UART2初始化
    GSM[ERIPHERAL.c (30):警告:#223-D:隐式声明函数"SysCtlPeripheralReady"
    while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOD));//等待 PortD 初始化
    GSM[ERIPHERAL.c (32):错误:#20:标识符"GPIO_PORTD_LOCK_R"未定义
    GPIO_PORTD_LOCK_R = 0x4C4F434B;//解锁 GPIO PD7
    GSM[ERIPHERAL.c (33):错误:#20:标识符"GPIO_PORTD_CR_R"未定义
    GPIO_PORTD_CR_R |= 0xC0;//允许更改为 PD6、7
    GSM[ERIPHERAL.c (35):警告:#223-D:隐式声明函数"IntDisable"
    IntDisable (INT_UART2);
    GSM[ERIPHERAL.c (35):错误:#20:标识符"INT_UART2"未定义
    IntDisable (INT_UART2);
    GSM[ERIPHERAL.c (36):警告:#223-D:隐式声明函数"UARTIntDisable"
    UARTIntDisable (UART2_base、UART_INT_RX|UART_INT_TX|UART_INT_RT);//禁用 UART2中断
    GSM[ERIPHERAL.c (36):错误:#20:标识符"UART_INT_RX"未定义
    UARTIntDisable (UART2_base、UART_INT_RX|UART_INT_TX|UART_INT_RT);//禁用 UART2中断
    GSM[ERIPHERAL.c (36):错误:#20:标识符"UART_INT_TX"未定义
    UARTIntDisable (UART2_base、UART_INT_RX|UART_INT_TX|UART_INT_RT);//禁用 UART2中断
    GSM[ERIPHERAL.c (36):错误:#20:标识符"UART_INT_RT"未定义
    UARTIntDisable (UART2_base、UART_INT_RX|UART_INT_TX|UART_INT_RT);//禁用 UART2中断
    GSM[ERIPHERAL.c (37):警告:#223-D:隐式声明函数"UARTDisable"
    UARTDisable (UART2_base);//配置时禁用 UART2
    GSM[ERIPHERAL.c (39):警告:#223-D:隐式声明函数"GPIOPinConfigure"
    GPIOPinConfigure (GPIO_PD6_U2RX);//PCTL
    GSM[ERIPHERAL.c (39):错误:#20:标识符"GPIO_PD6_U2RX"未定义
    GPIOPinConfigure (GPIO_PD6_U2RX);//PCTL
    GSM[ERIPHERAL.c (40):错误:#20:标识符"GPIO_PD7_U2TX"未定义
    GPIOPinConfigure (GPIO_PD7_U2TX);
    GSM[ERIPHERAL.c (41):警告:#223-D:隐式声明函数"GPIOPinTypeUART"
    GPIOPinTypeUART (GPIO_PORTD_base、GPIO_PIN_6 | GPIO_PIN_7);//DIR、PAD、
    GSM[ERIPHERAL.c (41):错误:#20:标识符"GPIO_PORTD_BASE"未定义
    GPIOPinTypeUART (GPIO_PORTD_base、GPIO_PIN_6 | GPIO_PIN_7);//DIR、PAD、
    GSM[ERIPHERAL.c (41):错误:#20:标识符"GPIO_PIN_6"未定义
    GPIOPinTypeUART (GPIO_PORTD_base、GPIO_PIN_6 | GPIO_PIN_7);//DIR、PAD、
    GSM[ERIPHERAL.c (41):错误:#20:标识符"GPIO_PIN_7"未定义
    GPIOPinTypeUART (GPIO_PORTD_base、GPIO_PIN_6 | GPIO_PIN_7);//DIR、PAD、
    GSM[ERIPHERAL.c (43):警告:#223-D:隐式声明函数"UARTClockSourceSet"
    UARTClockSourceSet (UART2_base、UART_CLOCK_SYSTEM);//设置 UART2的时钟源
    GSM[ERIPHERAL.c (43):错误:#20:标识符"UART_CLOCK_SYSTEM"未定义
    UARTClockSourceSet (UART2_base、UART_CLOCK_SYSTEM);//设置 UART2的时钟源
    GSM[ERIPHERAL.c (44):警告:#223-D:隐式声明函数"UARTParityModeSet"
    UARTParityModeSet (UART2_base、UART_CONFIG_PAR_NONE);
    GSM[ERIPHERAL.c (44):错误:#20:标识符"UART_CONFIG_PAR_NONE "未定义
    UARTParityModeSet (UART2_base、UART_CONFIG_PAR_NONE);
    GSM[ERIPHERAL.c (45):警告:#223-D:隐式声明函数"UARTFIFOEnable"
    UARTFIFOEnable (UART2_base);//启用 UART FIFO
    GSM[ERIPHERAL.c (46):警告:#223-D:隐式声明函数"UARTStdioConfig"
    UARTStdioConfig (GSM_UART_PORT、GSM_BAUD_RATE、SysCtlClockGet ());
    GSM[ERIPHERAL.c (46):警告:#223-D:隐式声明的函数"SysCtlClockGet "
    UARTStdioConfig (GSM_UART_PORT、GSM_BAUD_RATE、SysCtlClockGet ());
    GSM[ERIPHERAL.c (47):警告:#223-D:隐式声明函数"UARTEchoSet"
    UARTEchoSet (false);
    GSM[ERIPHERAL.c (47):错误:#20:标识符"false"未定义
    UARTEchoSet (false);
    GSM[ERIPHERAL.c (48):警告:#223-D:隐式声明函数"UARTIntRegister"
    UARTIntRegister (UART2_base、UARTStdioIntHandler);
    GSM[ERIPHERAL.c (48):错误:#20:标识符"UARTStdioIntHandler"未定义
    UARTIntRegister (UART2_base、UARTStdioIntHandler);
    GSM[ERIPHERAL.c (49):警告:#223-D:隐式声明函数"UARTConfigGetExpClk"
    UARTConfigGetExpClk (UART2_base、SysCtlClockGet ()、&GSM_Baud_RATE_READ、&UART_CONFIG_READ);//获取波特率
    GSM[ERIPHERAL.c (49):错误:#20:标识符"GSM_Baud_RATE_READ"未定义
    UARTConfigGetExpClk (UART2_base、SysCtlClockGet ()、&GSM_Baud_RATE_READ、&UART_CONFIG_READ);//获取波特率
    GSM[ERIPHERAL.c (57):警告:#223-D:隐式声明函数"UARTprintf"
    UARTprintf ("AT+CMGf=%u\r\n"、1);//消息格式文本
    GSM[ERIPHERAL.c (58):警告:#223-D:隐式声明的函数"SysCtlDelay"
    SysCtlDelay (Millis2Ticks (100));//中断未被禁用并且在延迟期间 OS 不会被停止!
    GSM[ERIPHERAL.c (58):警告:#223-D:隐式声明的函数"Millis2Ticks"
    SysCtlDelay (Millis2Ticks (100));//中断未被禁用并且在延迟期间 OS 不会被停止!
    GSM[ERIPHERAL.c (59):警告:#223-D:隐式声明函数"GSMgetResponse"
    lineCount = GSMgetResponse();
    GSM[ERIPHERAL.c (53):警告:#550-D:变量"lineCount"已设置、但从未使用
    uint8_t lineCount = 0;
    GSM[ERIPHERAL.c (54):警告:#177-D:变量"i"已声明、但从未引用
    uint16_t i = 0;
    GSM[ERIPHERAL.c (55):警告:#177-D:变量"uart2_dump"已声明、但从未引用
    uint8_t uart2_dump[1024]="";
    GSM[ERIPHERAL.c (78):错误:#20:标识符"bool "未定义
    bool msgPresent = 0;//标志忽略已删除的消息
    GSM[ERIPHERAL.c (83):警告:#223-D:隐式声明函数"UARTprintf"
    UARTprintf ("AT+CMGR=%u\r\n"、msgNum);// msgNum 的读取请求
    GSM[ERIPHERAL.c (84):警告:#223-D:隐式声明的函数"SysCtlDelay"
    SysCtlDelay (Millis2Ticks (10));
    GSM[ERIPHERAL.c (84):警告:#223-D:隐式声明的函数"Millis2Ticks"
    SysCtlDelay (Millis2Ticks (10));
    GSM[ERIPHERAL.c (87):警告:#223-D:隐式声明函数"GSMgetResponse"
    lineCount = GSMgetResponse();
    GSM[ERIPHERAL.c (90):警告:#223-D:隐式声明函数"GSMparseMessage"
    msgPresent = GSMparseMessage (lineCount);
    GSM[ERIPHERAL.c (93):警告:#223-D:隐式声明函数"PC_Display_Message"
    PC_Display_Message ("\n\n\r\n>>>消息:"、msgNum、");
    GSM[ERIPHERAL.c (108):错误:#159:声明与之前的"GSMgetResponse"(在第59行声明)不兼容
    uint8_t GSMgetResponse (void){
    GSM[ERIPHERAL.c (109):错误:#20:标识符"bool "未定义
    bool readResponse = true; //在收到消息时保持循环打开
    GSM[ERIPHERAL.c (109):错误:#20:标识符"true"未定义
    bool readResponse = true; //在收到消息时保持循环打开
    GSM[ERIPHERAL.c (114):警告:#223-D:隐式声明函数"PC_Display_Message"
    PC_Display_Message (">已开始消息读取"、0、");
    GSM[ERIPHERAL.c (118):警告:#223-D:隐式声明函数"UARTRxBytesAvail"
    if (UARTRxBytesAvail ()> 2) UARTgets (g_cInput、sizeof (g_cInput));
    GSM[ERIPHERAL.c (118):警告:#223-D:隐式声明函数"UARTges"
    if (UARTRxBytesAvail ()> 2) UARTgets (g_cInput、sizeof (g_cInput));
    GSM[ERIPHERAL.c (120):警告:#223-D:隐式声明函数"strcpy"
    strcpy (ResponseLin[readline]、g_cInput/*GSMResponse*/);
    GSM[ERIPHERAL.c (124):警告:#223-D:隐式声明函数"strncmp"
    if ((strncmp (responseLine]、"OK"、2)=0)||
    GSM[ERIPHERAL.c (126):错误:#20:标识符"false"未定义
    readResponse = false;
    GSM[ERIPHERAL.c (140):错误:#20:标识符"bool "未定义
    bool GSMparseMessage (uint8_t lineCount){
    GSM[ERIPHERAL.c (148):警告:#223-D:隐式声明函数"PC_Display_Message"
    PC_Display_Message ("已处理行:"、activeLine、responseLine[activeLine]);
    GSM[ERIPHERAL.c (151):警告:#223-D:隐式声明的函数"strstrstrstr"
    if ( strstrstrstr (responseLine[activeLine],"+CMGR:")!='\0')//收到的消息
    GSM[ERIPHERAL.c (157):警告:#223-D:隐式声明函数"strtok"
    msgSender = strtok (msgEnvelope、"、");//转至第一个逗号、跳过状态
    GSM[ERIPHERAL.c (157):错误:#513:无法将类型"int"的值分配给类型"char *"的实体
    msgSender = strtok (msgEnvelope、"、");//转至第一个逗号、跳过状态
    GSM[ERIPHERAL.c (158):错误:#513:无法将类型"int"的值分配给类型"char *"的实体
    msgSender = strtok (NULL、"、");//获取数字
    GSM[ERIPHERAL.c (162):错误:#513:无法将类型"int"的值分配给类型"char *"的实体
    msgDate = strtok (NULL、"、");//转至下一个逗号、跳过电话簿条目
    GSM[ERIPHERAL.c (163):错误:#513:无法将类型"int"的值分配给类型"char *"的实体
    msgDate = strtok (NULL、"、");//获取日期
    GSM[ERIPHERAL.c (167):错误:#513:无法将类型"int"的值分配给类型"char *"的实体
    msgTime = strtok (NULL、"、");//获取时间
    GSM[ERIPHERAL.c:37个警告、30个错误
    正在编译 UART.C...
    C:\ti\TivaWare_C_Series-2.1.4.178\driverlib\UART.c (49):错误:#5:无法打开源输入文件"inc/hw_ints.h":没有此类文件或目录
    #include "inc/hw_ints.h"
    C:\ti\TivaWare_C_Series-2.1.4.178\driverlib\UART.c:0警告、1错误
    ".\gsm _peripheral.AFX"- 31错误、37警告。
    未创建目标





    代码如下:

    #include
    #include
    void UART2_Init (void);
    void PowerOnGSM (void);
    void GSMprocessMessage (uint8_t msgNum);

    //此处存储的来自最近传入消息的数据
    char responseLine[10][160];//使用来存储 UART 输入
    静态 char * msgContent = NULL;//消息内容占位符
    静态 char * msgSender = NULL;//消息发送器
    静态 char * msgDate = 空;//消息日期
    静态 char * msgTime = 空;//消息时间

    #define BAUD_RATE (115200)
    #define GSM_BAUD_RATE (115200)
    #define GSM_UART_PORT (2)
    #define UART2_INT_PRIO (2)


    int main (void){




    void UART2_Init (void){
    uint32_t UART_CONFIG_READ = 0;
    SysCtlPeripheralEnable (SYSCTL_Periph_UART2);//启用 UART2上的时钟
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);//启用端口 D 上的时钟// PD6和 PD7将是 RX 和 TX 到 GSM 模块
    while (!SysCtlPeripheralReady (SYSCTL_Periph_UART2));//等待 UART2初始化
    while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOD));//等待 PortD 初始化

    GPIO_PORTD_LOCK_R = 0x4C4F434B;//解锁 GPIO PD7
    GPIO_PORTD_CR_R |= 0xC0;//允许更改为 PD6、7

    IntDisable (INT_UART2);
    UARTIntDisable (UART2_base、UART_INT_RX|UART_INT_TX|UART_INT_RT);//禁用 UART2中断
    UARTDisable (UART2_base);//配置时禁用 UART2

    GPIOPinConfigure (GPIO_PD6_U2RX);//PCTL
    GPIOPinConfigure (GPIO_PD7_U2TX);
    GPIOPinTypeUART (GPIO_PORTD_base、GPIO_PIN_6 | GPIO_PIN_7);//DIR、PAD、

    UARTClockSourceSet (UART2_base、UART_CLOCK_SYSTEM);//设置 UART2的时钟源
    UARTParityModeSet (UART2_base、UART_CONFIG_PAR_NONE);
    UARTFIFOEnable (UART2_base);//启用 UART FIFO
    UARTStdioConfig (GSM_UART_PORT、GSM_BAUD_RATE、SysCtlClockGet ());
    UARTEchoSet (false);
    UARTIntRegister (UART2_base、UARTStdioIntHandler);
    UARTConfigGetExpClk (UART2_base、SysCtlClockGet ()、&GSM_Baud_RATE_READ、&UART_CONFIG_READ);//获取波特率


    void PowerOnGSM (void){
    uint8_t lineCount = 0;
    uint16_t i = 0;
    uint8_t uart2_dump[1024]="";

    UARTprintf ("AT+CMGf=%u\r\n"、1);//消息格式文本
    SysCtlDelay (Millis2Ticks (100));//中断未被禁用并且在延迟期间 OS 不会被停止!
    lineCount = GSMgetResponse();

    UARTprintf ("AT+CSDH=%u\r\n"、0);//不显示完整的消息标头
    SysCtlDelay (Millis2Ticks (100));
    lineCount = GSMgetResponse();

    UARTprintf ("AT+CNMI=%u%u%u%u%u%u\r\n"、0、0、0、0、1);//设置新的消息指示模式
    //消息存储在 GSM 模块上,不提供指示
    //AT+CMGR=msgNum 将在用户触发 GSMprocessMessage (msgNum)时读取消息
    SysCtlDelay (Millis2Ticks (100));
    lineCount = GSMgetResponse();


    //
    //
    //处理信封和内容的 SMS
    //
    //
    void GSMprocessMessage (uint8_t msgNum){
    bool msgPresent = 0;//标志忽略已删除的消息
    int lineCount=0;//保留行数


    //请求消息并获取响应的行(包括包络、零、SIM 响应)
    UARTprintf ("AT+CMGR=%u\r\n"、msgNum);// msgNum 的读取请求
    SysCtlDelay (Millis2Ticks (10));

    //开始消息检索
    lineCount = GSMgetResponse();

    //确保有消息内容、信封处理和内容
    msgPresent = GSMparseMessage (lineCount);

    //向用户显示我们找到的内容
    PC_Display_Message ("\n\n\r\n>>>消息:"、msgNum、");
    if (msgPresent){
    PC_Display_Message (">来自:"、0、msgSender);//TODO:尝试发送 BS 以删除0
    PC_Display_Message (">位于:"、0、msgDate);
    PC_Display_Message (">开:"、0、msgTime);
    PC_Display_Message (">文本:"、0、msgContent);

    否则 PC_Display_Message (">不存在!"、0、");


    //
    //
    //将 GSM 响应存储到阵列响应线[]
    //
    //
    uint8_t GSMgetResponse (void){
    bool readResponse = true; //在收到消息时保持循环打开
    int readline = 0; //对消息的行进行计数
    CHAR *GSMResponse =空; //用于抓取输入
    char g_cInput[128]; // UART 的字符串输入

    PC_Display_Message (">已开始消息读取"、0、");
    while (readResponse&&(readline<10)){//tDO、请勿进行硬编码、使用宏
    //抓取一条线
    //UART2_GetString (g_cInput、sizeof (g_cInput));//grabs 字符串直到字符!= cr 或 lf
    if (UARTRxBytesAvail ()> 2) UARTgets (g_cInput、sizeof (g_cInput));
    //换行后停止
    strcpy (ResponseLin[readline]、g_cInput/*GSMResponse*/);
    //PC_Display_Message (">>>行 nr:"、readline、g_cInput);
    //PC_Display_Message (">>>行 nr:"、readline、responseLine[readline]);
    //如果此行显示“确定”,则会显示整个消息
    if ((strncmp (responseLine]、"OK"、2)=0)||
    (strncmp (responseLine]、"error"、5)=0)){
    readResponse = false;

    其他 readline++;

    返回(readline+1);


    //
    //
    //解析用于包络和消息内容的 GSM 消息
    //将消息包络和常量存储到全局变量,或返回 true
    //对于消息存在,对于无消息,为 false
    //
    //
    bool GSMparseMessage (uint8_t lineCount){
    uint8_t activeLine = 0;//正在处理的行的计数器
    char * msgEnvelope = NULL;//消息包络保持器

    msgContent = NULL;//清除旧消息
    //解析新消息
    while (activeLine < lineCount)//lineCount 比响应行[index]大1

    PC_Display_Message ("已处理行:"、activeLine、responseLine[activeLine]);
    //信封的大小写(如下所示)
    //+CMGR:“REC 读取”,“+40712334501”,“17/04/12,22:53:48+12”
    if ( strstrstrstr (responseLine[activeLine],"+CMGR:")!='\0')//收到的消息

    //开始解析
    msgEnvelope =响应线路[activeLine];
    PC_Display_Message (">信封为:"、0、msgEnvelope);

    msgSender = strtok (msgEnvelope、"、");//转至第一个逗号、跳过状态
    msgSender = strtok (NULL、"、");//获取数字
    msgSender += 3;//从电话号码和录音标记中跳过前缀
    msgSender [10]='\0';//存储号码(使用空终结器)

    msgDate = strtok (NULL、"、");//转至下一个逗号、跳过电话簿条目
    msgDate = strtok (NULL、"、");//获取日期
    msgDate += 1;//删除口述标记
    msgDate[8]='\0';//存储日期(终止器为空)

    msgTime = strtok (NULL、"、");//获取时间
    msgTime[8]='\0';//存储时间(无终结器)


    //消息内容的大小写
    //如果我们已经找到了信封,而且行不是空白的...
    否则,如果((msgEnvelope!= NULL)&&(responseLine[activeLine]!= NULL))

    //... 我们没有找到任何内容、这是第一行。
    if (msgContent =NULL){msgContent =responseLine[activeLine];}

    //... 否则、添加空格并附加此行。
    否则,如果(activeLine+2 <= lineCount){//+2是由于在 OK 之前的 EMPLY 行和最后一行带有 OK。
    strcat (msgContent、"");
    strcat (msgContent、responseLine[activeLine]);


    activeLine++;//继续下一行

    如果(msgEnvelope =NULL){//如果我们没有找到包络,则没有消息
    返回 false;

    否则{//否则返回 true。
    返回 true;

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

    您好!

     一些意见。

    [引用用户="asim MEHA"]

    但现在、我遇到了 UART1问题、不知道代码中的问题是什么。 我认为我对寄存器做了错误的操作  

    GPIOD->PCTL =(GPIOB->PCTL&0xFFFFFF00)+0x00000040;//GPIO PORTB 0-1

    [/报价]

    1.你为什么要给 GPIOD 分配值 

    2.为什么要写入0x00000040? 请参阅数据表中的以下引脚多路复用器。 您正在选择4作为 GPIOB[1]的备用函数、但对于4、没有任何作用。 您需要使用1。 GPIOB[0]也是如此。  

     

     

     3.在 launchpad 上,UART0用作 PC 的 COM 端口。 不能将 UART1用作 COM 端口。

     4.如果要使用 PortF[0],则需要特别考虑 PortF[0]。 请参阅下面的内容。

     

      

     5.最后,您使用的是 DRM,而不是提供的 TivaWare 库。 请使用 TivaWare 库大幅加快您的软件开发速度。  

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否从 TivaWare 构建一个执行此示例?
    C:\ti\TivaWare_C_Series-2.1.4.178\examples\boards\ek-tm4c123gxl\hello

    本示例使用 UART0。 如果您使该示例正常工作、则可以修改函数调用以使用 UART1 (确保还配置了正确的端口引脚)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此类(指令)是否更适合从"教师"(谁指导使用(总是混淆) DRM?
    这是我们从未提出过的-并且(超出)理解...   (LPAD 向学校销售的损失大约100起似乎无关紧要...)

    难道这种"教师"不是(非常清楚)把这个论坛当作"倾销地"----是不是(单独)在教授什么?   这可以是好吗?