修复错误 Tiva TM4C1233GH6PM 与带有 UART0 和 UART2 的 ESP01 WiFi 模块接口

fix error tiva tm4c1233gh6pm interfacing with esp01 wifi module with uart0 and uart2

提问人:dg1 提问时间:11/17/2023 最后编辑:dg1 更新时间:11/18/2023 访问量:30

问:

帮帮我,UART0 定义为简单的 UART 函数,UART0 用 USB 线连接到 Putty,UART TX 与 WiFi 模块的 RX 连接,TX 与 WiFi 模块的 RX 连接 IAM尝试使用UART2向ESP01发送AT命令,用UART2接收,用UARTTX(UARTTX)将其传输到PuTTY(UARTTX)

`

`#include <TM4C123.h>
void SystemInit(void){
};
/******************************************************************************
* Macros for System Control Block Register Addresses
*******************************************************************************/
#define SYSCTL_RCGC_UART_R      (*((volatile unsigned long*)0x400FE618))
#define SYSCTL_RCGC_GPIO_R      (*((volatile unsigned long*)0x400FE608)) 

#define GPIO_PORTA_AFSEL_R      (*((volatile unsigned long*)0x40004420))
#define GPIO_PORTA_PCTL_R       (*((volatile unsigned long*)0x4000452C))
#define GPIO_PORTA_DEN_R        (*((volatile unsigned long*)0x4000451C))
#define GPIO_PORTA_DIR_R        (*((volatile unsigned long*)0x40004400))

#define GPIO_PORTD_DATA_R           (*((volatile unsigned long*)0x400073FC))
#define GPIO_PORTD_DIR_R            (*((volatile unsigned long*)0x40007400))
#define GPIO_PORTD_IS_R             (*((volatile unsigned long*)0x40007404))
#define GPIO_PORTD_IBE_R            (*((volatile unsigned long*)0x40007408))
#define GPIO_PORTD_IEV_R            (*((volatile unsigned long*)0x4000740C))
#define GPIO_PORTD_IM_R             (*((volatile unsigned long*)0x40007410))
#define GPIO_PORTD_RIS_R            (*((volatile unsigned long*)0x40007414))
#define GPIO_PORTD_MIS_R            (*((volatile unsigned long*)0x40007418))
#define GPIO_PORTD_ICR_R            (*((volatile unsigned long*)0x4000741C))
#define GPIO_PORTD_AFSEL_R          (*((volatile unsigned long*)0x40007420))
#define GPIO_PORTD_PUR_R            (*((volatile unsigned long*)0x40007510))
#define GPIO_PORTD_PDR_R            (*((volatile unsigned long*)0x40007514))
#define GPIO_PORTD_DEN_R            (*((volatile unsigned long*)0x4000751C))
#define GPIO_PORTD_LOCK_R           (*((volatile unsigned long*)0x40007520))
#define GPIO_PORTD_CR_R             (*((volatile unsigned long*)0x40007524))
#define GPIO_PORTD_PCTL_R           (*((volatile unsigned long*)0x4000752C))

#define UART0_CTL_R             (*((volatile unsigned long*)0x4000C030))
#define UART0_IBRD_R            (*((volatile unsigned long*)0x4000C024))
#define UART0_FBRD_R            (*((volatile unsigned long*)0x4000C028))
#define UART0_LCRH_R            (*((volatile unsigned long*)0x4000C02C))
#define UART0_CC_R              (*((volatile unsigned long*)0x4000CFC8))
#define UART0_FR_R              (*((volatile unsigned long*)0x4000C018))
#define UART0_DR_R              (*((volatile unsigned long*)0x4000C000))

#define UART2_DR_R                  (*((volatile unsigned long*)0x4000E000))
#define UART2_FR_R                  (*((volatile unsigned long*)0x4000E018))
#define UART2_IBRD_R                (*((volatile unsigned long*)0x4000E024))
#define UART2_FBRD_R                (*((volatile unsigned long*)0x4000E028))
#define UART2_LCRH_R                (*((volatile unsigned long*)0x4000E02C))
#define UART2_CTL_R                 (*((volatile unsigned long*)0x4000E030))
#define UART2_CC_R                  (*((volatile unsigned long*)0x4000EFC8))
#define UART2_IFLS_R                (*((volatile unsigned long*)0x4000E034))
#define UART2_IM_R                  (*((volatile unsigned long*)0x4000E038))
#define UART2_MIS_R                 (*((volatile unsigned long*)0x4000E03C))
#define UART2_RIS_R                 (*((volatile unsigned long*)0x4000E040))
#define UART2_ICR_R                 (*((volatile unsigned long*)0x4000E044))

#define GPIO_PORTB_DATA_R           (*((volatile unsigned long*)0x400053FC))
#define GPIO_PORTB_DIR_R            (*((volatile unsigned long*)0x40005400))
#define GPIO_PORTB_IS_R             (*((volatile unsigned long*)0x40005404))
#define GPIO_PORTB_IBE_R            (*((volatile unsigned long*)0x40005408))
#define GPIO_PORTB_IEV_R            (*((volatile unsigned long*)0x4000540C))
#define GPIO_PORTB_IM_R             (*((volatile unsigned long*)0x40005410))
#define GPIO_PORTB_RIS_R            (*((volatile unsigned long*)0x40005414))
#define GPIO_PORTB_MIS_R            (*((volatile unsigned long*)0x40005418))
#define GPIO_PORTB_ICR_R            (*((volatile unsigned long*)0x4000541C))
#define GPIO_PORTB_AFSEL_R          (*((volatile unsigned long*)0x40005420))
#define GPIO_PORTB_PUR_R            (*((volatile unsigned long*)0x40005510))
#define GPIO_PORTB_PDR_R            (*((volatile unsigned long*)0x40005514))
#define GPIO_PORTB_DEN_R            (*((volatile unsigned long*)0x4000551C))
#define GPIO_PORTB_LOCK_R           (*((volatile unsigned long*)0x40005520))
#define GPIO_PORTB_CR_R             (*((volatile unsigned long*)0x40005524))
#define GPIO_PORTB_PCTL_R           (*((volatile unsigned long*)0x4000552C))

