嵌入式课程设计报告.docx

上传人:b****3 文档编号:27127026 上传时间:2023-06-27 格式:DOCX 页数:6 大小:18.44KB
下载 相关 举报
嵌入式课程设计报告.docx_第1页
第1页 / 共6页
嵌入式课程设计报告.docx_第2页
第2页 / 共6页
嵌入式课程设计报告.docx_第3页
第3页 / 共6页
嵌入式课程设计报告.docx_第4页
第4页 / 共6页
嵌入式课程设计报告.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

嵌入式课程设计报告.docx

《嵌入式课程设计报告.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计报告.docx(6页珍藏版)》请在冰豆网上搜索。

嵌入式课程设计报告.docx

嵌入式课程设计报告

嵌入式课程设计报告

  最近几年,几乎所有的IT企业对应届毕业生都有抱怨:

动手能力太差,编程水平低下。

下面和小编一起来看看报告吧!

  嵌入式课程设计报告  Cortex-M3是ARM公司基于ARMV7架构的新型芯片内核。

STM32V100-II型是英蓓特公司新推出的一款基于ST意法半导体STM32系列处理器(Cortex-M3内核)的全功能评估板。

STM103V100-II评估板有USB,MotorControl,CAN,SD卡,Smart卡,UART,Speaker,LCD,LED,BNC,耳塞插孔等丰富的外设,有助于用户轻松开发STM32的强大功能。

STM32系列使用了ARM最新的、先进架构Cortex-M3内核,本文论述了在KeilRealview开发环境上开发基于汇编语言的LED控制程序,基于对STM32的GPIO寄存器写值配置思想,控制EduKit-M3实验平台的发光二极管LED1、LED2、LED3、LED4,使它们有规律地点亮。

  、设计需求

  KeilRealview开发环境上,全部采用汇编语言编程,实现对EduKit-M3实验平台的发光二极管LED1、LED2、LED3、LED4的亮灭控制,使它们有规律地点亮。

这里采用例程提供的顺序点亮方式,按照LED1亮LED2亮LED3亮LED4亮,如此反复,要求每个LED亮灭之间延时一段时间,以增强可观性。

需要说明的是,这仅仅作为程序控制LED的一种控制方式,基于点亮LED的控制原理,可以编程实现各种显示LED的亮灭模式,并提供一种通用的控制方法,要求程序可读性强,易于修改。

  、设计原理

  STM32通用GPIO端口概述STM32F10x处理器上共有7个I/O端口:

A、B、C、D、E、F、G,每个16个管脚每组端口每组端口有以下寄存器:

,32位配置寄存器:

GPIOx_CRL、GPIOx_CRH32为数据寄存器:

GPIOx_IDR、GPIOx_ODR32位置位/复位寄存器:

GPIOx_BSRR16位复位寄存器:

GPIOx_BRR32为锁定寄存器:

GPIOx_LCKRI/O口通用输入、输出端口配置为输入时,每个APB2时钟周期将端口数据送输入寄存器(GPIOx_IDR),在输入模式下,输出是断开的。

输出模式时:

写到输出寄存器(GPIOx_ODR)的值被传给对应的I/O引脚。

在输出模式下,输入是允许的程序设计原理EduKit-M3实验平台上,通过写值配置端口数据输出寄存器GPIOC_ODR值,可以实现对四个LED的亮灭控制,因为C口位和四个LED灯连通。

而这里主要是通过对时钟控制寄存器以及端口C的各配置寄存器和输出寄存器写值,以达到配置端口,控制LED的目的。

汇编语言与C语言相比,要求更加贴近硬件,了解M3内核的内部结构和寄存器地址。

基于汇编语言的编程控制,只需要找出需要配置的端口基地址,然后弄清楚各寄存器的偏移地址,以及各寄存器每位的含义,按照要求写1或写0即可。

  2

  硬件电路

  硬件电路描述

  本设计是基于EduKit-M3实验平台的嵌入式开发实例,EduKit-M3实验平台有四个LED灯,分别为LED1、LED2、LED3、LED4,对应的连接到I/O的C口、、、 四位输出位上,不需要外扩电路或者额外接线,简单易行。

  程序流程图

  软件设计描述

  整个工程包含3个源文件:

、和my,stm32f10x_其中为启动代码,。

启动代码作用是:

1)堆和栈的初始化;2)向量表定义;3)地址重映射及中断向量表的转移;4)设置系统时钟频率;5)中断寄存器的初始化;6)进入汇编主程序。

my 是汇编主程序,完成所有控制功能。

  程序工作原理概述:

对于LED的控制,主要通过对I/O端口的配置,将对应的寄存器相应的位写1写0控制。

程序首先要经过启动代码段进行相关的启动配置,然后跳转到汇编主程序。

汇编主程序完成了时钟、端口配置以及LED点亮的所有功能。

