打印

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

[复制链接]
3316|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管脚为低
}

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

128.08 KB

uart0control.rar

140.8 KB

相关帖子

沙发
reayfei|  楼主 | 2011-12-11 21:12 | 只看该作者
贴出来的程序只是一部分,请注意!因为发帖字符不能超过20000字符,无法全部贴出。

使用特权

评论回复
板凳
tianm| | 2011-12-12 09:07 | 只看该作者
不错不错 加个裤先

使用特权

评论回复
地板
reayfei|  楼主 | 2011-12-12 14:33 | 只看该作者
3# tianm 还有个遗留问题,求指点!红字部分!

使用特权

评论回复
5
reayfei|  楼主 | 2011-12-15 11:28 | 只看该作者
求解答

使用特权

评论回复
6
reayfei|  楼主 | 2011-12-16 19:51 | 只看该作者
有木有高手帮忙解答?:handshake

使用特权

评论回复
7
zjsyjbb| | 2011-12-17 11:46 | 只看该作者
厉害,学习了..

使用特权

评论回复
8
张鑫鑫鑫| | 2011-12-17 18:55 | 只看该作者
好东西,支持楼主分享

使用特权

评论回复
9
xhc12345| | 2011-12-17 19:09 | 只看该作者
好东西,支持楼主分享.

使用特权

评论回复
10
acer4736| | 2011-12-18 20:57 | 只看该作者
HAO,值得借鉴

使用特权

评论回复
11
jinpaidianzi| | 2011-12-18 21:25 | 只看该作者
感谢分享,楼主辛苦

使用特权

评论回复
12
创展和众| | 2011-12-18 21:29 | 只看该作者
谁能把1、2、3的链接发一下呢

使用特权

评论回复
13
reayfei|  楼主 | 2011-12-18 21:38 | 只看该作者
本帖最后由 reayfei 于 2011-12-18 21:43 编辑

12# 创展和众 请在TI MCU 论坛精华区寻找其他从零开始学Cortex-M3内核单片机

使用特权

评论回复
14
uestchm| | 2011-12-19 10:30 | 只看该作者
一直在关注 谢楼主分享

使用特权

评论回复
15
reayfei|  楼主 | 2011-12-19 20:47 | 只看该作者
14# uestchm 谢谢支持!

使用特权

评论回复
16
huigoushang| | 2011-12-19 22:31 | 只看该作者
这个帖子不错,支持楼主

使用特权

评论回复
17
G21372| | 2011-12-19 22:37 | 只看该作者
谢谢分享,学习一下

使用特权

评论回复
18
reayfei|  楼主 | 2011-12-20 18:33 | 只看该作者
17# G21372 谢谢支持!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

15

主题

395

帖子

2

粉丝