#define UART_FR_TX_FF           0x20                        
#define UART_FR_RX_FE           0x10  

unsigned char UARTRx(void);
unsigned char UART2Rx(void);
void UARTTx(unsigned char data);
void UART2Tx(unsigned char data);
void UARTTxString(char* pt);
void UART2TxString(char* pt);
void UARTRxString(char* bufPt, unsigned short max);
void UART2RxString(void);
void ESP01Init(void);
void Delay(unsigned long counter);
// Wait for input and returns its ASCII value
unsigned char UARTRx(void)
{
    while ((UART0_FR_R & UART_FR_RX_FE) != 0);
    return ((unsigned char)(UART0_DR_R & 0x0FF));
}

unsigned char UART2Rx(void)
{
    while ((UART2_FR_R & UART_FR_RX_FE) != 0);
    return ((unsigned char)(UART2_DR_R & 0x0FF));
}


void UART2RxString()
{
    char receivedChar[1000];
    int count = 0;

    while (count < 999)
    {
        char currentChar = UART2Rx();

        // Check for carriage return or line feed as termination characters
        if (currentChar == '\r' || currentChar == '\n')
        {
            // Terminate the string and break out of the loop
            receivedChar[count] = '\0';
            break;
        }

        receivedChar[count] = currentChar;
        count++;
    }

    // Transmit the received string
    UARTTxString(receivedChar);
}







    void Delay(unsigned long counter)
{
  unsigned long i = 0;
  for (i =0; i < counter ; i ++);
}
    // Output 8bit to serial port
void UARTTx(unsigned char data)
{
    while ((UART0_FR_R & UART_FR_TX_FF) != 0);
    UART0_DR_R = data;
}

void UART2Tx(unsigned char data)
{
    while ((UART2_FR_R & UART_FR_TX_FF) != 0);
    UART2_DR_R = data;
}


void UARTTxString(char* pt)
{
    while (*pt)
    {
        UARTTx(*pt); 
        pt++;
    }
}
void UART2TxString(char* pt)
{
    while (*pt)
    {
        UART2Tx(*pt); 
        pt++;
    }
}


void ESP01Init(void)
{
  
    SYSCTL_RCGC_UART_R |= 0x5;
      SYSCTL_RCGC_GPIO_R |= 0xB;
    
    GPIO_PORTA_AFSEL_R |= 0x3;
    GPIO_PORTA_PCTL_R |= 0x11;
    GPIO_PORTA_DEN_R |= 0x3;
    
      GPIO_PORTB_DEN_R |= 0x10;
    GPIO_PORTB_DIR_R |= 0x10;
    GPIO_PORTB_DATA_R   |=0x10;
    
      GPIO_PORTD_LOCK_R = 0x4C4F434B ;
    GPIO_PORTD_CR_R |= 0x00000080 ;
    GPIO_PORTD_DEN_R |= 0x0C0 ; 
       
      GPIO_PORTD_AFSEL_R |= 0x000000C0 ;
    GPIO_PORTD_PCTL_R |= 0x11000000 ;

      UART0_CTL_R |= 0x0;
      UART2_CTL_R |= 0x0;
         
      UART0_CC_R |= 0x05;
      UART2_CC_R |= 0x05;
         
  UART0_IBRD_R  = 8;
    UART0_FBRD_R  = 44;
    UART2_IBRD_R  = 8;
    UART2_FBRD_R  = 44;
        
    UART0_LCRH_R  |= 0x70;
    UART0_LCRH_R  &= ~(0x8);
    UART2_LCRH_R  |= 0x70;
    UART2_LCRH_R  &= ~(0x8);

    UART0_CTL_R |= 0x301;
    UART2_CTL_R |= 0x301;
    
    Delay(100000);
}

int main(void)
{   
    ESP01Init();
     UART2TxString("AT\r\n");
   UART2RxString();
}
   
`

我尝试了很多次更改代码,但字符没有被接收并传输到 uart0

C 微控制器

评论

0赞 dg1 11/17/2023
“代码包含在不是实际代码格式错误中
1赞 pmacfarlane 11/17/2023
如果您想添加更多信息或更正错误,可以随时编辑您的问题。
0赞 pmacfarlane 11/17/2023
目前尚不清楚哪个部分不起作用。你能解释一下吗?在收到 1000 个字符之前,函数不会传输任何内容。这是故意的吗?UART2RxString()
0赞 dg1 11/18/2023
是的,好吧,这并不重要,它只是一个上限,当收到\n或\r时,它会打破循环
0赞 dg1 11/18/2023
我问我的一个同行,他说将 AT 命令作为 AT\r\n 发送,然后它会发送命令并告诉传输已结束

答: 暂无答案