首先需要对于系统时钟进行配置,已获得系统所用频率。

然后进行端口配置低、高寄存器配置,获得输入输出模式以及最大速度。

将时钟和端口配置完成后,就可以对输出寄存器进行对应位的写值控制了,从而达到控制LED的目的,高电平点亮,低电平熄灭。

点亮LED后,转入延时子程序,延时子程序写值0X000FFFFF,做寄存器值减法,减到0后,过程所需时间即是延时时间,即单个LED点亮时间。

本程序设置循环点亮模式,即LED1到LED4顺序循环点亮,将对应位逐次写1,如果需要修改点亮模式,只需修改寄存器的值以及写值顺序即可。

  寄存器配置描述端口配置低寄存器(GPIOC_CRL)C口基地址:

0X40011000偏移地址:

0x00复位值:

0x44444444寄存器配置:

0X22222222功能含义:

口配置低寄存器为模拟输入模式,端通用推挽输出模式,输出模式,最大速?

2MHz

  端口配置高寄存器(GPIOC_CRH)C口基地址:

0X40011000偏移地址:

0x04复位值:

0x44444444寄存器配置:

0X22222222功能含义:

口配置高寄存器为模拟输入模式,端通用推挽输出模式,输出模式,最大速?

2MHz端口输出数据寄存器(GPIOC_ODR)C口基地址:

0X40011000地址偏移:

0Ch寄存器配置0xfffffc4f0xfffffc8f复位值:

00000000h功能含义 位写1,对应点亮LED1 位写1,对应点亮LED2

  40xfffffd0f 位写1,对应点亮LED3 位写1,对应点亮LED4

  时钟控制寄存器(RCC_CR)复位和时钟基地址:

0X40021000偏移地址:

0x00复位值:

0x000XX83寄存器配置:

0X00000003功能含义:

PLL未锁定,PLL关闭,时钟监测器关闭,外部1-25MHz振荡器没有旁?

,外部1-25MHz时钟没有就绪,HSE振荡器关闭内部8MHz时钟就绪,内部8MHz时钟开启。

时钟配置寄存器(RCC_CFGR)复位和时钟基地址:

0X40021000偏移地址:

0x04复位值:

0x00000000寄存器配置:

0X00000000功能含义:

没有时钟输出,PLL时钟 倍分频作为USB时钟,PLL2倍频输出,HSE不分频,HSI时钟2分频后作为PLL输入时钟,PCLK22分频后作为ADC时钟,HCLK不分频,HCLK不分频,SYSCLK不分频,HSI作为系统时钟,HSI作为系统时钟。

AHB外设时钟使能寄存器(RCC_AHBENR)复位和时钟基地址:

0X40021000偏移地址:

0x14复位值:

0x00000014寄存器配置:

0X00000014功能含义:

睡眠模式时闪存接口电路时钟开启,睡眠模式时SRAM时钟开启,DMA时钟关闭APB2外设时钟使能寄存器(RCC_APB2ENR)复位和时钟基地址:

0X40021000偏移地址:

0x18复位值:

0x00000000寄存器配置:

0XFFFFFFFF功能含义:

USART1时钟开启,SPI1时钟开启,TIM1时钟开启,ADC2时钟开启,ADC1时钟开启,IO口E时钟开启,IO口D时钟开启,IO口C时钟开启,IO口B时钟开启,IO口A时钟开启,辅助功能IO时钟开启

  主要程序说明

  启动代码转入汇编主程序的设置:

【启动代码段设置:

】Reset_HandlerPROCEXPORTReset_Handler IMPORTMAIN;声明外部函数,导入符号LDRR0,=MAIN;等待工作调用BXR0;跳转到汇编主程序MAIN函数ENDP;过程段结束【汇编主程序设置:

