你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
查看完整内容
举报
Debug.zip
2015-11-20 21:10 上传
点击文件名下载附件
67.76 KB, 下载次数: 7, 下载积分: ST金币 -1
Inc.zip
2015-11-20 21:35 上传
8.59 KB, 下载次数: 4, 下载积分: ST金币 -1
Src.zip
17 KB, 下载次数: 5, 下载积分: ST金币 -1
QianFan 发表于 2015-11-20 21:40 看你的汇编文件,灯貌似是PA5,延时了100ms。但是最重要的是,使用HAL_GPIO_Init之前没有打开GPIOA的时钟 ...
STM32F334R8_FLASH.zip
2015-11-22 17:56 上传
1.28 KB, 下载次数: 10, 下载积分: ST金币 -1
pythonworld 发表于 2015-11-22 17:56 终于解决了,更换连接文件后就可以了。不用HAL库带的Truestudio的连接文件。在GitHub上下载的Mbem里的连接 ...
Ld.zip
2015-11-29 20:25 上传
2.96 KB, 下载次数: 6, 下载积分: ST金币 -1
pythonworld 发表于 2015-11-29 20:25 两个连接文件已经附上了。
QianFan 发表于 2015-12-1 19:54 楼主以后回复的时候,在我的评论下点回复。你这样上传附件的话我是收不到通知的啊。 ...
QianFan 发表于 2015-12-1 19:52 楼主你好。感谢你采用我的答案。不过治标不治本,问题并没有完全解决。下面我给你详细解答一下。 不知道 ...
看你的汇编文件,灯貌似是PA5,延时了100ms。但是最重要的是,使用HAL_GPIO_Init之前没有打开GPIOA的时钟。在标准库中使用RCC_AXXClockCmd,不知道HAL用什么打开。
或者你打开时钟的代码在其他的地方。或者另外的原因。
如果还是有问题,可以使用gdb调试一下看看GPIOA相关的寄存器是否被设置了。
Debug.zip
2015-11-20 21:10 上传
点击文件名下载附件
下载积分: ST金币 -167.76 KB, 下载次数: 7, 下载积分: ST金币 -1
软件延时吗?软件延时的话记得加volatile。
Inc.zip
2015-11-20 21:35 上传
点击文件名下载附件
下载积分: ST金币 -18.59 KB, 下载次数: 4, 下载积分: ST金币 -1
Src.zip
2015-11-20 21:35 上传
点击文件名下载附件
下载积分: ST金币 -117 KB, 下载次数: 5, 下载积分: ST金币 -1
学习了。。。
STM32F334R8_FLASH.zip
2015-11-22 17:56 上传
点击文件名下载附件
下载积分: ST金币 -11.28 KB, 下载次数: 10, 下载积分: ST金币 -1
o(^▽^)o,配置型问题有时就是让人无处下手。解决起来又无比简单。
能给我两个链接我见看看吗?我用trueStudio的链接文件没问题啊 。
给我两份链接文件看看吧。
Ld.zip
2015-11-29 20:25 上传
点击文件名下载附件
下载积分: ST金币 -12.96 KB, 下载次数: 6, 下载积分: ST金币 -1
楼主你好。感谢你采用我的答案。不过治标不治本,问题并没有完全解决。下面我给你详细解答一下。
不知道你的链接文件是从什么地方找的。虽然是TrueStudio的,但是写这个链接文件的人不是很了解STM32F334R8这个芯片。问题出在RAM的大小上。我从Mouse上面查到,这个芯片是64K的flash,12K的SRAM。如下图:
但是STM32F334R8内部还有4K的CCRAM。ST的人员大概是为了展现一下334R8这个芯片的优势,所以在Nucleo的盒子上写了SRAM是16K(12+4)。但是CCRAM和SRAM的地址是不一样的。不能简单的通过数字相加得出SRAM是16K这个结论。看下面我拍的STM32F334R8 Nucleo盒子的图片。
看版权声明,链接文件确实是Truestudio公司写的。不过写链接文件的这个人大概是临时工。可能对这个芯片不是很了解。看见盒子上写着16K的SRAM,顺便就把16K写到SRAM的大小上了。(实际SRAM的大小是12K)
为了让C函数能够跑起来,需要在开机的时候设置栈(sp)的值。这个是向量表中的第一个元素。为了避免内存碎片以及方便arm gcc中sbrk的实现,需要将sp的初始值放到SRAM的最后一个地址。这个写链接文件的人以为SRAM是16K,自然计算出来的sp初始值是:
加上SRAM的其实地址0x2000_0000,也就是:
可是这个地址是错误的。因为SRAM到12K的地方就截止了。这个0x20003FFF处压根就不能随机读写。所以无法设置栈。只要你的C函数中有函数的调用,自然就不能返回。程序就跑飞了。所以不管你的程序写的对还是不对,自然不能运行。
而Mbed的工程师了解CCRAM,所以链接文件是对的:
好了,废话说了这么多,该说下解决方案了:将SRAM的长度改为12K,栈的地址设置为12K的最后一个地址,重新链接一下你的程序,问题就会解决了.
因为我刚开始使用arm gcc的时候,也在这犯过糊涂。
楼主以后回复的时候,在我的评论下点回复。你这样上传附件的话我是收不到通知的啊。
谢谢你的详细解答.这个连接文件是stm32cubef3 v1.3库文件里stm32cubef3\STM32Cube_FW_F3_V1.3.0\Projects\STM32F334R8-Nucleo\Examples\GPIO\GPIO_IOToggle\TrueSTUDIO文件夹下的.真的很坑爹呀,这都有问题!!
更正一下。这个sp的开始地址设置的有点问题。应该是0x20003000。不应该减1。