OpenEdv-开源电子网

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

【疑问】STM32其实是16位单片机?

[复制链接]

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2018-11-10
在线时间
21 小时
发表于 2019-3-22 13:11:20 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 flwjn 于 2019-3-22 13:29 编辑

最近在用F407,事事不顺。
刚搞定时钟,又遇到原来的GPIO位操作头文件不能用了的问题。
发现GPIO寄存器里,比F103少了个BRR。
偷懒,找了个现成的头文件用。说实话,并没看懂。
所以,实测了一下,感觉有点诡异。
突然有了兴致。
先用F407的BSRR重新定义了头文件。
测试却发现,高低电平的保持时间不一致。
强迫症表示不能接受。。
测了下,电平的保持时间刚好是2倍关系。
感觉是和数据的位数有关系。
看了下资料,GPIO 寄存器8位、16位、32位都可以操作。
重定义了一下寄存器的地址。将BSRR(32位)一分为二:BSR(16位)和BRR(16位)。
这次得到了,想要的结果。
不过,我就想啊,如果进行8位的操作,IO的翻转是不是能更快。
然后就又定义了一下,分成:
BSRH、BSRL、BRRH、BRRL
测试结果,和16位的操作一样。

个人比较偏实践,理论不足。
就感觉上,这像是个16位单片机,兼容8位操作,但实际是16位操作。所以8位和16位的操作速度是一样的。
在进行32位操作时,其实是进行了2次16位操作,所以会比16位操作多用1倍的时间。
当然,也许内核是32位的,但由于某个瓶颈造成的表现。

*测试程序和波形。PA8引脚,GP PP SP100.


1.png
3组
22.png
1组
23.png
展开 24.png




最佳答案

查看完整内容[请看2#楼]

一般的n位元CPU的定义是General Purpose Register的位宽. 如果用外设的观点来评比, 就只能说您开心就好, 没有什么对或错. 两者没有一定的关联, 好CPU可以搭烂外设, 烂CPU也可以搭好外设. 看起来版主对STM32外设的速度不甚满意.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

259

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2317
金钱
2317
注册时间
2016-12-2
在线时间
354 小时
发表于 2019-3-22 13:11:21 | 显示全部楼层
一般的n位元CPU的定义是General Purpose Register的位宽.
如果用外设的观点来评比, 就只能说您开心就好, 没有什么对或错.
两者没有一定的关联, 好CPU可以搭烂外设, 烂CPU也可以搭好外设.
看起来版主对STM32外设的速度不甚满意.
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2018-11-10
在线时间
21 小时
 楼主| 发表于 2019-3-22 13:31:12 | 显示全部楼层
重新制作头文件后
11.png
12.png
回复

使用道具 举报

35

主题

560

帖子

2

精华

资深版主

Rank: 8Rank: 8

积分
17769
金钱
17769
注册时间
2018-3-3
在线时间
523 小时
发表于 2019-3-22 16:08:16 | 显示全部楼层
没探究过这种,帮顶
/*
*
*
*
*
*
*/
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2018-11-10
在线时间
21 小时
 楼主| 发表于 2019-3-23 09:06:44 | 显示全部楼层
sammy902583 发表于 2019-3-22 13:11
一般的n位元CPU的定义是General Purpose Register的位宽.
如果用外设的观点来评比, 就只能说您开心就好,  ...

有道理,标题这个问题,真没啥好纠结的。

不过,这里这个,同样是对BSRR寄存器操作,从对应的波形可以看出,高低电平的宽度不同。
按我原先的理解,总觉得高电平宽低电平窄才对。但事实相反。
就好像是,无论16位或32位的操作,都是一步就完成了。
但32位的操作结束后,需要更长的时间才能接受下一条指令。这又是怎么回事?

31.png

32.png
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-3-23 13:17:46 | 显示全部楼层
本帖最后由 edmund1234 于 2019-3-23 13:25 编辑

我猜你是的编译器的优化级别是设为0了, 其实这跟你说到的无关, 主要是ARM的立即数只是8位, 超过8位的就要用LDR(可以打开反汇编查看), 多了一指令周期, 所以你发现高低电平时间不一
你可以定义两个局部变量, 加register关键字, 分别把(1<<0)和(1<<8)赋值给这两变量, 然后用此两变量赋值给BSRR, 就不会有高低电平时间不一的问题了, 试试
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2018-11-10
在线时间
21 小时
 楼主| 发表于 2019-3-23 14:47:54 | 显示全部楼层
edmund1234 发表于 2019-3-23 13:17
我猜你是的编译器的优化级别是设为0了, 其实这跟你说到的无关, 主要是ARM的立即数只是8位, 超过8位的就 ...

好主意哦,我先去找指令集看看。仿真好像能看到汇编,再对照一下指令周期。
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-3-23 14:52:16 | 显示全部楼层
flwjn 发表于 2019-3-23 14:47
好主意哦,我先去找指令集看看。仿真好像能看到汇编,再对照一下指令周期。

LDR 是一条虚指令, 指令集可能找不到的, 但ARM的文档内容会找到
回复

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
发表于 2019-3-23 14:53:46 | 显示全部楼层
这么说51肯定是16单片机了, 因51有16位ADC
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2018-11-10
在线时间
21 小时
 楼主| 发表于 2019-3-23 23:34:28 | 显示全部楼层
edmund1234 发表于 2019-3-23 14:52
LDR 是一条虚指令, 指令集可能找不到的, 但ARM的文档内容会找到

多谢指点。
话说指令集我下午的时候搜了搜,没找到有带注解的。

之前,我都是用8位单片机,去年因为硬件资源不足,才用F103做了个小项目。
这个F407的开发板,上周六拿到手的,时钟用了3天才整出来,还是翻例程才发现缺少电源和Flash的配置,估计是因为系统时钟超过一定频率后,默认的电源和Flash的配置会跟不上。但也没有找到详细的说明。
可是库函数,我实在是用不惯。但cortex-m4的NVIC_TypeDef突然发现找不到,看来还有很多没有理解的地方。有意思。
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-3-23 23:48:29 | 显示全部楼层
flwjn 发表于 2019-3-23 23:34
多谢指点。
话说指令集我下午的时候搜了搜,没找到有带注解的。

ST官网有, 搜PM0214
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2018-11-10
在线时间
21 小时
 楼主| 发表于 2019-3-24 10:48:40 | 显示全部楼层
edmund1234 发表于 2019-3-23 23:48
ST官网有, 搜PM0214

原来如此。
代码
41.png
对应
42.png
波形
43.png
指令
44.png

好像浪费了不少时间,做了件没啥意义的事。
不过,现在不浑身难受了。
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-3-24 11:30:25 | 显示全部楼层
flwjn 发表于 2019-3-24 10:48
原来如此。
代码

能用一两天时间把一件事弄透了, 怎样可能是浪费?
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2018-11-10
在线时间
21 小时
 楼主| 发表于 2019-3-24 16:59:04 | 显示全部楼层
edmund1234 发表于 2019-3-24 11:30
能用一两天时间把一件事弄透了, 怎样可能是浪费?

哈哈哈。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 03:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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