我用的是IAR,IAR用STlink下载时提示如下:
点击yes后如下:
串口下载时按下复位键后离开点next提示如下:
提示打大概意思是boot loader不能启动和flash保护,IAR的提示是控制字读保护,现在是怎么都下不进去程序了,而且原来的程序也没运行了,我确定。
之前一直是两种方式都可以下载的,用STlink SWIM也是可以仿真的,我改了控制字OPT5 ,本是想把STM8的启动等待时间改短一点,代码如下:
//选项字配置函数
void option_byte(void)
{
//9个选项字配置寄存器值数组
//u8 opt[9]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
//u16 opt1_add1=0x4800,opt1_add2=0x4801;
u16 opt7_add1=0x480d,opt7_add2=0x480e,opt5_add1=0x4809,opt5_add2=0x480a;
do
{
FLASH_DUKR = 0xae; // 写入第一个密钥
FLASH_DUKR = 0x56; // 写入第二个密钥
} while(FLASH_IAPSR_DUL == 0); // 若解锁未成功,则重新再来
FLASH_CR2 = 0x80;//使能选项字修改
FLASH_NCR2= 0X7f;//选项字互补寄存器
*((u8*)opt5_add1) = 0xb4; // 24M外部时钟128个启动延时时钟
while(FLASH_IAPSR_EOP == 0); // 等待写操作成功
*((u8*)opt5_add2) = 0x4b; //延时互补寄存器
while(FLASH_IAPSR_EOP == 0); // 等待写操作成功
*((u8*)opt7_add1) = 0x01; // 24M外部时钟时FLASH访问等待1个时钟
while(FLASH_IAPSR_EOP == 0); // 等待写操作成功
*((u8*)opt7_add2) = 0xfe; //FLASH访问等待选项字互补寄存器
while(FLASH_IAPSR_EOP == 0); // 等待写操作成功
FLASH_CR2 = 0x00;//禁止选项字修改
FLASH_NCR2= 0Xff;//选项字互补寄存器
FLASH_IAPSR_DUL = 0;//写保护
}
我用的24M外部晶振,这个程序最开始只对OPT7做了修改,因为手册里面说时钟》16M时要让fllash等待一个时钟什么的,是没有有问题,我加入对OPT5的操作后就下不了程序了,求大神帮忙啊!
---------------------------------
原子哥: 复位还是不行。
---------------------------------
谢谢分享
一周热门 更多>