没有合适的资源?快使用搜索试试~ 我知道了~
LM3S基本例程
资源推荐
资源详情
资源评论
广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com
目 录
第 1 章 几个基本例程..............................................................................................1
1.1 空的 main( )函数..........................................................................................................1
1.2 实用工程模板...............................................................................................................1
1.3 LED 闪烁发光..............................................................................................................6
1.4 输出 hello world ...........................................................................................................7
1.5 UART 控制台.............................................................................................................10
1.6 利用 Windows 超级终端调试 UART........................................................................11
1.7 使用 ROM 库编程......................................................................................................17
i
广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com
第1章 几个基本例程
本章将讲解几个最基本的 Stellaris 系列 ARM 例程,作为初学者的入门范例。
1.1 空的 main( )函数
一个最简单的 C 语言程序是什么呢?程序清单 1.1 给出了经典的答案,就是空的 main( )
函数,什么也不做。
程序清单 1.1 C 语言经典的空 main( )函数
int main(void)
{
return(0);
}
我们注意到,在程序清单 1.1 里,main( )函数的原型是“int main(void)”,即 参 数 为 void、
返回类型为 int,这是标准的格式,具有非常好的兼容性,不会出现编译警告。今后,在我
们的例程中,都将采用这一格式。在经典的 main( )函数里,要明确地用 return 语句返回数
值 0,用来通知操作系统(或者是其它的上一层调用者)是正常的返回。
但是,在嵌入式系统编程里 main( )函数往往不允许返回,尤其是在不使用操作系统的
场合下,如果执行了返回操作则可能引起程序跑飞或死机。因此,在针对 Stellaris 系列 ARM
编程的 main( )函数里,我们做了一个改动:删除 return 语句,并安排一个 for 死循环(也可
以是 while(1)死循环),永远不返回,如程序清单 1.2 所示。
程序清单 1.2 Stellaris 系列 main( )函数基本形式
int main(void)
{
for (;;)
{
}
}
1.2 实用工程模板
在周立功单片机网站“http://www.ZLGMCU.com”提供有IAR EWARM开发环境的实用
工程模板“Demo”。有了该Demo例程,我们就不需要从头开始一步步新建工程,因为这样
太繁琐了,而是直接通过修改Demo工程来编写用户程序。程序清单 1.3 列出了Demo工程里
程序文件“main.c”、“systemInit.h”和“systemInit.c”的全部内容。
程序清单 1.3 实用工程模板 Demo
文件:main.c
#include "systemInit.h"
// 主函数(程序入口)
int main(void)
1
广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com
{
jtagWait( ); // 防止 JTAG 失效,重要!
clockInit( ); // 时钟初始化:晶振,6MHz
for (;;)
{
}
}
文件:systemInit.h
#ifndef __SYSTEM_INIT_H__
#define __SYSTEM_INIT_H__
// 包含必要的头文件
#include <hw_types.h>
#include <hw_memmap.h>
#include <hw_ints.h>
#include <interrupt.h>
#include <sysctl.h>
#include <gpio.h>
// 将较长的标识符定义成较短的形式
#define SysCtlPeriEnable SysCtlPeripheralEnable
#define SysCtlPeriDisable SysCtlPeripheralDisable
#define GPIOPinTypeIn GPIOPinTypeGPIOInput
#define GPIOPinTypeOut GPIOPinTypeGPIOOutput
#define GPIOPinTypeOD GPIOPinTypeGPIOOutputOD
extern unsigned long TheSysClock; // 声明全局的系统时钟变量
extern void jtagWait(void); // 防止 JTAG 失效
extern void clockInit(void); // 系统时钟初始化
#endif // __SYSTEM_INIT_H__
文件:systemInit.c
#include "systemInit.h"
// 定义全局的系统时钟变量
unsigned long TheSysClock = 12000000UL;
// 定义 KEY
#define KEY_PERIPH SYSCTL_PERIPH_GPIOG
#define KEY_PORT GPIO_PORTG_BASE
#define KEY_PIN GPIO_PIN_5
2
广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com
// 防止 JTAG 失效
void jtagWait(void)
{
SysCtlPeriEnable(KEY_PERIPH); // 使能 KEY 所在的 GPIO 端口
GPIOPinTypeIn(KEY_PORT, KEY_PIN); // 设置 KEY 所在管脚为输入
if (GPIOPinRead(KEY_PORT, KEY_PIN) == 0x00) // 若复位时按下 KEY,则进入
{
for (;;); // 死循环,以等待 JTAG 连接
}
SysCtlPeriDisable(KEY_PERIPH); // 禁止 KEY 所在的 GPIO 端口
}
// 系统时钟初始化
void clockInit(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
*/
TheSysClock = SysCtlClockGet( ); // 获取当前的系统时钟频率
}
因为是模板程序,所以在 main( )函数里只做了两件事情:预防 JTAG 连接失效、系统时
钟初始化,接着是 for 死循环。下面,让我们来详细分析这个实用模版程序。
1. 驱动库头文件包含
我们用的是基于《Stellaris 外设驱动库》的编程方法。在整个驱动库里,头文件
“hw_type.h”和“hw_memmap.h”处于基础性的地位,基本上在每个例程里都要包含它们。
其中前缀“hw_”表 示 hardware(硬件)。另外几个头文件是关于中断控制、系统控制和 GPIO
3
剩余21页未读,继续阅读
资源评论
jude_2002
- 粉丝: 33
- 资源: 36
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功