多看多学

  • 一、安装及配置环境
    • 01 型号分类及缩写
    • 02 资料共享
    • 03 安装器件支持包
    • 04 Keil简单设置
  • 二、简单程序编译
    • 01 新建工程
    • 02 配置环境
    • 03 添加源文件
    • 04 设置仿真器模式
    • 05 编译调试
    • 06 分析Hex文件
  • 三、中值滤波及程序设计
    • 01 中值滤波
    • 02 流程框图
    • 03 程序设计
  • 四、总结
  • 参考资料

一、安装及配置环境

01 型号分类及缩写

缩写 释义 Flash容量 型号
LD_VL 小容量产品超值系列 16~32K STM32F100
MD_VL 中容量产品超值系列 64~128K STM32F100
HD_VL 大容量产品超值系列 256~512K STM32F100
LD 小容量产品 16~32K STM32F101/102/103
MD 中容量产品 64~128K STM32F101/102/103
HD 大容量产品 256~512K STM32F101/102/103

这里我们选用STM32F103C8T6,小容量产品

02 资料共享

首先需要下载安装mdk5软件和stm32包,这里附带配置MDK所需要的的包。
资料下载:https://pan.baidu.com/s/1SqKyKr5Fsl_9gBJi8aVxTw,
提取码:8kzh,链接里压缩包的解压密码:32

03 安装器件支持包

1、打开MDK,找到Pack Installer

2、选择你需要的Pack进行安装(图片仅为示例)。这种方法下载比较慢,建议在官网下载好支持包,直接在本地点击安装即可。

正版的Keil需要付费,如果个人学习需要,可以自行百度使用破解版

04 Keil简单设置

1、安装好Keil后,需要进行一些简单的设置。首先点击Edit→Configuration…,或者直接点工具栏的扳手图标,进入设置界面。

2、设置编码形式为Chinese GB2312(Simplified),不同编码形式主要体现在对中文支持不同,我们在打开其他文件发现中文乱码时,可以更改编码格式才能使乱码变为中文。然后设置Tab size为4。


二、简单程序编译

01 新建工程

双击打开keil,点击菜单栏Project–>New μVision Project

新建项目,在弹窗中选择工程目录,新建名为test的工程文件。

02 配置环境

选择设备,这里我们选用STM32F103C8T6,小容量产品

选择运行环境

03 添加源文件

右键单击Source Group 1,选择Add New Item to Group,添加Asm File (.s)文件,命名为TEST并保存

为其添加如下代码

 AREA MYDATA, DATAAREA MYCODE, CODEENTRYEXPORT __main__mainMOV R0, #10MOV R1, #11MOV R2, #12MOV R3, #13;LDR R0, =func01BL   func01;LDR R1, =func02BL   func02BL    func03LDR LR, =func01LDR PC, =func03B .func01MOV R5, #05BX LRfunc02MOV R6, #06BX LRfunc03MOV R7, #07MOV R8, #08   BX LR

04 设置仿真器模式

点击菜单中的Project,找到Options for Target ‘Target 1’并点击,选择Debug–>Use Simulator,将Dialog DLL以及Parameter处修改为自己选择的设备,OK

05 编译调试


可以发现寄存器R5~8和预设的值一样

06 分析Hex文件

Hex 全称 (Intel HEX)文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。大多数EPROM编程器或模拟器使用Intel HEX文件。在Linux中安装hexedit,分析hex文件内容

:020000040800F2
:1000000000060020ED000008F5000008F7000008D9
:10001000F9000008FB000008FD00000800000000D7
:1000F00009480047FEE7FEE7FEE7FEE7FEE7FEE70A
:10010000FEE7FEE7FEE7FEE704480549054A064B21
:1001F000194948600846406848600846406840F42D
:10020000806048600846406820F47C1048600846DA
......
:10021000406840F4E81048600846006840F080708C
:10022000086000BF0C48006800F000700028F9D09A
:100230000948406820F003000749486008464068C4
:1002400040F00200486000BF0348406800F00C0026
:100250000828F9D10CBD0000001002400020024027
:1002600010B51348006840F00100114908600846C5
:100270004068104908400E494860084600680E4929
:1002800008400B4908600846006820F48020086098
:100290000846406820F4FE0048604FF41F00886064
:1002A000FFF76AFF4FF000600449086010BD0000CE
:1002B000001002400000FFF8FFFFF6FE08ED00E02E
:0400000508000135B9
:00000001FF

