你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Arm-none-eabi-gcc 编译 GPIO_IOToggle

[复制链接]
pythonworld 提问时间:2015-11-20 21:03 /
悬赏10ST金币已解决
本帖最后由 pythonworld 于 2015-11-20 21:10 编辑

板子是STM32F334R8-Nucleo用Arm-none-eabi-gcc 4.93编译成功,但是下载到板子上不能运行。
附上bin文件和Map文件和反汇编文件。启动文件用的是TrueStudio,
link文件也是。固件用的是STM32Cube_FW_F3_V1.3.0 希望对使用gcc了解的同学帮助。

最佳答案

查看完整内容

看你的汇编文件,灯貌似是PA5,延时了100ms。但是最重要的是,使用HAL_GPIO_Init之前没有打开GPIOA的时钟。在标准库中使用RCC_AXXClockCmd,不知道HAL用什么打开。 或者你打开时钟的代码在其他的地方。或者另外的原因。 如果还是有问题,可以使用gdb调试一下看看GPIOA相关的寄存器是否被设置了。
收藏 2 评论15 发布时间:2015-11-20 21:03

举报

15个回答
qianfan 回答时间:2015-11-20 21:03:28
2015-11-20 21:37:00屏幕截图.png
看你的汇编文件,灯貌似是PA5,延时了100ms。但是最重要的是,使用HAL_GPIO_Init之前没有打开GPIOA的时钟。在标准库中使用RCC_AXXClockCmd,不知道HAL用什么打开。
或者你打开时钟的代码在其他的地方。或者另外的原因。

如果还是有问题,可以使用gdb调试一下看看GPIOA相关的寄存器是否被设置了。

pythonworld 回答时间:2015-11-20 21:10:56
附件在这里。

Debug.zip

下载

67.76 KB, 下载次数: 7, 下载积分: ST金币 -1

qianfan 回答时间:2015-11-20 21:28:06
你那个反汇编文件谁给你看啊。好歹拿个C文件也行啊。这个反汇编文件没法看。
软件延时吗?软件延时的话记得加volatile。
pythonworld 回答时间:2015-11-20 21:35:58
C文件就是官方库里的例子,没有改动。

Inc.zip

下载

8.59 KB, 下载次数: 4, 下载积分: ST金币 -1

Src.zip

下载

17 KB, 下载次数: 5, 下载积分: ST金币 -1

moyanming2013 回答时间:2015-11-20 22:43:20
QianFan 发表于 2015-11-20 21:40
看你的汇编文件,灯貌似是PA5,延时了100ms。但是最重要的是,使用HAL_GPIO_Init之前没有打开GPIOA的时钟 ...

学习了。。。
pythonworld 回答时间:2015-11-22 17:56:42
终于解决了,更换连接文件后就可以了。不用HAL库带的Truestudio的连接文件。在GitHub上下载的Mbem里的连接文件就可以了。附上连接文件。

STM32F334R8_FLASH.zip

下载

1.28 KB, 下载次数: 10, 下载积分: ST金币 -1

ataudio 回答时间:2015-11-22 21:02:29
本帖最后由 ataudio 于 2015-11-22 21:03 编辑
pythonworld 发表于 2015-11-22 17:56
终于解决了,更换连接文件后就可以了。不用HAL库带的Truestudio的连接文件。在GitHub上下载的Mbem里的连接 ...

o(^▽^)o,配置型问题有时就是让人无处下手。解决起来又无比简单。
qianfan 回答时间:2015-11-29 14:15:44
pythonworld 发表于 2015-11-22 17:56
终于解决了,更换连接文件后就可以了。不用HAL库带的Truestudio的连接文件。在GitHub上下载的Mbem里的连接 ...

能给我两个链接我见看看吗?我用trueStudio的链接文件没问题啊 。
qianfan 回答时间:2015-11-29 14:16:03
pythonworld 发表于 2015-11-22 17:56
终于解决了,更换连接文件后就可以了。不用HAL库带的Truestudio的连接文件。在GitHub上下载的Mbem里的连接 ...

