提问人:dg1 提问时间:11/17/2023 最后编辑:dg1 更新时间:11/18/2023 访问量:30
修复错误 Tiva TM4C1233GH6PM 与带有 UART0 和 UART2 的 ESP01 WiFi 模块接口
fix error tiva tm4c1233gh6pm interfacing with esp01 wifi module with uart0 and uart2
问:
帮帮我,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
答: 暂无答案
评论
UART2RxString()