主题中讨论的其他器件: TM4C123、 EK-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 =数据;
}