打印
[STM8]

请问这个问题是如何产生的?怎么解决?

[复制链接]
1103|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zyx1992106|  楼主 | 2017-4-26 14:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用STVP总是出现:“Error on Option Bytes (complementary bytes). Reprogram Option Bytes of device”;有时候有这个问题有时候又没有队友同一个程序来说
沙发
Xflyan| | 2017-4-26 18:53 | 只看该作者
程序里有写OPB,但没有写补码,重启后就会有这种错误

使用特权

评论回复
板凳
zyx1992106|  楼主 | 2017-4-27 10:55 | 只看该作者
Xflyan 发表于 2017-4-26 18:53
程序里有写OPB,但没有写补码,重启后就会有这种错误

我有写啊:  *((unsigned char*)0x4803) = 0x01;
  *((unsigned char*)0x4804) = 0xfe;//PC5 PC6能输出PWM,option bytes;
其他选项字我没有写

使用特权

评论回复
地板
Xflyan| | 2017-4-27 13:43 | 只看该作者
zyx1992106 发表于 2017-4-27 10:55
我有写啊:  *((unsigned char*)0x4803) = 0x01;
  *((unsigned char*)0x4804) = 0xfe;//PC5 PC6能输出PWM ...

有时候有、有时候没有问题,那就是有问题的时候没有正常写入,最好在软件里写入之后再读回判断一下有没有写对了
或者直接用库函数代替你那个操作
/**
  * [url=home.php?mod=space&uid=247401]@brief[/url]   Programs option byte
  * @param  Address : option byte address to program
  * @param  Data : Value to write
  * @retval None
  */
void FLASH_ProgramOptionByte(uint16_t Address, uint8_t Data)
{
    /* Check parameter */
    assert_param(IS_OPTION_BYTE_ADDRESS_OK(Address));

    /* Enable write access to option bytes */
    FLASH->CR2 |= FLASH_CR2_OPT;
    FLASH->NCR2 &= (uint8_t)(~FLASH_NCR2_NOPT);

    /* check if the option byte to program is ROP*/
    if (Address == 0x4800)
    {
       /* Program option byte*/
       *((NEAR uint8_t*)Address) = Data;
    }
    else
    {
       /* Program option byte and his complement */
       *((NEAR uint8_t*)Address) = Data;
       *((NEAR uint8_t*)((uint16_t)(Address + 1))) = (uint8_t)(~Data);
    }
    FLASH_WaitForLastOperation(FLASH_MEMTYPE_PROG);

    /* Disable write access to option bytes */
    FLASH->CR2 &= (uint8_t)(~FLASH_CR2_OPT);
    FLASH->NCR2 |= FLASH_NCR2_NOPT;
}

使用特权

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

本版积分规则

33

主题

81

帖子

2

粉丝