打印

内置SRAM启动模式,调试程序时Delay延时出错

[复制链接]
1786|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Work2000|  楼主 | 2013-10-29 11:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    最近在学习ARM单片机的bootload引导模式,单片机是ST公司生产(基于Cortex-M3内核),型号为STM32F103ZET6。根据资料介绍有3种引导模式,于是自己在开发板(红牛3代开发板)上测试。我是一个初学者,测试主要是了解它的引导模式和内存映射状况。但是在SRAM引导模式下调试程序时就出现了下面的问题,弄了一段时间还是不明所以,还望各位前辈指导。

    故障:SRAM启动模式,调试程序时Delay延时出错

    测试目的:使用SRAM启动模式,调试程序,使得单片机进行LED灯闪烁,灯亮延时1ms,灯灭延时1ms。

    故障现象:单片机设置为SRAM启动模式,程序烧录后,进行Deug,可以实现LED的亮灭,但是在延时时间上出现错误,通过示波器查看延时时间为8.2ms闪烁1次。之前使用Flash启动模式测试过LED,延时时间为1ms。

    不知问题是什么原因造成,使用内置SRAM启动模式步骤及相关配置是否有问题?

    使用SRAM启动模式步骤:

    修改ROM,RAM分区:

    然后添加ram配置文件:

配置向量表偏移寄存器内容(定义VECT_TAB_SRAM):

配置调试数据:



delay程序入下:
//
// 代表每毫秒Delay函数内的for循环次数
// 基于72MHz内核时钟的ARM单片机STM32F10X
//

#define    CYCLES_PER_MS               ((uint16_t)8200)

void Delay (uint16_t nMilliseconds)
{
    uint16_t nCycles;


    while (nMilliseconds--)        {
        for(nCycles = 0; nCycles < CYCLES_PER_MS; nCycles++);   // Delay one millisecond
    }
}



沙发
戈卫东| | 2013-10-29 11:22 | 只看该作者
SRAM比Flash慢.......所以时间不同了.

使用特权

评论回复
板凳
Work2000|  楼主 | 2013-10-29 12:35 | 只看该作者
戈卫东 发表于 2013-10-29 11:22
SRAM比Flash慢.......所以时间不同了.

首先,感谢您的回答!
您能说一下SRAM比Flash慢的原因是什么?能否在SRAM模式下,使得延时时间与flash模式下延时时间相同?

使用特权

评论回复
地板
戈卫东| | 2013-10-29 12:53 | 只看该作者
如果需要延时相同可能用TIMER来做是最好的.

使用特权

评论回复
5
戈卫东| | 2013-10-29 12:54 | 只看该作者
RAM慢,可能是STM32的RAM只是对数据存取有优化,对代码运行没有优化,于是就不如FLASH代码运行快----可能这样.

使用特权

评论回复
6
kseeker| | 2013-10-30 00:23 | 只看该作者
FLASH里运行的话代码和数据总线是分离的。内存里运行的话代码和数据争用一条总线。

使用特权

评论回复
7
lhchen922| | 2013-10-30 09:10 | 只看该作者
CM3的地址空间是4GB, 程序可以在代码区,内部SRAM区以及外部RAM区中执行。但是因为
指令总线与数据总线是分开的,最理想的是把程序放到代码区,从而使取指和数据访问各自使用自己的总线,并行不悖

使用特权

评论回复
8
lhchen922| | 2013-10-30 09:11 | 只看该作者
学Cortex-M3 看看《ARM Cortex-M3权威指南》

使用特权

评论回复
9
香水城主| | 2013-10-30 11:19 | 只看该作者
使用for循环进行时间延迟是一个非常不好的习惯!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

16

帖子

0

粉丝