简单stm32程序编写以及调试

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

简单stm32程序编写以及调试



一.环境配置

1.MDK的安装

MDKMicrocontroller Development Kit是针对ARM处理器特别是Cortex-M内核处理器的最佳开发工具


① 软件包的下载

首先需要下载安装mdk5软件和stm32包

① MDK安装包
② stm32相关包
③ MDK破解软件

链接https://pan.baidu.com/s/123ET4Ch8t6GcpNLMosfHMQ
提取码1234

下载压缩包解压后进行后面的步骤

② MDK的安装


(1).打开mdk531.exe文件点击下一步
请添加图片描述

(2).选择安装位置请添加图片描述

(3).填写注册信息请添加图片描述

请添加图片描述

(4).点击安装
请添加图片描述

(5).完成安装请添加图片描述

(6).点击OK后鼠标会变成转圈圈的因为正在进行在线安装各种pack但会安装失败不用着急右上角关掉窗口下面开始手动安装pack包。请添加图片描述

2. MDK的注册

(1).管理员(必须以管理员方式打开否则后面无法完成激活)方式打开keil复制cid
请添加图片描述
请添加图片描述

(2).打开keygen_new2032.exe文件
请添加图片描述

(3).打开第一步辅助的CID粘贴到对应的位置
按图上选择target和版本后点击Generate生成激活码
请添加图片描述

(4).回到keil把激活码粘贴上去注册成功

请添加图片描述

请添加图片描述

3.stm32 pack的安装

(一).打开Keil.STM32F1xx_DFP.2.1.0.pack文件请添加图片描述

(二).点击next开始安装
请添加图片描述

(三).点击finishi完成安装
请添加图片描述

4.keil的简单设置

1首先点击Edit→Configuration进入设置界面。请添加图片描述

2设置编码形式为ChineseGB2312(Simplified)如果不设置你从其它地方粘贴过来的代码含有中文的话就会出现乱码然后设置Tab size为4。

请添加图片描述

二.一个stm32简单程序的编译

1.新建一个工程

(1)打开keil uVision5,并新建一个工程
请添加图片描述

(2).建立一个名为Test的工程请添加图片描述

(3).选择STM32F103C8芯片点击OK请添加图片描述

(4).选择环境的配置点击OK后完成工程的创建请添加图片描述

2.新建一个.s文件


(1) 工程创建完毕后对Source Group文件点击右键再点击ADD new item to group
请添加图片描述

(2) 选择文件类型添加文件
请添加图片描述

(3).键入代码

 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

3.编译

点击左上角编译按钮开始编译程序此时0错误0警告表示编译成功。
请添加图片描述

4.stm32程序仿真调试

(一)调试设置
1.点击魔法棒设置output一栏选择生成HEX文件
请添加图片描述

2.点击 Debug 界面。选择 Use Simulator 代表选择仿真器进行调试同时勾选Run to main()防止程序不运行主函数而进入死循环默认情况是勾选了的在下方的Dialog DLL一栏中覆写DARMSTM.DLL在一旁的Patameter中覆写-pSTM32F103C8用于设置支持STM32F103C8的软硬件仿真。

请添加图片描述

3.确定一下Port是JTAGReset可以设置为Autodetect或SYSRESEETREQ然后点击OK返回上一级窗口再点击OK。
请添加图片描述

(二)开始调试
1.选中带有红色d的放大镜开始调试在②处就是仿真调试所需要的调试工具。请添加图片描述

2.调试运行
请添加图片描述

运行结果结果符合预期寄存器 R5R6R7R8 的值和程序设置一致。

3.单步调试

  • 1.进入调试状态后转到TEST.s文件分别右键R5、R6、R7、R8->Add R to Watch 不选择Watch1选择其他观察窗口也行意义一样。如果想观察其他寄存器也是一个道理
    请添加图片描述

  • 2.在内容变化之前打断点在右下角窗口观察之前显示的寄存器的变化
    请添加图片描述
    请添加图片描述

三.分析Hex文件

hex文件在项目目录中的object里面以项目名.hex命名

1.文件内容:

