STM32
直播中

李星童

7年用户 1061经验值
私信 关注
[问答]

STM8S207RB每次下载前必须用STVP修改选项字才能下载,为什么?

  我的程序只是使用的W5500的程序,其他什么都没开,每次下载前都必须用STVP修改选项字,才能再次下载,我进行一步步试验,发现程序中只要加入下面这些,程序运行后,再次下载时就必须STVP修改选项字。memset( W5500Object.W5500Inf,0,sizeof(W5500Object.W5500Inf));                /* 将W5500Inf全部清零*/    memcpy(W5500Object.W5500Inf.IPAddr,W5500IPAddr,sizeof(W5500IPAddr));         /* 将IP地址写入W5500Inf中 */
    memcpy(W5500Object.W5500Inf.GWIPAddr,W5500GWIPAddr,sizeof(W5500GWIPAddr));   /* 将网关IP地址写入W5500Inf中 */
    memcpy(W5500Object.W5500Inf.MASKAddr,W5500IPMask,sizeof(W5500IPMask));       /* 将子网掩码写入W5500Inf中 */


上面这些语句只是对一个结构体进行清零和部分赋值,这些操作为啥会造成这种现象,而且我把整个W5500的初始化加入其中,还会有一奇怪的现象,就是我运行时,时钟那边经常性会运行不过去,就在时钟自动切换的时候
while (!CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE,
            CLK_CURRENTCLOCKSTATE_DISABLE));
     /*切换到外部时钟,并等待时钟却换成功*/




各位大侠,麻烦尽快帮忙解决下,多谢多谢,本来初接触STM8S的东西,以前只弄过STM32




回帖(1)

青sky

2024-5-13 17:30:59
STM8S207RB是一款基于8051内核的8位微控制器,由STMicroelectronics(意法半导体)生产。在某些情况下,下载程序到STM8S207RB之前需要使用STVP(ST Visual Programmer)修改选项字。这可能是由于以下几个原因:

1. 选项字保护:STM8S207RB的选项字(Option Byte)是一种用于存储特定配置的非易失性存储器。这些配置包括看门狗定时器、安全位、引导模式等。在某些情况下,选项字可能被设置为保护状态,导致无法直接下载程序。使用STVP修改选项字可以解除这种保护。

2. 程序大小限制:STM8S207RB的闪存大小为8KB,如果程序超过了这个限制,可能需要调整选项字以允许使用外部存储器。STVP可以帮助您修改选项字,以便在外部存储器中存储程序。

3. 引导模式:STM8S207RB支持多种引导模式,包括系统引导模式、用户引导模式和应用引导模式。在某些情况下,可能需要修改选项字以切换到适当的引导模式,以便正确下载和执行程序。

4. 看门狗定时器:STM8S207RB具有看门狗定时器功能,用于在程序运行异常时重置微控制器。如果看门狗定时器被设置为不允许重置,可能导致无法下载程序。使用STVP修改选项字可以调整看门狗定时器的配置。

关于您提到的程序中加入memset和memcpy函数导致的问题,这可能是因为这些函数修改了W5500Inf数组的内容,而这个数组可能与STM8S207RB的某些配置或寄存器有关。当您运行程序并修改这些寄存器后,微控制器的某些设置可能被更改,导致下次下载程序时需要重新修改选项字。

为了避免这个问题,您可以尝试以下方法:

1. 检查W5500Inf数组是否与STM8S207RB的配置或寄存器有关。如果是这样,请确保在修改这些寄存器之前备份原始值,并在程序结束时恢复这些值。

2. 在程序中添加一个标志,用于指示是否需要使用STVP修改选项字。如果程序中确实需要修改选项字,可以在程序开始时设置这个标志,然后在下次下载程序时检查这个标志,以确定是否需要使用STVP。

3. 如果可能,尝试优化程序,避免在运行时修改与STM8S207RB配置或寄存器相关的数据。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分