OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 20072|回复: 34

Cortex-M3汇编实践分享(原创)

  [复制链接]

3

主题

24

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2014-10-29
在线时间
4 小时
发表于 2015-1-16 11:49:26 | 显示全部楼层 |阅读模式
之前发了个汇编语言编写的工程,里面代码一大堆,但是如果真的直接去啃这份代码相信还是比较麻烦的,而且帖子发过之后反应也不是很大,所以决定把写这个程序的过程也分享出来,图文并茂希望大家有用,算是我在论坛潜水这么久的回报吧。

编写过程中有参考的一些文档也一并上传,今天先奉上第一章内容(后面的还没写

Cortex-M3_权威指南_EN.pdf

5.66 MB, 下载次数: 11325

ARMv7M参考手册.pdf

2.42 MB, 下载次数: 4360

浅谈STM32汇编(Wizard).pdf

5.25 MB, 下载次数: 13823

Cortex-M3汇编实践.pdf

1.09 MB, 下载次数: 4043

jpstm32-asm-first.zip

37.67 KB, 下载次数: 1827

酒逢知己千杯少,学有良师欢乐多。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2013-6-1
在线时间
0 小时
发表于 2015-1-16 12:27:30 | 显示全部楼层
回复 支持 1 反对 0

使用道具 举报

3

主题

24

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2014-10-29
在线时间
4 小时
 楼主| 发表于 2015-1-16 11:51:50 | 显示全部楼层
1、2、3号附件是我得参考文档
借鉴了3号文档里的一些内容,在此感谢原作者
4号是我得文档,请多关照
5号是对应的程序代码
酒逢知己千杯少,学有良师欢乐多。
回复 支持 1 反对 0

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-1-16 13:03:50 | 显示全部楼层
楼主牛逼啊,搞汇编,谢谢分享!

原子哥的确要给楼主一个精华,哈哈
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

3

主题

24

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2014-10-29
在线时间
4 小时
 楼主| 发表于 2015-1-16 13:15:00 | 显示全部楼层
回复【4楼】八度空间:
---------------------------------
我是有强迫症 

当初为了看懂启动代码 学了ARMv7指令

为了高清楚指令怎么用 又开始用汇编写程序

写了基本配置又想写点外设 然后就这么走上了不归路
酒逢知己千杯少,学有良师欢乐多。
回复 支持 反对

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4480
金钱
4480
注册时间
2013-4-22
在线时间
337 小时
发表于 2015-1-16 14:10:24 | 显示全部楼层
其实汇编也不算难,主要是那堆指令什么的记不住
回复 支持 反对

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2012-6-28
在线时间
17 小时
发表于 2015-1-16 14:35:19 | 显示全部楼层
是应该好好学,用在快速程序。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-1-16 15:35:39 | 显示全部楼层
回复【5楼】三两二锅头:
---------------------------------
跑起来效率肯定杠杠的,呵呵
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-1-16 22:45:07 | 显示全部楼层
必须的,cool
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

27

主题

308

帖子

1

精华

高级会员

Rank: 4

积分
774
金钱
774
注册时间
2012-6-19
在线时间
19 小时
发表于 2015-1-17 09:30:21 | 显示全部楼层
这种好帖子,不顶都不好意思了!
回复 支持 反对

使用道具 举报

27

主题

308

帖子

1

精华

高级会员

Rank: 4

积分
774
金钱
774
注册时间
2012-6-19
在线时间
19 小时
发表于 2015-1-17 11:41:03 | 显示全部楼层
看了一下,写的很好。再来一个驱动跑马灯之类的入门程序就更好了。
回复 支持 反对

使用道具 举报

3

主题

24

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2014-10-29
在线时间
4 小时
 楼主| 发表于 2015-1-19 09:12:24 | 显示全部楼层
回复【11楼】602647310:
---------------------------------
后面会有的  中断设置  时钟配置  定时器使用  还有部分外设  上次分享的代码都写了只是没有跟文档
酒逢知己千杯少,学有良师欢乐多。
回复 支持 反对

使用道具 举报

3

主题

24

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2014-10-29
在线时间
4 小时
 楼主| 发表于 2015-1-19 09:13:35 | 显示全部楼层
回复【6楼】三叶草:
---------------------------------
其实常用的就那么几条  大概记着有哪些指令用的时候查手册  没有人刻意去记指令的 呵呵
酒逢知己千杯少,学有良师欢乐多。
回复 支持 反对

使用道具 举报

3

主题

24

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2014-10-29
在线时间
4 小时
 楼主| 发表于 2015-1-19 09:16:28 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
原子哥  多谢鼓励!
酒逢知己千杯少,学有良师欢乐多。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2015-4-29
在线时间
1 小时
发表于 2015-4-29 16:23:51 | 显示全部楼层
回复【14楼】三两二锅头:
---------------------------------
看了楼主的帖子, 受益匪浅.
不过,关于那个L6314W的警告, 可以直接用下面连接器命令去除,不用楼主那么大费周章, 以后多交流.
;------------------------------------------------------------------------
--diag_suppress=tag[,tag,...]
此选项禁止所有具有特定标签的诊断消息。
语法
--diag_suppress=tag[,tag,...]
其中 tag 是必须禁止的诊断消息的编号列表(以逗号分隔)。
示例
若要禁止显示编号为 L6314W 和 L6305W 的警告消息,请使用以下命令:
armlink --diag_suppress=L6314,L6305 ...
回复 支持 反对

使用道具 举报

3

主题

24

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2014-10-29
在线时间
4 小时
 楼主| 发表于 2015-5-28 10:36:03 | 显示全部楼层
回复【15楼】afeibfp:
---------------------------------
嗯,学习了,以后多交流,最近一直在忙项目这个贴一直都没更
酒逢知己千杯少,学有良师欢乐多。
回复 支持 反对

使用道具 举报

3

主题

24

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2014-10-29
在线时间
4 小时
 楼主| 发表于 2015-5-28 10:45:51 | 显示全部楼层
第二章的内容也放到这里,第三章暂时是没时间写了

jpstm32-asm-startup.zip

40.29 KB, 下载次数: 1095

Cortex-M3汇编实践(追加第二章).pdf

1.42 MB, 下载次数: 1521

酒逢知己千杯少,学有良师欢乐多。
回复 支持 反对

使用道具 举报

19

主题

107

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2015-3-5
在线时间
44 小时
发表于 2015-5-28 11:13:41 | 显示全部楼层
楼主厉害!!
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2016-1-18
在线时间
0 小时
发表于 2016-1-18 20:26:16 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

2

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2015-12-29
在线时间
13 小时
发表于 2016-1-18 21:12:14 | 显示全部楼层
谢谢分享   现在写汇编的人很少了    汇编程序编写执行效率很高  这个我以前见识过  
路漫漫,书多多,stm32的朋友请加群383260480交流,一起进步
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2016-4-3
在线时间
30 小时
发表于 2016-4-3 00:42:50 | 显示全部楼层
谢谢楼主的分享,期待楼主续集.
回复 支持 反对

使用道具 举报

74

主题

334

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
436
金钱
436
注册时间
2015-5-28
在线时间
144 小时
发表于 2016-7-16 17:46:44 | 显示全部楼层
谢谢楼主分享
最近爱上了stm32
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2016-7-17
在线时间
0 小时
发表于 2016-7-17 23:04:06 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

19

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2015-12-6
在线时间
47 小时
发表于 2017-1-10 23:01:14 | 显示全部楼层
楼主写的真好,我也要学习一下
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-7
在线时间
4 小时
发表于 2017-2-7 12:14:24 | 显示全部楼层
您好,我想在linux环境下开发stm32,请问启动代码和中断向量这两个汇编代码怎么写
回复 支持 反对

使用道具 举报

3

主题

24

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2014-10-29
在线时间
4 小时
 楼主| 发表于 2017-2-9 17:34:36 | 显示全部楼层
georgemxx 发表于 2017-2-7 12:14
您好,我想在linux环境下开发stm32,请问启动代码和中断向量这两个汇编代码怎么写

你可以参考startup.h里面的向量表部分,把你的向量表定义好,在编译链接的时候吧对应的目标文件映射到芯片flash的起始地址(把向量表的起始地址设置为程序的入口)应该就可以了,linux下我只玩过AVR  stm32没搞过 估计套路应该一样吧
酒逢知己千杯少,学有良师欢乐多。
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2017-2-7
在线时间
4 小时
发表于 2017-2-11 17:02:14 | 显示全部楼层
三两二锅头 发表于 2017-2-9 17:34
你可以参考startup.h里面的向量表部分,把你的向量表定义好,在编译链接的时候吧对应的目标文件映射到芯 ...

我这两天弄出来了,主要是makefile,startup.s,link script,vectors.S,这些弄好后就可以像在ide中那样写程序了,那您知道怎么在linux下下载程序到芯片中吗?
回复 支持 反对

使用道具 举报

3

主题

24

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2014-10-29
在线时间
4 小时
 楼主| 发表于 2017-2-13 09:21:34 | 显示全部楼层
georgemxx 发表于 2017-2-11 17:02
我这两天弄出来了,主要是makefile,startup.s,link script,vectors.S,这些弄好后就可以像在ide中那样 ...

应该有专门的工具,以前搞AVR的时候有个叫avrdude的东西,直接把命令写到makefile里面,然后直接下载的,stm32没搞过 不太清楚,好像有个stm32flash的工具  可以用串口下载
酒逢知己千杯少,学有良师欢乐多。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-8-3
在线时间
4 小时
发表于 2017-8-3 21:04:37 | 显示全部楼层
顶一个,学习
回复 支持 反对

使用道具 举报

25

主题

70

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
370
金钱
370
注册时间
2017-8-3
在线时间
38 小时
发表于 2017-8-4 00:04:16 | 显示全部楼层
谢谢分享,,,,,,,,
回复 支持 反对

使用道具 举报

2

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2017-6-23
在线时间
13 小时
发表于 2017-8-7 18:57:54 | 显示全部楼层
学习的动力就是移植NES,但下面的汇编要更换自己开发板的接线方法,完全找不着北,虽然作者已经写了很注释,楼主能帮忙看看假设我要把FC的三个手柄信号线改到PA9,PA10, PA11该怎么做
joy0_W                ;4016  手柄1+选通
;----------------------------------------------------------------------------
        tst r0,#1
        orr lr,#0x01                ;lr最低位置1防止进入arm状态
        bxne lr

        ldr r0,=0x40011408 ; 端口输入数据寄存器(GPIOD_IDR)0x40011408        按键端口
        ldr r0,[r0]                 ;        PD9    11     12    13    14    15设置成的输入          按下为0
                                  ;   key 6     1      2         3           4         5

                        ;        ((右  <<7)|(左  <<6)|(下  <<5)|(上  <<4)|Start<<3)|Select<<2)|(B  <<1)| A   )
                        ;                         5                 3                                                                1                  2                        4        按键编号
       
        lsr r0,r0,#8         ;>>8  只要高8位
        rsb r0,r0,#0xff   ; R0 = #0xff-R0      反向减法?   取反                  nes需要按下为1
                                        ;                        76543210
                                        ;                        54321 6                按键编号
                                        ;                        11111010                8位数据

        and r2,r0,#0x80   ;按键5 在对应位

        and r1,r0,#0x20   ;按键3
        orr r2,r1,lsl#1         ;                        <<1

        and r1,r0,#0x8 ;按键1
        orr r2,r1                ;按键1 在对应位

        and r1,r0,#0x10 ;按键2
        orr r2,r1,lsr#2 ;        >>2

        and r1,r0,#0x40 ;按键4
        orr r2,r1,lsr#6  ;    >>6                 r2是键值
        orr r2,r2,#0x100000                  ;20位表示控制器在位

        str r2,joy0serial
;        orr lr,#0x01                ;lr最低位置1防止进入arm状态
        bx lr
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2019-1-8
在线时间
15 小时
发表于 2019-1-8 16:24:36 | 显示全部楼层
顶贴,萌新路过
回复 支持 反对

使用道具 举报

5

主题

129

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
432
金钱
432
注册时间
2020-5-8
在线时间
66 小时
发表于 2020-10-10 09:53:41 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
177
金钱
177
注册时间
2019-7-29
在线时间
17 小时
发表于 2021-3-4 16:47:40 | 显示全部楼层
谢谢楼主分享!
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2018-8-9
在线时间
9 小时
发表于 2021-10-4 09:12:27 | 显示全部楼层
谢谢!!分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 07:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表