第一行可以看作0x02 0x00 0x00 0x04 0x08 0x00 0xF2,其前四个字节和最后一个字节有特殊含义。中间为数据

  • 第一个字节0x02表示本行数据的长度;

  • 第二、三字节0x00 0x00表示本行数据的起始地址;

  • 第四字节表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05;

    • ‘00’ Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录
    • ‘01’ End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾
    • ‘02’ Extended Segment Address Record: 用来标识扩展段地址的记录
    • ‘03’ Start Segment Address Record:开始段地址记录
    • ‘04’ Extended Linear Address Record: 用来标识扩展线性地址的记录
    • ‘05’ Start Linear Address Record:开始线性地址记录
  • 然后是数据0x08 0x00,最后一个字节0xF2为校验和。

三、中值滤波及程序设计

01 中值滤波

中值滤波是一种非线性数字滤波器技术,经常用于去除图像或者其它信号中的杂讯。这个设计思想就是检查输入信号中的采样并判断它是否代表了信号,使用奇数个采样组成的观察窗实现这项功能。观察窗口中的数值进行排序,位于观察窗中间的中值作为输出。然后,丢弃最早的值,取得新的采样,重复上面的计算过程。

02 流程框图

03 程序设计

     AREA SORT,CODE,READONLY    ;定义一个代码段ENTRY                       MOV R0,#9                  ;需要排序的个数,为奇数LDR R2,=0X40000000           ;R2为原始数据的起始位置SUB R1,R0,#1MOV R4,#4MLA R3,R1,R4,R2            ;R3为原始数据的结束地址SUB R4,R3,#4               ;R4为原始数据的倒数第二个数的地址
LOOP1   ADD R5,R2,#4               ;R5为内循环的起始地址
LOOP2   LDR R6,[R2]LDR R7,[R5]CMP R6,R7                  ;比较交换,从小到大排序STRHI R6,[R5]STRHI R7, [R2]ADD R5,R5,#4               ;修改内循环地址CMP R5, R3                 ;内循环结束比较STRHI R6,[R5]BLS LOOP2ADD R2,R2,#4               ;修改外循环地址CMP R2,R4                  ;外循环结束比较BLS LOOP1LDR R2, =0x40000000MOV RO,RO,LSR #1MOV R4, #4MLA R3,RO,R4,R2LDR R1,[R3]                ;找到中间那个数并赋给R1MOV RO, #100END

相关命令说明
AREA命令:AREA 命令指示汇编器汇编一个新的代码段或数据段。段是独立的、指定的、不可见的代码或数据块,它们由链接器处理。

格式如下:AREA 段名,段属性1,段属性2,段属性3
例如:AREA STACK, NOINIT, READWRITE, ALIGN=3

SPACE命令:SPACE 命令保留一个用零填充的存储器块。
ENTRY命令:声明整个程式的入口点,入口点有且仅有一个。

四、总结

第一次接触汇编语言,同时学习了hex源文件的内容要求。对于初学者汇编语言并不友好,有一些语法还是不能熟练使用。通过此次简单练习实验学习了Keil软件。

参考资料

1、stm32自学视频(非常推荐)
2、ARM开发
3、完成一个基于STM32汇编程序的编写
4、基于MDK创建汇编实现LED闪烁