】AREAMYCODE,CODE,READONLY;定义一个代码段,属性为只读EXPORTMAINMAINPROC EndPEND汇编主程序;配置时钟

  5LDRR1,=0X40021000LDRR0,=0X00000003STRR0,LDRR0,=0X00000000STRR0,LDRR0,=0X00000014STRR0,

  时钟控制寄存器入口

  配置时钟控制寄存器(RCC_CR)

  配置时钟配置寄存器(RCC_CFGR)

  配置AHB外设时钟使能寄存器RCC_AHBENR

  LDRR0,=0XFFFFFFFFSTRR0,;配置APB2外设时钟使能寄存器(RCC_APB2ENR);----------------------------------------------------------------------------------------------------;配置端口MOVSR0,#0X22222222LDRR1,=0X40011000STRR0,;配置端口配置寄存器GPIOC_CRLMOVSR0,#0X22222222LDRR1,=0X40011000STRR0,;配置端口配置寄存器GPIOC_CRH;---------------------------------------------------------------------------------------------------;点亮LEDLDRR0,=0xfffffc4fSTRR0,;将0xfffffc4f写进GIPOC_ODR,点亮LED1BLDELAY;延时--------------------------------------------------------------------------------------------------------LDRR0,=0xfffffc8fSTRR0,;将0xfffffc8f写进GIPOC_ODR,点亮LED2BLDELAY;延时-------------------------------------------------------------------------------------------------------LDRR0,=0xfffffd0fSTRR0,;将0xfffffd0f写进GIPOC_ODR,点亮LED3BLDELAY;延时-------------------------------------------------------------------------------------------------------LDRR0,=0xfffffe0fSTRR0,;0xfffffe0f写进GIPOC_ODR,点亮LED4BLDELAY;延时-------------------------------------------------------------------------------------------------------BMAIN;跳到MAIN函数;------------------------------------------------------------------------延时子程序DELAY

  6LDRR3,=0X000FFFFF;延时控制字DELAY_1SUBSR3,R3,#0X01;延时控制字自减BEQDELAY_OUT;为0跳出返回BDELAY_1;不为0回转继续做减法DELAY_OUTBXLR;程序返回

  调试过程

  

(1)使用KeiluVision3通过ULINK2仿真器连接EduKit-M3实验平台,打开建立的myledcontroler工程,点击子目录下的my 文件,编译链接工程。

设置Flash——Debug,选择Cortex-M3J-LINK,Flash——Utilities,同样选择Cortex-M3J-LINK,效果如下

  点击编译链接,生成HEX文件

  点击Load,下载源程序到STM32,运行程序

(2)选择软件调试模式,点击MDK的Debug菜单,选择Start/StopDebugSession项或Ctrl+F5键。

  7在逻辑分析仪中添加GPIOC_、GPIOC_、GPIOC_、GPIOC_,点击Run按钮即可在逻辑分析仪中看波形。

  测试

  本程序由于大量的涉及到原理简单,测试方便,只需要单步运行,查看寄存器的值,就可以测试程序的正确性。

  程序开始时各寄存器的值

  将时钟控制寄存器入口基地址赋值给R1

  R1既已经被赋值了时钟控制寄存器入口地址,利用偏移地址将时钟各控制寄存器的地址赋值给达到配置RCC_CR、RCC_CFGR、RCC_AHBENR、RCC_APB2ENR的目的,,集体寄存器值变化如下:

  8端口配置情况测试:

I/OC口入口地址写进通用寄存器R1,利用基地址加偏移地址找到端口配置寄存器GPIOC_CRL、GPIOC_CRH,然后将控制字0X22222222写进该寄存器。

  端口输出数据寄存器(GPIOx_ODR)的值的变化,直接反映了外部LED的亮灭变化,采用逐位写1的方式,实现循环点亮,此时通用R1已经被写进了C口的入口基地址,只需加上偏移地址#0X0C,便是GPIOx_ODR的地址,每次写值控制LED点亮后,程序跳转到延时子程序,所测试结果如下:

【将0xfffffc4f写进GIPOC_ODR点亮LED1】【延时子程序运行寄存器变化情况】

  当转入延时子程序后,寄存器R3值做减1算法,从0X000FFFFF循环减至0,是为延时时间,然后继续跳转至端口输出寄存器配置,点亮LED2,接着再次跳转到延时子程序,R39再次做减1运算,如此控制LED循环点亮。

【转入延时子程序】

  【退出延时子程序对LED2对应位写1况】

  结果及描述

  逻辑分析仪中波形:

  GPIOC_、GPIOC_、GPIOC_、GPIOC_的波形即对应的LED1、LED2、LED3、LED4高低电平波形,由此可以验证程序的正确性,即LED确实按照程序的思想循环顺序点亮。

  当将程序下载到STM32中后,EduKit-M3实验平台上四个LED确实循环点亮,进一步验证控制程序的正确性。

  本设计是基于STM32的汇编语言编写的LED循环顺序点亮控制程序,原理简单易行,程序可修改性和可读性强,件电路也很简单,需要外扩电路,接利用试验台内部接线,硬不直通过对GPIO的控制来相应地点亮LED灯。

整个控制程序只需要找到相应的时钟、端口、输出寄存器的地址,以及各控制寄存器的偏移地址,直接寻址写值控制,这是与C语言程序最大的不同点,即汇编编程更加的贴近硬件,要求熟悉内部寄存器的地址,熟悉如何配置各位,这就要求对寄存器每位的含义非常清楚。

通过用汇编语言编写I/O控制程序,进一步熟悉了解了STM32GPIO操作,以及CORTEXM3的内部架构和优点,学会了如何使用KEILRealview开发STM32,以及如何进行程序单步调试,寄存器值查看。

了解了EduKit-M3实验平台内部结构和优良的功能。

  

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1