IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 搭建Keil编程环境,ARM汇编语言编程入门实践 -> 正文阅读

[嵌入式]搭建Keil编程环境,ARM汇编语言编程入门实践

一、安装及配置环境

01 型号分类及缩写

缩写释义Flash容量型号
LD_VL小容量产品超值系列16~32KSTM32F100
MD_VL中容量产品超值系列64~128KSTM32F100
HD_VL大容量产品超值系列256~512KSTM32F100
LD小容量产品16~32KSTM32F101/102/103
MD中容量产品64~128KSTM32F101/102/103
HD大容量产品256~512KSTM32F101/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, DATA
	
 AREA MYCODE, CODE
	ENTRY
	EXPORT __main

__main
	MOV R0, #10
	MOV R1, #11
	MOV R2, #12
	MOV R3, #13
	;LDR R0, =func01

	BL	func01
	;LDR R1, =func02
	BL	func02
	
	BL 	func03
	LDR LR, =func01
	LDR PC, =func03
	B .
		
func01
	MOV R5, #05
	BX LR
	
func02
	MOV R6, #06
	BX LR
	
func03
	MOV R7, #07
	MOV 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,#1
		MOV R4,#4
		MLA 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 LOOP2
		ADD R2,R2,#4               ;修改外循环地址
		CMP R2,R4                  ;外循环结束比较
		BLS LOOP1
		LDR R2, =0x40000000
		MOV RO,RO,LSR #1
		MOV R4, #4
		MLA R3,RO,R4,R2
		LDR R1,[R3]                ;找到中间那个数并赋给R1
		MOV RO, #100
		END

相关命令说明
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闪烁

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:58:04  更:2022-10-08 20:59:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 16:34:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码