LM3S811使用心得—从零开始学Cortex-M3内核单片机(四)续

[复制链接]
4271|17
 楼主| reayfei 发表于 2011-12-11 20:54 | 显示全部楼层 |阅读模式
本帖最后由 reayfei 于 2011-12-11 21:10 编辑

LM3S811使用心得—从零开始学Cortex-M3内核单片机(四)续

实验5 UART0控制台

    uartGets( )函数,该函数相当实用,能够从UART读入一个限制长度为size(包括末尾'\0')的字符串,按回车<Enter>结束。在读入的同时进行回显,如果输入有误,按退格键<Backspace>还可以进行修改。

    源程序是一个UART0控制台例程,展示了uartGets( )函数的妙用。程序运行后,输入命令on会点亮LED5(蓝色),输入命令off会熄灭LED5(蓝色)




    不过也遇到一个问题:出现“cmd>>”后,第一次输入one(on代表“on”的意思,e代表“回车键”的意思,因为串口调试助手无法输入回车键,所以使用“e”代替)出现“Error command”,再次出现“cmd>> ”后第二次再输入one时,则显示“OK”,注意出现的是“cmd>> (空格)”。问题是不知道程序里什么原因第二次输出cmd>>时后面多了一个空格符?请高手指点!

源程序:

#include<LM3Sxxx.H>
#include"uartGetPut.h"
#include<string.h>

//定义LED
#defineLED_PERIPH SYSCTL_PERIPH_GPIOB
#defineLED_PORT GPIO_PORTB_BASE
#defineLED_PIN  GPIO_PIN_0
#defineLED_PERIPBH SYSCTL_PERIPH_GPIOB   //LED外围 B端口作为通用输入
#defineLED_PERIPDH SYSCTL_PERIPH_GPIOD   //LED外围 D端口作为通用输入
#defineLED_PERIPEH SYSCTL_PERIPH_GPIOE   //LED外围 E端口作为通用输入

voidcloseLED (void);
//防止JTAG失效

voidjtagWait(void)
{

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);       // 使能KEY所在的GPIO端口

GPIOPinTypeGPIOInput(GPIO_PORTC_BASE,GPIO_PIN_4);  // 设置KEY所在管脚为输入

if(GPIOPinRead(GPIO_PORTC_BASE,GPIO_PIN_4) == 0x00)// 若复位时按下KEY,则进入
{
  while(1);                                   // 死循环,以等待JTAG连接
}

SysCtlPeripheralDisable(SYSCTL_PERIPH_GPIOC);      // 禁止KEY所在的GPIO端口

}
//系统时钟初始化
voidclockInit(void)
{
SysCtlLDOSet(SYSCTL_LDO_2_50V); // 设置LDO输出电压
SysCtlClockSet(SYSCTL_USE_OSC | // 系统时钟设置
SYSCTL_OSC_MAIN|                // 采用主振荡器
SYSCTL_XTAL_6MHZ|               // 外接6MHz晶振
SYSCTL_SYSDIV_1);               // 不分频
/*
SysCtlLDOSet(SYSCTL_LDO_2_75V); // 配置PLL前须将LDO设为2.75V
SysCtlClockSet(SYSCTL_USE_PLL|  // 系统时钟设置,采用PLL
SYSCTL_OSC_MAIN|                // 主振荡器
SYSCTL_XTAL_6MHZ|               // 外接6MHz晶振
SYSCTL_SYSDIV_10);              // 分频结果为20MHz
*/

}