:020000040800F2
:1000000000060020ED000008F5000008F7000008D9
:10001000F9000008FB000008FD00000800000000D7
:10002000000000000000000000000000FF000008C9
:10003000010100080000000003010008050100089C
:100040000701000807010008070100080701000870
:100050000701000807010008070100080701000860
:100060000701000807010008070100080701000850
:100070000701000807010008070100080701000840
:100080000701000807010008070100080701000830
:100090000701000807010008070100080701000820
:1000A0000701000807010008070100080701000810
:1000B0000701000807010008070100080701000800
:1000C00007010008070100080701000807010008F0
:1000D00007010008070100080701000807010008E0
:1000E00007010008070100080701000809488047C8
:1000F00009480047FEE7FEE7FEE7FEE7FEE7FEE70A
:10010000FEE7FEE7FEE7FEE704480549054A064B21
:1001100070470000FD0100085502000800000020A3
:1001200000060020000200200002002070477047F7
:100130007047000080B500F001F880BD82B041F248
:1001400004000021C4F202000191009150F8041C47
:1001500041F4803140F8041C50F8041C01F40031D3
:100160000091019901310191009919B90199B1F5F5
:10017000A06FF1D150F8041C890354BF0021012164
:1001800000910099012936D142F20001C4F2020126
:100190000A6842F010020A600A6822F003020A604C
:1001A0000A6842F002020A600168016001680160A9
:1001B000016841F480610160016821F47C110160F3
:1001C000016841F4E811016050F8041C41F08071AD
:1001D00040F8041C50F8041C8901FBD5016821F08B
:1001E00003010160016841F002010160016801F052
:1001F0000C010829FAD102B07047000080B541F225
:100200000000C4F202000168002241F00101016017
:100210004168CFF6FF021140416001684FF6FF725E
:10022000CFF6F66211400160016821F4802101607F
:10023000416821F4FE0141604FF41F018160FFF726
:1002400079FF4EF60850CEF200004FF000610160D9
:1002500080BD00004FF00A004FF00B014FF00C0280
:100260004FF00D0300F009F800F00AF800F00BF869
:10027000DFF81CE0DFF81CF0FEE74FF005057047E3
:100280004FF0060670474FF007074FF00808704719
:080290007B0200088702000850
:04000005080000ED02
:00000001FF

2.文件大小

在这里插入图片描述

3.内容分析扩展线性地址记录:020000040800F2

  • 扩展线性地址记录hex 文件的第一排十六进制也叫作 32 位地址记录或 HEX386 记录
  • 这些记录包含数据地址的高 16 位
    扩展线性地址记录总是有两个数据字节外观如下这里我通过标记方便对应原始数据
  • 当一个扩展线性地址记录被读取存储于数据域的扩展线性地址被保存它被应用于从 Intel HEX 文件读取来的随后的记录
  • 线性地址保持有效直到它被另外一个扩展地址记录所改变
  • 通过把记录当中的地址域与被移位的来自扩展线性地址记录的地址数据相加获得数据记录的绝对存储器地址
内容描述
:020000040800F2扩展线性地址记录
02这个记录当中数据字节的数量
0000地址域对于扩展线性地址记录,这个域总是 0000
04记录类型 04 (扩展线性地址记录)
0800是地址的高 16 位
F2是这个记录的校验和计算方法01h + NOT(02h + 00h + 00h + 04h + 08h + 00h)

4.内容分析数据分析

Intel HEX文件由任意数量以回车换行符结束的数据记录组成比如第一行数据记录

:10000000600600206D0100087501000877010008F6

内容描述
10记录当中数据字节的数量
0000数据将被下载到存储器当中的地址
00记录类型(数据记录)
600600206D0100087501000877010008数据
F6是这个记录的校验和

5.内容分析文件尾

在文件的最后一排是一个文件的结束标志END OF FILE RECORD
:00000001FF

内容描述
00记录的长度为 0
0000LOAD OFFSET为0000
01TYPE 01
FF校验和为FF

四.总结

对于完全没接触过stm32实物的时候模拟仿真调试是一个很好的方法来熟悉或者掌握有关的流程。对于keil的调试来说只能一步一步的进行调试过程需要提前在需要的地方打上断点。如果要观察相应寄存器的变化的时候还需要提前调出观察窗口跟随调试过程一步一步观察不同寄存器的变化过程。整个流程下来有很多细节需要掌握否则在后面的过程中很有可能会因为这样那样的问题报错。期望在拿到实物后能对keil的理解以及掌握的更好。

五.参考

https://blog.csdn.net/ChenJ_1012/article/details/120520933


https://blog.csdn.net/qq_45659777/article/details/120496577

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6