ARM学习资料 GPIO基本内容 LED跑马灯实验(1)
- 格式:doc
- 大小:606.50 KB
- 文档页数:16
实验七LED跑马灯实验1 (点灯)一、实验目的1.掌握嵌入式ARM的I/O及其相关设置;2.继续熟悉ARM开发环境。
二、实验内容1.了解S3C6410实验板I/O接口原理。
2.利用ADS编译环境,用C语言编写点亮一盏灯主程序。
三、实验设备硬件:S3C6410实验板;PC机;串口通信线;软件:PC机操作系统(WINDOWS XP);ARM Developer Suite v1.2;超级终端四、实验步骤1.新建ARM工程:工程名字自拟启动ADS开发环境,选择File→New(Project)选项,使用ARM Executable Image工程模板创建一个工程。
2.新建C语言程序文件led.c(名字自拟),并将其添加到工程中选择File→New(File)选项,新建汇编源程序文件,并添加到工程中,定义被汇编程序调用的C函数g( )和全局变量sum添加到工程中,led.c源程序的参考代码如下:/*------------------------地址声明---------------------------*/#define GPQCON (*(volatile unsigned *)0x56000010)#define GPQDAT (*(volatile unsigned *)0x56000014)#define GPQUP (*(volatile unsigned *)0x56000018)#define uchar unsigned char#define uint unsigned int/*-----------------------定义全局变量------------------------*//*----------------------------------------------------------函数名称:ledMain功能描述:入口程序初始化后,进入跑马灯死循环传参:无返回值:int 0-------------------------------------------------------------*/int ledMain(void){GPQCON = ??????; //设置为输出GPQDAT =??????; //使LED全灭GPQUP = 0x00;while (1) // 死循环{GPQDAT = ?????; //LED0亮}return 0;}3.新建汇编程序文件Init.s,并将其添加到工程中选择File→New(File)选项,新建汇编源程序文件Init.s,并添加到工程中,参考代码如下:AREA DA TA,CODE,READONL YENTRYldr r13, =0x1000IMPORT ledMainb ledMainEND4.设置工程的编译和链接选项选择Edit→DebugRel Settings选项,打开DebugRel Settings对话框,设置工程编译和链接选项,在Target→Target Settings选项中,打开Post-linker选项,选择ARM fromELF,在Language Settings→ARM Assembler选项中,选择Target选项卡,修改处理器类型为ARM920T,在Linker→ARM Linker选项中,打开Output选项卡,在RO base里填写地址0x32000000,在Options选项卡中,填写Image entry point地址0x32000000,打开Lay Out选项卡,在Objec/symbol中填写你建立的汇编程序名.o。
汇编语⾔实现led灯的跑马灯led实验1.看原理图看设备⼯作的原理(可能需要阅读芯⽚⼿册),看设备与cpu的连接关系GPIO具有输⼊输出功能。
输⼊:cpu想知道io引脚是⾼电平还是低电平那么就是输⼊⽅式输出:cpu想控制io引脚为⾼电平还是低电平那么就是输出⽅式跟电流的⽅向没有任何关系2. cpu的相关章节GPJ2CON control是配置这个引脚是什么功能GPJ2有8个引脚,每个引脚由con寄存器中的4个位进⾏配置GPJ2DAT 如果cpu要输出⾼电平或者低电平,就需要设置该寄存器,只有8位有效When the port is configured as input port, the correspondingbit is the pin state. When the port is configured as outputport, the pin state is the same as the corresponding bit.When the port is configured as functional pin, the undefinedvalue will be read.当配置为输⼊模式的时候,dat寄存器中的某⼀位的值由引脚设置,引脚是⾼电平是,对应的位为1,引脚为低电平时,对应的位为0当配置为输出模式的时候,dat寄存器中的某⼀位控制引脚的电平,对应的位为1时,对应的引脚输出⾼电平,对应的位为0时,对应的引脚输出为低电平其他功能模式时,读到的值是未定义的。
@gec210 light first led.globl _start_start:ldr r0,=0xe0200280mov r1,#1<<4str r1,[r0] @config pin0 output modemov r1,#0str r1,[r0,#4] @output low levelb . @same as while(1);arm-linux-gcc -c led.S -o led.o //编译不链接arm-linux-ld -Ttext 0x30008000 led.o -o led.elf //链接指定代码段起始位置arm-linux-objcopy -O binary led.elf led.bin //⽣成⼆进制执⾏⽂件arm-linux-objdump -D led.elf > led.dis //⽣成反汇编代码uboot的⼏个常⽤命令printenv 打印显⽰环境变量ipaddr=192.168.1.4 //开发板的ipserverip=192.168.1.2 //tftp服务器的ip设置为各⾃的ip,只是设置到内存,掉电就没有setenv ipaddr 192.168.1.xsetenv serverip 192.168.1.xsaveenv //保存到flash中,再次启动后为刚刚设置的值ping //单向的,只能从开发板ping电脑alive表⽰⽹络是通的,not alive表⽰⽹络不通tftp 30008000 led.bin //下载⼆进制⽂件到内存0x30008000地址go 30008000 //跳转到0x30008000运⾏程序@gec210 light first led.globl _start_start:ldr r0,=0xe0200280ldr r1,=(1<<0 | 1<<4 | 1<<8 | 1<<12)str r1,[r0] @config pin0-pin3 output modemov r1,#0str r1,[r0,#4] @output low levelb . @same as while(1);简单的makefileAPP=led$(APP).bin:$(APP).oarm-linux-ld -Ttext 0x30008000 $^ -o $(APP).elf arm-linux-objcopy -O binary $(APP).elf $@ arm-linux-objdump -D $(APP).elf > $(APP).dis cp $@ /home/gec/tftp/%.o:%.sarm-linux-gcc $^ -c -o $@%.o:%.Sarm-linux-gcc $^ -c -o $@%.o:%.carm-linux-gcc $^ -c -o $@clean:@rm -f $(APP).bin $(APP).elf $(APP).dis *.o四个灯同时点亮或者同时熄灭循环闪烁@gec210 light first led.globl _start_start:ldr r0,=0xe0200280ldr r1,=(1<<0 | 1<<4 | 1<<8 | 1<<12)str r1,[r0] @config pin0-pin3 output mode loop:mov r1,#0str r1,[r0,#4] @output low levelbl delaymov r1,#0xfstr r1,[r0,#4]bl delayb loopb . @same as while(1);delay:mov r4,#0xff00000delay1:subs r4,r4,#1bne delay1mov pc,lr#define GPJ2CON (unsigned long *)0xe0200280unsigned long *p = (unsigned long *)0xe0200280;p练习:第1个灯到第4个灯依次点亮,第4个灯到第1个灯依次熄灭,循环。
实验二 I/O接口实验[实验目的]1.熟悉ARM芯片I/O口配置方法2.通过实验掌握ARM芯片I/O控制LED显示的方法[实验仪器]1.Proteus仿真的LPC2000系列的ARM处理器2.软件:PC机操作系统Win98、Win2000或WinXP,Keil for ARM(MDK)集成开发环境[实验原理]根据LPC2000系列ARM芯片的特点,可以将P0口的功能设置为GPIO,用来驱动LED等设备或者接受矩阵键盘的输入等。
[实验内容]设计一个ARM驱动LED的电路,使用LPC2000的GPIO功能,编写一个LED跑马灯程序,并且在Proteus上仿真运行。
[预备知识]LPC2000系列微控制器的大部分管脚都具有多种功能,即管脚复用,但是同一引脚在同一时刻只能使用其中一个功能,通过配置相关寄存器控制多路开关来连接引脚与片内外设。
通过引脚连接模块PINSELx控制引脚功能[实验步骤]一、参考实验一建立ARM的GPIO电路,图中使用P0口的低八位驱动八个发光二极管,元件参元件元件参数Res1~8 51欧Cap1~4 22P(仿真时候没有影响)晶振1,2 11.0592MHz和32768(仿真时候没有影响)LED 红绿黄蓝颜色的各两个二、使用Keil MDK软件和C语言编写LED的驱动程序:按照实验一创建一个Keil项目,项目名称叫GPIO,不过在提示下图时候选择是,而不是否。
此处使用Keil提供的汇编启动文件来启动arm处理器,不再使用自己编写的汇编语言了。
创建项目后界面如下:在项目配置的界面下,linker页按如下设置,不按照实验一的设置进行。
其余的设置按照实验一设定。
双击打开 Startup.s文件,见下图这个文件有两种编辑方式,一种是使用文本方式,就是上图中的TextEditor。
另一种是菜单界面的配置方式Configuration Wizard,用来配置ARM处理器的运行时候的设置。
点击Configuration Wizard(上图的编辑区的下方)如下图按照图上设置,取消锁相环的设置。
ARM嵌入式设计实验报告题目:跑马灯的设计专业:班级:姓名:学号:指导教师:2014年11 月目录1 题目要求 (1)2 设计软件的安装 (1)3 开发平台的搭建 (4)4 项目设计 (8)4.1 设计思路概述 (8)4.1.1 设计层次介绍 (9)4.1.2 设计模块介绍 (12)5总结 (16)1.题目要求:在windows系统上安装一个Linux操作系统,并且在自己搭建的平台上实现跑马灯的设计。
1.1.实验工具:计算机 linux操作系统1.1.2.实验目的:熟练掌握arm开发环境的设计,了解跑马灯的编程。
2.设计软件的安装:本项目设计软件为ReHat Linux 9.0操作系统,实验开发平台为MagicARM270具体关键安装步骤如下:3.开发平台的搭建:实验步骤(1)安装交叉编译器将光盘提供的交叉编译器安装包arm-linux-3.4.1.tar.bz2复制到某个目录下,然后进行解压安装,指定安装路径为/usr/local/arm。
# tar xjvf arm-linux-3.4.1.tar.bz2 -C /usr/local/arm注意:安装交叉编译器需要root权限,请使用root登录或者使用su命令增加root权限。
(2)设定交叉编译器路径修改/etc/profile文件,在其中增加arm-linux-gcc的路径,然后重新登录:# Path manipulationif [ `id -u` = 0 ]; thenpathmunge /sbinpathmunge /usr/sbinpathmunge /usr/local/sbinpathmunge /usr/local/arm/3.4.1/bin ⇓增加此行fi(3)设置宿主机网络从RedHat Linux的Main Menu菜单,选择System Settings◊Network,打开网络配置界面。
(4)设置宿主机网络双击eth0,在弹出的界面进行具体的网络设置,如IP地址、子网掩码等信息。
1、Led灯实验。
要求:Led灯从左往右依次快速亮起,第4、5个灯亮时间隔2秒钟,第5、6、7、8亮起是时间间隔依次缩短。
再从左边亮起如此反复。
1.1#include"s5pc210.h"#include"uart.h"#define U8unsigned charvoid delay(int count){int cnt;for(count=count;count>0;count--)for(cnt=0;cnt<1000;cnt++);}int main(){uart_init();while(1){*((U8*)0x8800b000)=0xff;delay(1000);for(i=0;i<8;i++){*((U8*)0x8800b000)=0x8>>i;delay(3200-i*400);}}return0;}1.2int a=0x80,i;for( ; ; ) {for(i=0;i<8;i++) {*((U8*)0x8800B000) = a;d elay (100);*((U8*)0x8800B000) = a>>1;d elay (100);*((U8*)0x8800B000) = a>>2;d elay (100);*((U8*)0x8800B000) = a>>3;d elay (2000);*((U8*)0x8800B000) = a>>4;d elay (500);*((U8*)0x8800B000) = a>>5;delay (400);*((U8*)0x8800B000) = a>>6;d elay (200);*((U8*)0x8800B000) = a>>7;d elay (100);}}2、Led矩阵实现。
要求,在矩阵上亮起一个最大正方形和一个心的图案。
实验(SHÍYÀN)四 LED跑马灯实验(SHÍYÀN)一、实验(shíyàn)目的:1、掌握(zhǎngwò)EXYNOS 4412处理器与LED指示灯的电路(diànlù)原理。
2、掌握linux驱动对EXYNOS 4412 GPIO的控制原理及使用方法。
二、实验设备:TINY4412开发板、学生自带笔记本、USB转串口线、电源、网线。
三、实验地点及时间地点:A2-303a时间:教学周第八周四、实验内容:1、在ARM开发板上面,在驱动程序中利用linux定义的GPIO M4口编写对应管脚电平控制程序,并进行测试验证所学内容。
2、在ARM开发板上面,在上面程序的基础上采用动态IO映射的方法,编写程序,并进行测试验证所学内容。
3、在ARM开发板上面,在驱动程序中利用内核定时器,编写程序,并进行测试验证insmod module后LED跑2圈的结果。
4、在ARM开发板上面,利用2的驱动程序,编写应用程序测试验证LED跑马灯的结果。
五、实验原理:1、GPIO端口原理EXYNOS 4412有300多个输入/输出端口,这些端口都具有多功能,通过引脚配置寄存器,可以将其设置为所需要的功能,如:I/O功能、中断功能等等。
大多数采用EXYNOS 4412的典型LED指示灯电路设计基本都使用M4口(GPM4 共8个输入/输出口)作为其控制端口。
端口寄存器及引脚配置每一个端口都有6个寄存器,它们是:引脚配置寄存器、数据寄存器、引脚上拉寄存GPM4DAT 0x02E4 Port group GPM4 data register 数据寄存器0x00GPM4PUD 0x02E8 Port group GPM4 pull-up/ pull-downregister 上拉寄存器0x5555GPM4DRV 0x02EC Port group GPM4 drive strengthcontrol register0x00_0000GPM4CONPDN 0x02F0 Port group GPM4 power down modeconfiguration register0x0000GPM4PUDPDN 0x02F4 Port group GPM4 power down modepull-up/ pull-down register0x0000端口M4引脚配置(pèizhì)寄存器GPM4CON 0x110002E0 Base Address: 0x1100_0000端口M4数据(shùjù)寄存器 GPM4DAT 0x110002E4为准备(zhǔnbèi)输出或输入的数据,其值为8位[7:0]。
一、实验目的1. 熟悉嵌入式系统硬件电路的搭建与调试;2. 掌握C语言编程,实现跑马灯功能;3. 理解并掌握GPIO口操作,学习定时器中断的使用。
二、实验环境1. 开发板:STM32F103C8T6开发板2. 编译器:Keil uVision53. 软件库:STM32标准外设库三、实验原理跑马灯实验是通过控制LED灯的亮灭,实现LED灯依次点亮的效果。
实验原理如下:1. GPIO口控制:将LED灯连接到开发板的GPIO口,通过控制GPIO口的输出电平,实现LED灯的点亮与熄灭;2. 定时器中断:定时器产生中断,实现LED灯点亮与熄灭的时间间隔;3. 循环控制:通过循环控制LED灯的点亮顺序,实现跑马灯效果。
四、实验步骤1. 硬件电路搭建(1)将LED灯的正极连接到开发板的GPIO口,负极接地;(2)将开发板的电源和地线连接到电源模块。
2. 软件编程(1)在Keil uVision5中创建项目,并导入STM32标准外设库;(2)编写程序,实现以下功能:a. 初始化GPIO口,将LED灯连接的GPIO口配置为输出模式;b. 初始化定时器,设置定时器中断周期,使LED灯点亮与熄灭的时间间隔为1ms;c. 编写定时器中断服务程序,控制LED灯的点亮与熄灭;d. 编写主函数,实现LED灯依次点亮的效果。
3. 编译与下载(1)编译程序,生成可执行文件;(2)将开发板连接到计算机,通过串口下载程序到开发板。
4. 实验调试(1)打开串口调试助手,观察LED灯的点亮与熄灭效果;(2)调整程序参数,优化跑马灯效果。
五、实验结果与分析1. 实验结果(1)LED灯依次点亮,实现跑马灯效果;(2)LED灯点亮与熄灭的时间间隔可调。
2. 实验分析(1)通过控制GPIO口的输出电平,实现LED灯的点亮与熄灭;(2)定时器中断实现LED灯点亮与熄灭的时间间隔控制;(3)循环控制实现LED灯依次点亮的效果。
六、实验总结本次实验成功实现了跑马灯功能,加深了对嵌入式系统硬件电路、C语言编程和GPIO口操作的理解。
可编辑修改精选全文完整版实验一跑马灯实验一、实验内容1、基本的流水灯根据图1电路,编写一段程序,使8个发光二极管D1、D2、D3、D4、D5、D6、D7、D8顺序(正序)点亮:先点亮D1,再点亮D2、D3……D8、D1……,循环点亮。
每点亮一个LED,采用软件延时一段时间。
2、简单键控的流水灯不按键,按正序点亮流水灯;按下K1不松手,按倒序点亮流水灯,即先点亮D8,再顺序点亮D7、D6……D1、D8……。
松手后,又按正序点亮流水灯。
3、键控的流水灯上电,不点亮LED,按一下K1键,按正序点亮流水灯。
按一下K2键,按倒序点亮流水灯,按一下K3键,全部关闭LED。
二、实验方案1、总体方案设计考虑到K4键未被使用,所以将实验内容中的三项合并到一个主函数中:K4键代替实验内容第二项中的K1键;单片机一开机即执行实验内容第一项;K1、K2、K3键实现实验内容第三项。
所用硬件:AT89C52、BUTTON、LED-BLUE、电源输入:P2.0-K1;P2.1-K2;P2.2-K3;P2.3-K4。
低电平有效输出:P0.0~P0.7-D0~D7。
LED组连线采用共阳极,低电平有效软件设计:软件延时采用延时函数delay(t),可调整延迟时间:void delay(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK&&P2!=K[0])break;//按下了其他键退出循环}}由于涉及到按键变化所以要设置一个变量oldK保留按键键值,要在延时程序中检测是否按键,当按键后立即设置oldK的值。
按键判断采用在while循环中利用条件语句判断P2的值然后执行该键对应的代码段,达到相应的响应。
为了让K4键的效果优化,即状态变化从当前已亮灯开始顺序点亮或逆序点亮,利用全局变量n来记录灯号,利用算法即可实现。
主要算法:1、全局变量的定义:uchar D[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0X7f};//单个LED亮uchar AllOff=0xff;//LED全灭uchar AllOn=0x00;//LED全亮uchar K[]={0xff,0xfe,0xfd,0xfb,0xf7};//按键开关uchar oldK;//记录已按键int n;2、顺序、逆序点亮流水灯:void forward(){for(n=0;n<=7;n++){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}void backward(){for(n=7;n>=0;n--){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}3、实验内容第二项流水灯灯亮顺序变换:void hold(){n=8;while(1){if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯oldK=K[4];if(n==-1)n=7; //D0灯亮后点亮D7while(n>=0){out=D[n];n--;if(delay4(15))break;}}if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯oldK=K[0];if(n==8)n=0;//D7灯亮后点亮D0while(n<=7){out=D[n];n++;if(delay4(15))break;}}if(P2!=K[4]&&P2!=K[0]){//按下了其他键,退出hold函数break;}}}4、对应实验内容第一项,开机顺序点亮流水灯:while(1){//开机即正序点亮流水灯forward();if(P2!=K[0]){break;}}2、实验原理图图2-1 实验原理图3、程序流程图图2-2 程序流程图三、源程序#include"reg51.h"#define uchar unsigned char#define uint unsigned int#define out P0uchar D[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0X7f};//单个LED亮uchar AllOff=0xff;//LED全灭uchar AllOn=0x00;//LED全亮uchar K[]={0xff,0xfe,0xfd,0xfb,0xf7};//按键开关uchar oldK;//记录已按键int n;//记录当前亮的灯号void delay(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK&&P2!=K[0])break;//按下了其他键退出循环}}void delay10ms(){uint i;for(i=0;i<10000;i++);}void forward(){for(n=0;n<=7;n++){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}void backward(){for(n=7;n>=0;n--){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}int delay4(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK){ //按键变化退出循环return 1;}}return 0;}void hold(){n=8;while(1){if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯oldK=K[4];if(n==-1)n=7; //D0灯亮后点亮D7while(n>=0){n--;if(delay4(15))break;}}if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯oldK=K[0];if(n==8)n=0;//D7灯亮后点亮D0while(n<=7){out=D[n];n++;if(delay4(15))break;}}if(P2!=K[4]&&P2!=K[0]){//按下了其他键,退出hold函数break;}}}void main(){oldK=K[0];while(1){//开机即正序点亮流水灯forward();if(P2!=K[0]){break;}}while(1){out=AllOff;if((P2&0x0f)!=0x0f){//检测有键按下delay10ms();//延时10ms再去检测//P2.0_K1键按下正序点亮流水灯if(P2==K[1]){oldK=K[1];while(1){forward();if(P2!=K[1]&&P2!=K[0]){//按下了其他键,退出break;}}}//P2.1_K2键按下逆序点亮流水灯if(P2==K[2]){while(1){backward();if(P2!=K[2]&&P2!=K[0]){//按下了其他键,退出break;}}}//P2.2_K3键按下关闭全部LEDif(P2==K[3]){oldK=K[3];out=AllOff;}//P2.3_K4键按下长按逆序点亮流水灯,不按正序点亮流水灯,直到其他键按下停止if(P2==K[4]){hold();}}}}四、实验结果1、基本的流水灯:开机后即重复顺序点亮流水灯,等待其他按键。
LED跑马灯实验
修改记录
版本号. 作者描述修改日期
0.1 徐珊First Draft 2011-9-21
审核记录
姓名职务签字日期
标题文档编号版本页
文档名 1.0 2 of 16
LED跑马灯
1.1 实验介绍
GPIO即通用可编程输入输出口,在此我们通过GPIO编程实现一个跑马灯的实验。
该跑马灯实验是最简单,也是一般最先开始的一个实验,它可以搭建一个最小的工程项目,之后,所有的实验都可以建立在该项目之上,从而节省了在搭建过程中所消耗的时间和精力。
所有的 GPIO 操作都是以跑马灯为基础进行的。
1.2 实验目标
1. 理解GPIO寄存器配置的相关知识
2. 灵活运用 GPIO
1.3 实验时间
60分钟
1.4 预备知识
熟悉C语言知识,熟练MDK的使用
1.5 实验步骤
1.创建一个GPIO_1文件夹
2.1 新建子文件夹User,用于存放用户源程序
2.2 新建子文件夹RVMDK,用于存放去启动代码(STM32F10x.s)
2.3 新建子文件夹Project,用户KEIL工程文件
2.4 在Project下依次创建Obj和List子文件夹,存放编译过程中产生的中间文件。
标题文档编号版本页
文档名 1.0 3 of 16
具体如下图所示:
4. 新建Keil MDK工程
4.1 启动Keil uVision4,点击菜单 New uVision Project,
新建一个工程,命名为GPIO
标题文档编号版本页
文档名 1.0 4 of 16
4.2 选择CPU类型为 STM32F107VC (这是MDV-STM32-107开发板采用的CPU类型)
标题文档编号版本页
文档名 1.0 5 of 16
4.3 当提示是否复制启动代码时,请选择否。
(为了工程目录标准化,稍后添加Keil软件自带的旧版本启动文件)
4.4 根据自己的需要修改Target名字。
(名字任意)
4.5 为了便于代码管理,在这个Project下创建几个Group (名字可以任意)
User : 存放用户自己写的源代码
RVMDK : 存放启动文件(汇编文件)
标题文档编号版本页
文档名 1.0 6 of 16
标题
文档编号 版本 页
文档名
1.0 7 of 16
4.6 创建好Group 后,我们开始依次添加文件。
4.6.1给User 文件夹新建GPIO..c 文件,具体如下图所示:
新文件内没有任何代码:
保存新文件到User 目录下,命名为GPIO.c
4.6.2给User文件夹添加刚刚新建好的GPIO.c,该文件在\GPIO\User下,点击Add即可
标题文档编号版本页
文档名 1.0 8 of 16
标题 文档编号 版本
页
文档名
1.0 9 of 16
添加后可看到GPIO.c 文件在User 目录下
4.6.3给RVMDK 文件夹添加启动文件,该文件在keil_MDK 软件安装目录下的: \Keil\ARM\Startup\ST\ STM32F10x.s 文件,先把这个文件复制到GPIO 工程目录下面的 \GPIO_1\RVMDK 文件夹下,然后再吧这个文件添加到RVMDK 下,如下所示:
标题文档编号版本页
文档名 1.0 10 of 16
添加时注意,应该把文件类型选择为所有,或者有*s的扩展名的类型,否则看不到你所需要的文件(STM32F10x.s)
5.在main.c 文件,输入我们自己跑马灯程序。
/*配置寄存器法 */
#define GPIOD_CRL (*((unsigned int *)(0x40011400))) //0X40001 1400
#define GPIOD_CRH (*((unsigned int *)(0x40011404))) //基址+偏移量
#define GPIOD_ODR (*((unsigned int *)(0x4001140C))) //32位数据寄存器
#define RCC_APB2ENR (*((unsigned int *)(0x40021018))) //外设时钟使能寄存器
void Delay(void) //延时函数,流水灯显示用
标题文档编号版本页
文档名 1.0 11 of 16
{
unsigned int i;
for (i=0;i<0x9FFFF;i++);
}
int main(void)
{
// 开发板使用如下I/O口控制LED---PD3,PD4,PD7,PD13
RCC_APB2ENR |=(1<<5); // 使能PORTD口的时钟
GPIOD_CRL &= 0x00000000; // 配置寄存器,将GPIOD_CRL低16位都清0,这样
CNF为00,
GPIOD_CRL |= 0x33333333; // 配置寄存器,MODE选择为11,即50MHz输出模式,
选择为推挽输出模式
GPIOD_CRH &= 0x00000000; // 配置寄存器,将GPIOD_CRL高16位都清0,这样
CNF为00,
GPIOD_CRH |= 0x33333333; // 配置寄存器,MODE选择为11,即50MHz输出模式,
选择为推挽输出模式
while(1)
{
GPIOD_ODR=0xffff; //LED全亮
Delay();
GPIOD_ODR=0x0000; //LED全灭
Delay();
}
}
6. 配置工程, 点击“Options”按钮
6.1 切换到Output。
选择Object文件夹。
标题文档编号版本页
文档名 1.0 12 of 16
6.2 切换带List。
选择List文件夹
6.4 切换到Debug
标题文档编号版本页
文档名 1.0 13 of 16
➢选择硬件调试器(缺省是软件仿真),我们选择Cortex-M/R J-LINK/J-Trace调试器➢在 Run to main前打钩
6.4 切换到Utilities
➢选额调试器类型,我们选择Cortex-M/R J-LINK/J-Trace
➢点settings按钮,添加Flash编程算法,我们选择STM32连接型器件,Flash容量256K字节
标题文档编号版本页
文档名 1.0 14 of 16
标题 文档编号
版本 页
文档名
1.0 15 of 16
7. 配置工程完毕。
下面开始编译。
8. 编译OK ,按开发板Reset 键开始运行。
9. 教程结束。
1.6 结论
1.7 问题
1、 简述GPIO 端口位的基本结构
2、
简述怎么配置GPIO 寄存器
3、简述GPIO的几种模式配置及其区别
4、在实例代码工程中修改代码使得四个LED灯依次轮流点亮,间断时间不限
标题文档编号版本页
文档名 1.0 16 of 16。