//主函数(程序入口)
intmain(void)
{

char s[40];
int size;
jtagWait();    // 防止JTAG失效,重要!
clockInit();   // 时钟初始化:晶振,6MHz
closeLED();    // 关闭LED函数
uartInit();    // UART0初始化

SysCtlPeripheralEnable(LED_PERIPH);     // 使能LED所在的GPIO端口

GPIOPinTypeGPIOOutput(LED_PORT,LED_PIN);// 设置LED所在管脚为输出

uartPuts("Please input a command with<Enter>:\r\n"); // 请输入一个命令,按回车执行

uartPuts("\t on= LED turns on\r\n");    // 输入on,点亮LED
uartPuts("\t off = LED turnsoff\r\n");  // 输入off,熄灭LED

for (;;)
{

uartPuts("cmd>>");
size = uartGets(s, sizeof(s));// UART0接收命令字符串

if (size > 0)
{
if(!strcmp(s,"on"))                   // 如果输入on

{
GPIOPinWrite(LED_PORT, LED_PIN, 0xFF);// 点亮LED
uartPuts("OK\r\n");
}
else if(!strcmp(s,"off"))             // 如果输入off
{
GPIOPinWrite(LED_PORT, LED_PIN, 0x00);// 熄灭LED
uartPuts("OK\r\n");
}
else
uartPuts("Error command\r\n");        // 错误命令
}

}

}
/*********************************************************************************************************
**Function name:closeLED()
**Descriptions:关闭LED函数
**input parameters:NONE
**output parameters:NONE
**Returned value:NONE
*********************************************************************************************************/
voidcloseLED (void)
{
//使能LED所在引脚
SysCtlPeripheralEnable(LED_PERIPBH);
SysCtlPeripheralEnable(LED_PERIPDH);
SysCtlPeripheralEnable(LED_PERIPEH);

//GPIO输出型的
GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE,GPIO_PIN_1);
GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE,GPIO_PIN_0);
GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE,GPIO_PIN_1);
GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE,GPIO_PIN_0);
GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE,GPIO_PIN_1);
GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE,GPIO_PIN_0);

//初始化过程拉低全部LED控制脚
GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_0,~GPIO_PIN_0);//BLUE1管脚为低
GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_1,~GPIO_PIN_1);//GREEN1管脚为低
GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0,~GPIO_PIN_0);//RED1管脚为低
GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_1,~GPIO_PIN_1);//BLUE2管脚为低
GPIOPinWrite(GPIO_PORTE_BASE,GPIO_PIN_0,~GPIO_PIN_0);//GREEN2管脚为低
GPIOPinWrite(GPIO_PORTE_BASE,GPIO_PIN_1,~GPIO_PIN_1);//RED2管脚为低
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| reayfei 发表于 2011-12-11 21:12 | 显示全部楼层
贴出来的程序只是一部分,请注意!因为发帖字符不能超过20000字符,无法全部贴出。
tianm 发表于 2011-12-12 09:07 | 显示全部楼层
不错不错 加个裤先
 楼主| reayfei 发表于 2011-12-12 14:33 | 显示全部楼层
3# tianm 还有个遗留问题,求指点!红字部分!
 楼主| reayfei 发表于 2011-12-15 11:28 | 显示全部楼层
求解答
 楼主| reayfei 发表于 2011-12-16 19:51 | 显示全部楼层
有木有高手帮忙解答?:handshake
zjsyjbb 发表于 2011-12-17 11:46 | 显示全部楼层
厉害,学习了..
张鑫鑫鑫 发表于 2011-12-17 18:55 | 显示全部楼层
好东西,支持楼主分享
xhc12345 发表于 2011-12-17 19:09 | 显示全部楼层
好东西,支持楼主分享.
acer4736 发表于 2011-12-18 20:57 | 显示全部楼层
HAO,值得借鉴
jinpaidianzi 发表于 2011-12-18 21:25 | 显示全部楼层
感谢分享,楼主辛苦
创展和众 发表于 2011-12-18 21:29 | 显示全部楼层
谁能把1、2、3的链接发一下呢
 楼主| reayfei 发表于 2011-12-18 21:38 | 显示全部楼层
本帖最后由 reayfei 于 2011-12-18 21:43 编辑

12# 创展和众 请在TI MCU 论坛精华区寻找其他从零开始学Cortex-M3内核单片机
uestchm 发表于 2011-12-19 10:30 | 显示全部楼层
一直在关注 谢楼主分享
 楼主| reayfei 发表于 2011-12-19 20:47 | 显示全部楼层
14# uestchm 谢谢支持!
huigoushang 发表于 2011-12-19 22:31 | 显示全部楼层
这个帖子不错,支持楼主
G21372 发表于 2011-12-19 22:37 | 显示全部楼层
谢谢分享,学习一下
 楼主| reayfei 发表于 2011-12-20 18:33 | 显示全部楼层
17# G21372 谢谢支持!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:WiFi包邮:http://item.taobao.com/item.htm?id=19254130983

15

主题

395

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部