首页 新闻 会员 周边

tm4c123GH6PM 的串口调试问题

0
悬赏园豆:5 [待解决问题]

前几天刚刚自学了TM4C123gh6pm和TivaWare C的基础知识,想用Launchpad使单片机和台式机实现串口通信,下面附上我改的的调试代码图片。在CCS上编译可通过,但是当打开串口调试小助手进行数据发送与接收的时候始终没有数据回显。。。希望能人之士可以帮忙解决我的这个问题。。。

TI
Judiths的主页 Judiths | 菜鸟二级 | 园豆:203
提问于:2014-07-24 14:24
< >
分享
所有回答(1)
0

我在网上搜索了很多资料,但是都没有完整的可成功运行的例子。于是我有回去翻了翻TM4C123gh6pm的datasheet,在熟悉了硬件的相关管道和管脚说明之后,编写了下面的串口调试程序

  1 #include <stdint.h>
  2 #include <stdbool.h>
  3 #include <string.h>
  4 #include "driverlib/uart.h"
  5 #include "driverlib/gpio.h"
  6 #include "inc/hw_ints.h"
  7 #include "inc/hw_memmap.h"
  8 #include "inc/hw_types.h"
  9 #include "inc/hw_gpio.h"
 10 #include "driverlib/interrupt.h"
 11 #include "LCDDriver.h"
 12 
 13 
 14 char Character[6] = {0};//定义 Character 为全局变量
 15 void UART0_Int_Handler(void)
 16 
 17 {
 18     //中断标志的读取、处理和清除
 19     unsigned long ulStatus;
 20     IntMasterDisable();//使能全局中断
 21     ulStatus = UARTIntStatus(UART0_BASE, true);
 22     UARTIntClear(UART0_BASE, ulStatus);
 23 
 24     //根据中断标志处理相关事件
 25     if(ulStatus & UART_INT_RX)
 26     {
 27         int k,i;
 28         for(k = 0; k < 6; k++)
 29         {
 30             Character[k] = UARTCharGet(UART0_BASE);
 31         }
 32         LCD_Draw_String(Character, ENUM_LINE_EIGHT, 3, LCD_DRAW_NORMAL);
 33         for(i = 12;i < 18;i++)
 34         {
 35             LCD_Draw_Char_8x8('#', ENUM_LINE_EIGHT, i, LCD_DRAW_NORMAL);
 36         }
 37     }
 38     IntMasterEnable();//使能全局中断
 39 }
 40 
 41 void Int_GPIO_C_Handler(void)
 42 {
 43     IntMasterDisable();//使能全局中断
 44     // 读取中断状态
 45     unsigned long ulStatus;
 46     ulStatus = GPIOIntStatus(GPIO_PORTC_BASE, true);
 47     // 清除中断状态
 48     GPIOIntClear(GPIO_PORTC_BASE, ulStatus);
 49     // 如果KEY的中断状态有效
 50     if (ulStatus & GPIO_PIN_7)                                                    //PC7  s1
 51     {
 52         // 延时约10ms,消除按键抖动
 53         SysCtlDelay(20 * (SysCtlClockGet() / 3000));
 54         // 等待KEY抬起
 55         while (GPIOPinRead(GPIO_PORTC_BASE, GPIO_PIN_7) == 0x00);
 56         // 延时约10ms,消除松键抖动
 57         SysCtlDelay(20 * (SysCtlClockGet()  / 3000));
 58 
 59         int j;
 60         for(j=3;j<21;j++)
 61         {
 62             LCD_Draw_Char_8x8('-', ENUM_LINE_EIGHT, j, LCD_DRAW_NORMAL);
 63         }
 64 
 65     }
 66     IntMasterEnable();//使能全局中断
 67 }
 68 
 69 
 70 //按键 PD6 中断处理
 71 void Int_GPIO_D_Handler(void)
 72 {
 73     IntMasterDisable();//使能全局中断
 74     unsigned char newchar = '$';
 75     unsigned long ulStatus;
 76     // 读取中断状态
 77     ulStatus = GPIOIntStatus(GPIO_PORTD_BASE, true);
 78     // 清除中断状态
 79     GPIOIntClear(GPIO_PORTD_BASE, ulStatus);
 80     // 如果KEY的中断状态有效
 81     if (ulStatus & GPIO_PIN_6)                                                //PD6  s2
 82     {
 83         // 延时约10ms,消除按键抖动
 84         SysCtlDelay(20 * (SysCtlClockGet() / 3000));
 85         // 等待KEY抬起
 86         while (GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_6) == 0x00);
 87         // 延时约10ms,消除松键抖动
 88         SysCtlDelay(20 * (SysCtlClockGet()  / 3000));
 89 
 90         //发送新字符
 91         UARTCharPut(UART0_BASE, newchar);
 92     }
 93     IntMasterEnable();//使能全局中断
 94 
 95     if(ulStatus & GPIO_PIN_7)                                                //PD7  s3
 96     {
 97         // 延时约10ms,消除按键抖动
 98         SysCtlDelay(20 * (SysCtlClockGet() / 3000));
 99         // 等待KEY抬起
100         while (GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_7) == 0x00);
101         // 延时约10ms,消除松键抖动
102         SysCtlDelay(20 * (SysCtlClockGet()  / 3000));
103         //显示一个字符*
104         UARTCharPut(UART0_BASE, '*');
105         //改变波特率
106         UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 115200,
107                 UART_CONFIG_WLEN_8 | UART_CONFIG_PAR_NONE | UART_CONFIG_STOP_ONE);
108 
109     }
110     IntMasterEnable();//使能全局中断
111 }
112 
113 //初始化LCD
114 void Init_LCD(void)
115 {
116     LCD_Enable();
117     LCD_Init();
118     LCD_ScreenClr();
119 }
120 
121 //初始化 UART 模块
122 void Init_UART(void)
123 {
124     //初始化和配置 UART 模块,PA0/PA1
125     SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
126     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
127     GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
128     UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 9600, UART_CONFIG_WLEN_8 | UART_CONFIG_PAR_NONE | UART_CONFIG_STOP_ONE);
129 
130     //UART 中断配置
131     UARTFIFOLevelSet(UART0_BASE, UART_FIFO_TX7_8, UART_FIFO_RX1_8);
132     UARTIntRegister(UART0_BASE, UART0_Int_Handler);
133 
134     UARTIntEnable(UART0_BASE, UART_INT_RX);
135     //使UART传输数据使能
136     UARTIntEnable(UART0_BASE, UART_INT_TX);
137 }
138 
139 //初始化按键 PC7和PD6
140 void Init_Key(void) //同时初始化PC7和PD7|PD7
141 {
142     //PC|PD按键解锁等等
143     HWREG(GPIO_PORTC_BASE | GPIO_PORTD_BASE + GPIO_O_LOCK)  |= GPIO_LOCK_KEY;
144     HWREG(GPIO_PORTC_BASE | GPIO_PORTD_BASE + GPIO_O_CR)   |= (1<<7);
145     HWREG(GPIO_PORTC_BASE | GPIO_PORTD_BASE + GPIO_O_DEN)  &=(~(1<<7));
146     HWREG(GPIO_PORTC_BASE | GPIO_PORTD_BASE + GPIO_O_PDR)  &= (~(1<<7));
147     HWREG(GPIO_PORTC_BASE | GPIO_PORTD_BASE + GPIO_O_PUR)  &= (~(1<<7));
148     HWREG(GPIO_PORTC_BASE | GPIO_PORTD_BASE + GPIO_O_AFSEL) &=(~(1<<7));
149 
150 
151 
152     //PC7 和PD6|PD7按键配置
153     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC | SYSCTL_PERIPH_GPIOD);
154 
155     GPIODirModeSet(GPIO_PORTC_BASE , GPIO_PIN_7, GPIO_DIR_MODE_IN);
156     GPIOPadConfigSet(GPIO_PORTC_BASE , GPIO_PIN_7, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
157 
158     GPIODirModeSet( GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_7, GPIO_DIR_MODE_IN);
159     GPIOPadConfigSet( GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_7, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
160 
161     //PC7和PD6|PD7中断配置
162     GPIOIntTypeSet(GPIO_PORTC_BASE , GPIO_PIN_7, GPIO_LOW_LEVEL);
163     GPIOIntTypeSet( GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_7, GPIO_LOW_LEVEL);
164     GPIOIntRegister(GPIO_PORTC_BASE, Int_GPIO_C_Handler);
165     GPIOIntRegister(GPIO_PORTD_BASE, Int_GPIO_D_Handler);
166 
167     GPIOIntEnable(GPIO_PORTC_BASE , GPIO_PIN_7);
168     GPIOIntClear( GPIO_PORTC_BASE, GPIO_PIN_7);
169 
170     GPIOIntEnable( GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_7);
171     GPIOIntClear( GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_7);
172 
173     IntEnable(INT_UART0_TM4C123);
174     IntMasterEnable();//使能全局中断
175 }
176 
177 int main(void)
178 {
179 
180     SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
181 
182     Init_LCD();//初始化 LCD
183     Init_UART();//初始化 UART
184     Init_Key();//初始化按键 PC7和PD6|PD7
185 
186     //屏幕上固定显示通信参数
187     LCD_Draw_String("UART0_Test...     ", ENUM_LINE_ONE, 0, LCD_DRAW_NORMAL);
188     LCD_Draw_String("BaudRate:     9600", ENUM_LINE_THREE, 0, LCD_DRAW_NORMAL);   //波特率
189     LCD_Draw_String("BaudRate*:  115200", ENUM_LINE_FOUR, 0, LCD_DRAW_NORMAL);   //波特率
190     LCD_Draw_String("WordLength:      8", ENUM_LINE_FIVE, 0, LCD_DRAW_NORMAL);
191     LCD_Draw_String("Parity:       None", ENUM_LINE_SIX, 0, LCD_DRAW_NORMAL);
192     LCD_Draw_String("Stop:            1", ENUM_LINE_SEVEN, 0, LCD_DRAW_NORMAL);
193     LCD_Draw_String("Re:               ", ENUM_LINE_EIGHT, 0, LCD_DRAW_NORMAL);
194 
195     while(1)
196     {
197         SysCtlDelay(SysCtlClockGet() / 12);
198     }
199 }

注意:在CCS上要添加相关的头文件合成工程文件和设置正确的路径才能达到编译正确。在进行串口调试的时候,需要用到串口调试小助手,具体操作可借鉴51芯片的串口调试过程。

Judiths | 园豆:203 (菜鸟二级) | 2014-07-25 18:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册