重庆交通大学信息科学与工程学院

《嵌入式系统基础A》课程

作业报告(第3周)

班 级: 物联网工程2020

姓名-学号 : 吕文杰-632007060233

实验项目名称: ARM汇编程序入门实践

实验项目性质: 设计性

实验所属课程: 《嵌入式系统基础》

实验室(中心): 南岸校区语音大楼

指 导 教 师 : 娄路

完成时间: 2022 年 10 月 8 日


一、实验内容和任务

一、搭建并配置Keil嵌入式开发环境,完成一个基于STM32汇编程序的编写。

1)记录build生成的 hex文件各段的大小,了解Hex文件格式及其前8个字节内容含义;

2)学习在没有硬件条件下进行仿真调试的方法,观察ARM寄存器变化状况。

二、实验要求

1. 分组要求:每个学生独立完成,即1人1组。

2. 程序及报告文档要求:具有较好的可读性,如叙述准确、标注明确、截图清晰等。

3.项目代码上传github,同时把项目完整打包为zip文件,与实验报告(Markdown源码及PDF文件)、作业博客地址一起提交到学习通。


三. 实验过程介绍 (此处可以填博客内容)

文章目录

  • **重庆交通大学信息科学与工程学院**
  • **《嵌入式系统基础A》课程**
  • 作业报告(第3周)
  • 一、新建一个Keli工程
  • 二、stm32程序仿真调试
      • 1.调试前的设置
    • 2.开始调试
  • 总结

一、新建一个Keli工程

①打开Keil uVision5,找到File,然后点击New uVision Project

②选择需要使用的stm32芯片

③对Run-Time Environment进行设置,设置完成后,点击OK,这样一个工程就建立完成

④新建一个文本文件加入程序代码