给我两份链接文件看看吧。
pythonworld 回答时间:2015-11-29 20:25:43
两个连接文件已经附上了。

Ld.zip

下载

2.96 KB, 下载次数: 6, 下载积分: ST金币 -1

qianfan 回答时间:2015-12-1 19:52:39
本帖最后由 QianFan 于 2015-12-1 19:56 编辑
pythonworld 发表于 2015-11-29 20:25
两个连接文件已经附上了。

楼主你好。感谢你采用我的答案。不过治标不治本,问题并没有完全解决。下面我给你详细解答一下。

不知道你的链接文件是从什么地方找的。虽然是TrueStudio的,但是写这个链接文件的人不是很了解STM32F334R8这个芯片。问题出在RAM的大小上。我从Mouse上面查到,这个芯片是64K的flash,12K的SRAM。如下图:
2015-12-01 19:30:08屏幕截图.png

但是STM32F334R8内部还有4K的CCRAM。ST的人员大概是为了展现一下334R8这个芯片的优势,所以在Nucleo的盒子上写了SRAM是16K(12+4)。但是CCRAM和SRAM的地址是不一样的。不能简单的通过数字相加得出SRAM是16K这个结论。看下面我拍的STM32F334R8 Nucleo盒子的图片。
2015-12-01 19:33:44屏幕截图.png

看版权声明,链接文件确实是Truestudio公司写的。不过写链接文件的这个人大概是临时工。可能对这个芯片不是很了解。看见盒子上写着16K的SRAM,顺便就把16K写到SRAM的大小上了。(实际SRAM的大小是12K)
2015-12-01 19:42:07屏幕截图.png

为了让C函数能够跑起来,需要在开机的时候设置栈(sp)的值。这个是向量表中的第一个元素。为了避免内存碎片以及方便arm gcc中sbrk的实现,需要将sp的初始值放到SRAM的最后一个地址。这个写链接文件的人以为SRAM是16K,自然计算出来的sp初始值是:
2015-12-01 19:45:37屏幕截图.png
加上SRAM的其实地址0x2000_0000,也就是:
2015-12-01 19:46:03屏幕截图.png

可是这个地址是错误的。因为SRAM到12K的地方就截止了。这个0x20003FFF处压根就不能随机读写。所以无法设置栈。只要你的C函数中有函数的调用,自然就不能返回。程序就跑飞了。所以不管你的程序写的对还是不对,自然不能运行。

而Mbed的工程师了解CCRAM,所以链接文件是对的:
2015-12-01 19:49:20屏幕截图.png




好了,废话说了这么多,该说下解决方案了:将SRAM的长度改为12K,栈的地址设置为12K的最后一个地址,重新链接一下你的程序,问题就会解决了.
2015-12-01 19:51:17屏幕截图.png

2015-12-01 19:51:54屏幕截图.png
因为我刚开始使用arm gcc的时候,也在这犯过糊涂。
qianfan 回答时间:2015-12-1 19:54:32
pythonworld 发表于 2015-11-29 20:25
两个连接文件已经附上了。

楼主以后回复的时候,在我的评论下点回复。你这样上传附件的话我是收不到通知的啊。
pythonworld 回答时间:2015-12-1 22:01:16
QianFan 发表于 2015-12-1 19:54
楼主以后回复的时候,在我的评论下点回复。你这样上传附件的话我是收不到通知的啊。 ...

谢谢你的详细解答.这个连接文件是stm32cubef3 v1.3库文件里stm32cubef3\STM32Cube_FW_F3_V1.3.0\Projects\STM32F334R8-Nucleo\Examples\GPIO\GPIO_IOToggle\TrueSTUDIO文件夹下的.真的很坑爹呀,这都有问题!!目前官网上的版本还是1.3,看来是没有更新.
qianfan 回答时间:2015-12-4 14:38:41
QianFan 发表于 2015-12-1 19:52
楼主你好。感谢你采用我的答案。不过治标不治本,问题并没有完全解决。下面我给你详细解答一下。

不知道 ...

更正一下。这个sp的开始地址设置的有点问题。应该是0x20003000。不应该减1。
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版