搭建Keil编程环境,ARM汇编语言编程入门实践相关推荐

  1. 树莓派ARM汇编语言编程十讲(第1讲)

    内容简介 树莓派单板机(Raspberry Pi Single Computer)是一种极了不起的产品,用户可以以非常低的成本获得一个Linux环境并带GPIO硬件扩展的迷你计算机系统.新一代树莓派4 ...

  2. ARM汇编语言编程-Keil环境搭建及STM32程序的编写

    目录 一.keil环境搭建 1.keil安装 2.注册LIC 3.支持包安装 二.STM32程序 1.新建工程 2.配置环境 三.总结 一.keil环境搭建 推荐百度网盘下载mdk531 mdk31安 ...

  3. 利用keil完成ARM汇编语言编程入门实践

    文章目录 一.安装keil软件 1.下载安装包 2.安装keil 3.安装stm32 pack 二.简单的stm汇编语言的编程 1.新建工程项目 2.新建main.c文件 3.编译 4.stm32仿真 ...

  4. ARM汇编语言编程入门实践

    文章目录 一.keil的安装 二.安装stm32 pack 三.keil 的简单设置 四.基于STM32汇编程序的编写 4.1 新建工程 4.2 新建test.s文件 4.3 编译程序 4.4 分析H ...

  5. 【嵌入式系统开发05】ARM汇编语言编程入门实践

    本文目的是主要介绍如何搭建并配置Keil嵌入式开发环境,完成一个基于STM32汇编程序的编写.记录build生成的 hex文件各段的大小,了解Hex文件格式及其前8个字节内容含义,学习在没有硬件条件下 ...

  6. ARM 汇编语言编程学习笔记(1)

    0.1.Thumb指令集 Thumb指令集是ARM指令集的子集,其性能更低,但是代码密度更高,功耗更低. Thumb指令集分为Thumb-1指令集和Thumb-2指令集,其中Thumb-1指令集是16 ...

  7. 为MM32F3277G9P开发板搭建keil开发环境(包含J-Link下载)十七届智能车

    今天给智能车赛的板子搭建环境折腾了一天,遇到一些坑,写个文章给后来人参考吧. 1.遇到的第一个困难是找器件库,我一开始去灵动的官网(上海灵动微电子股份有限公司 (mindmotion.com.cn), ...

  8. 搭建keil开发环境,完成一个基于STM32汇编程序的编写

    一.环境配置与搭建 1.准备安装 下面附上百度网盘链接,请自行下载: mdk531的安装: 链接:https://pan.baidu.com/s/1ttrDhv6kXgAvPiYINf9iGw 提取码 ...

  9. 阿里云服务器搭建python web环境_《Python入门》Linux 下 Python Web开发环境搭建笔记-阿里云开发者社区...

    之前写过 Windows 7下Python Web开发环境搭建笔记,今天写一下在Linux系统下搭建Python Web的开发测试环境. 我使用的系统是:ubuntu 14.04 server,根据个 ...

最新文章

  1. Google 出品的 Java 编码规范,权威又科学,强烈推荐
  2. SAP S4HANA如何取到采购订单ITEM里的'条件'选项卡里的条件类型值?
  3. windows下 sbulime text 安装less2css踩的几个坑
  4. java8默认垃圾收集器_Java 8中最快的垃圾收集器是什么?
  5. 【流媒体FLV封装协议】
  6. cos大乱斗服务器维护,《COS大乱斗》服务器数据互通公告
  7. 交流磁路matlab,严格地说,交流磁路计算应该用磁滞回线。
  8. html背景图片只显示一张图片,img只显示图片一部分 或 css设置背景图片只显示图片指定区域(示例代码)...
  9. [Android] TabLayout设置下划线(Indicator)宽度
  10. Windows 下 Redis 服务无法启动,错误 1067 进程意外终止解决方案
  11. 普林斯顿微积分读本篇一:函数
  12. pytorch版crnn网络框架
  13. 汉字风格迁移篇--基于生成对抗网络的无监督字体风格转换模型
  14. 没想到印度年轻人这么惨!我们知足吧!
  15. python怎么过滤标点符号大全_python 过滤标点符号
  16. 电脑双系统怎么删除一个呢?教你快速删除
  17. vue结合elementUI,MinUi
  18. JavaScript防流量劫持
  19. 你富不过马云,但要说比惨你也未必比的过
  20. BAT这样的大公司为什么面试经常拿ThreadLocal考验求职者

热门文章

  1. 判断一个年份是否为闰年(详解)
  2. portainer添加mysql
  3. ChatGPT神奇应用:无需美术功底快速生成高清艺术插图
  4. 微信小程序组件使用接口传值不统一的解决方案
  5. Android应用程序安装过程浅析
  6. Form表单实现异步的提交
  7. Chrome扩展开发指南
  8. MMKV集成与原理,挥泪整理面经
  9. 有关SEI 补充增强信息
  10. 大学网络营销课程精简知识点