//宏定义,用于存放stm32寄存器映射
#define PERIPH_BASE           ((unsigned int)0x40000000)//AHB
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
#define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)
//GPIOA_BASE=0x40000000+0x10000+0x0800=0x40010800,该地址为GPIOA的基地址
#define GPIOB_BASE            (APB2PERIPH_BASE + 0x0C00)
//GPIOB_BASE=0x40000000+0x10000+0x0C00=0x40010C00,该地址为GPIOB的基地址
#define GPIOC_BASE            (APB2PERIPH_BASE + 0x1000)
//GPIOC_BASE=0x40000000+0x10000+0x1000=0x40011000,该地址为GPIOC的基地址
#define GPIOD_BASE            (APB2PERIPH_BASE + 0x1400)
//GPIOD_BASE=0x40000000+0x10000+0x1400=0x40011400,该地址为GPIOD的基地址
#define GPIOE_BASE            (APB2PERIPH_BASE + 0x1800)
//GPIOE_BASE=0x40000000+0x10000+0x0800=0x40011800,该地址为GPIOE的基地址
#define GPIOF_BASE            (APB2PERIPH_BASE + 0x1C00)
//GPIOF_BASE=0x40000000+0x10000+0x0800=0x40011C00,该地址为GPIOF的基地址
#define GPIOG_BASE            (APB2PERIPH_BASE + 0x2000)
//GPIOG_BASE=0x40000000+0x10000+0x0800=0x40012000,该地址为GPIOG的基地址
#define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C
#define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C
#define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C
#define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C
#define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C
#define GPIOF_ODR_Addr    (GPIOF_BASE+12) //0x40011A0C
#define GPIOG_ODR_Addr    (GPIOG_BASE+12) //0x40011E0C #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))#define LED0  MEM_ADDR(BITBAND(GPIOA_ODR_Addr,8))
//#define LED0 *((volatile unsigned long *)(0x422101a0)) //PA8
//定义typedef类型别名
typedef  struct
{volatile  unsigned  int  CR;volatile  unsigned  int  CFGR;volatile  unsigned  int  CIR;volatile  unsigned  int  APB2RSTR;volatile  unsigned  int  APB1RSTR;volatile  unsigned  int  AHBENR;volatile  unsigned  int  APB2ENR;volatile  unsigned  int  APB1ENR;volatile  unsigned  int  BDCR;volatile  unsigned  int  CSR;
} RCC_TypeDef;#define RCC ((RCC_TypeDef *)0x40021000)
//定义typedef类型别名
typedef  struct
{volatile  unsigned  int  CRL;
volatile  unsigned  int  CRH;
volatile  unsigned  int  IDR;
volatile  unsigned  int  ODR;
volatile  unsigned  int  BSRR;
volatile  unsigned  int  BRR;
volatile  unsigned  int  LCKR;
} GPIO_TypeDef;
//GPIOA指向地址GPIOA_BASE,GPIOA_BASE地址存放的数据类型为GPIO_TypeDef
#define GPIOA ((GPIO_TypeDef *)GPIOA_BASE)void  LEDInit( void )
{RCC->APB2ENR|=1<<2;  //GPIOA 时钟开启GPIOA->CRH&=0XFFFFFFF0;GPIOA->CRH|=0X00000003;
}//粗略延时
void  Delay_ms( volatile  unsigned  int  t)
{unsigned  int  i,n;for (n=0;n<t;n++)for (i=0;i<800;i++);
}int main(void)
{LEDInit();while (1){LED0=0;//LED熄灭Delay_ms(500);//延时时间LED0=1;//LED亮Delay_ms(500);//延时时间}
}

⑤将上面的文件保存在该工程文件里,命名为mian.c
然后右键点击 Source Group 1 ,然后点击 Add Existing Files to Group …
(在工程下添加main.c文件)


⑥编译程序

二、stm32程序仿真调试

1.调试前的设置

①首先点击 魔法棒,然后在弹出的窗口内,点击 Debug,勾选 Use Simulator ,再选择 ULINK2/ME Cortex Debugger ,并点击 Settings 。


②确定一下Port是JTAG,Reset可以设置为Autodetect或SYSRESEETREQ,然后点击OK返回上一级窗口,再点击OK。

2.开始调试


总结

此次实验我学习了如何使用Keli,并且完成了简单的编译和仿真测试。

作业报告封面模版(物联20级)相关推荐

  1. c语言期末大作业报告,c语言大作业报告.docx

    Document serial number[UU89WT-UU98YT-UU8CB-UUUT-UUT108] Document serial number[UU89WT-UU98YT-UU8CB-U ...

  2. kaggle经典题--“泰坦尼克号”--0.8275准确率--东北大学20级python大作业开源(附详细解法与全部代码以及实验报告)

    kaggle经典题--"泰坦尼克号"--0.8275准确率--东北大学20级python大作业开源(附详细解法与全部代码以及实验报告) 前言 开发环境 一.导入包: 二.实验数据的 ...

  3. HTML5期末大作业:动漫人物介绍网站设计——柯南(5页) 含报告 HTML+CSS+JavaScript dw网页设计 web网页设计与开发

    HTML5期末大作业:动漫人物介绍网站设计--柯南(5页) 含报告 HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码 常见网页设计 ...

  4. 2021-04-07蓝牙AoA厘米级定位设备提供商:深圳核芯物联将精彩亮相IOTE 2021上海

    深圳核芯物联科技,公司拥有完全自主设计的高精度定位基站.算法引擎等核心技术产品,是国内首家量产AOA高精度定位设备的公司.核芯物联坚持创新和开放的理念,着力打造AoA定位技术为基础的应用生态,欢迎更多 ...

  5. 2022年顶封抗疫欢迎更多城市的生态合作伙伴加入核芯物联国产蓝牙AOA高精度亚米级定位生态解决方案展厅计划

    2022年顶封抗疫欢迎更多城市的生态合作伙伴加入核芯物联国产蓝牙AOA高精度亚米级定位生态解决方案展厅计划 核芯物联岳毅恒 ​ 深圳核芯物联科技有限公司 战略合作拓展总监 2022年的春天,并没有立刻 ...

  6. 核芯物联蓝牙AOA高精度亚米级精准定位产品英文版正式面向海外发布

    核芯物联蓝牙AOA高精度亚米级精准定位产品英文版正式面向海外发布请联系核芯曾哥咨询海外市场服务事项 核芯物联蓝牙AOA英文版正式面向海外发布

  7. 物联卡,纯流量卡,消费级物联网专用卡,这些关键词你听过吗?

    消费级物联网专用卡,俗称物联卡,又称纯流量卡,资费便宜,用途广泛,所以也成为近两年来特别火的一种联网流量卡. 2014年物联网卡还没有投入商业使用,物联网卡有专用APN和独立网元,是三大运营商为智能设 ...

  8. 火热物联网下,中国传感器的冷思考

    文章来源于传感器专家网,转载自物联传媒,图片来源于网络 近20年,移动互联网的发展催生物联网产业的发展.如今智能硬件层出不穷,从智能手环到智能手表,从智能盒子到智能家居,无不是在强化硬件的远程操控力. ...

  9. 敏捷物联——引领生产和服务创新

    文/李先银 2014年,德国向全球工业界提出了一个问题:如果将物联网及服务引入制造业,这个世界会变成什么样? 在经历了蒸汽机.电力和流水线生产,以及电子信息技术等3次工业革命后,人类将迎来以信息物理融 ...

  10. 智慧物联下主机加固安全解决方案分析

    近年来,随着物联网技术和互联网技术的日益发展,各种具有智能.自动.联网等智慧系统的研究已在全球范围内广泛开展,以汽车.船舶.电梯.机器人.家电等行业的智能化已经成为全球的大势所趋.未来10-20年各种 ...

最新文章

  1. T-SQL查询进阶--深入理解子查询
  2. AM-资产冻结与停用
  3. 编写程序将一行英文中指定的字符串替换为另一字符串后输出。注意:查找指定字符串_python 3 笔记(一)...
  4. 岗位内推 | 微软亚洲互联网工程院自然语言处理组招聘
  5. 收集10个顶级的CSS3代码生成器
  6. 回归模型和分类模型的区别
  7. 几行代码创建属于你自己的SQL数据库
  8. dom jaxp详解
  9. 酒后谈IT,那些术语大妈都能秒懂!
  10. MYSQL安装+Mysql-front 注册码
  11. html の第一天(上)-----适合新手入门前端
  12. 53.大数据之旅——java分布式项目14-信息检索技术之Lucene,Solr
  13. IoT开源平台Thingsboard二次开发研究
  14. 图片横向滚动 01-兼容IE8和Chrome浏览器
  15. 前端面试题(背题中)
  16. 剑灵服务器延迟时间在哪看,《剑灵怎么看延迟》,剑灵怎么显示ping
  17. c语言程序教师节祝福,2015年教师节祝福语(大学生适用)
  18. vue整合videojs插件,播放RTMP,hls直播视频
  19. sv中program和module区别
  20. 【互联网的恩怨情仇】盘点2015年互联网十大撕逼事件

热门文章

  1. 智能穿戴及传感器调研
  2. vm内核参数之缓存回收drop_caches
  3. Word批量替换勾选框
  4. 上传文件框在firefox浏览器中显示路径不全的解决方法
  5. Dynamics AX2012 General ledger
  6. 关于测量物体空间位置的装置
  7. 程序员必备技能之上传代码(Github篇)
  8. element技巧之element的dialog弹出框可拖拽、可拉伸、可全屏并处理边界问题
  9. 教大家通过node爬取b站api数据
  10. VS无法定位程序输入点于动态链接库