[STM8] stm8S207,上电就死机。

[复制链接]
7411|26
 楼主| kevinleez 发表于 2014-6-29 09:20 | 显示全部楼层 |阅读模式
最近使用STM8S207,写了程序,用ST-LINK没问题,但是去了仿真下载器,直接上电,就有很大概率会死机。感觉程序跑了有1秒钟左右才死机。
找了很多原因,都一一排除了。
比如IO电流太大,把驱动数码管的电阻变成500多欧姆了,还是不行。
比如VCAP的电容从470nF改为1uF,还是不行。
电压用示波器测试,稳定5V。
用示波器测试电压和RST脚,为电源先到5V,RST再到5V,按理也正常。
用示波器的接地脚接到板子上,死机概率明显降低,但是还是偶尔会死机。

why,why,why?请教了。

 楼主| kevinleez 发表于 2014-6-29 09:52 | 显示全部楼层
刚才突然有了新发现,把操作内部EEPROM的程序去掉,就不死机了。。。。还是很奇怪。但是起码知道是EEPROM的问题。
wyde518 发表于 2014-6-29 11:14 | 显示全部楼层
操作EEPROM的程序你怎么写的???
l4157 发表于 2014-6-29 11:29 | 显示全部楼层
写EEPROM超过看门狗周期?
金融小数 发表于 2014-6-29 12:45 | 显示全部楼层
操作EEPROM的程序有问题
 楼主| kevinleez 发表于 2014-6-29 13:27 | 显示全部楼层
我没有开启看门狗。。。
 楼主| kevinleez 发表于 2014-6-29 13:27 | 显示全部楼层
void EEPROM_Unlock(void)        //EEPROM解锁
{
        do{
                FLASH->DUKR = 0xAE; // 写入第一个密钥
                FLASH->DUKR = 0x56; // 写入第二个密钥
        }
        while((FLASH->IAPSR & 0x08) == 0);//等待解锁成功
}

void EEPROM_Lock(void)        //锁EEPROM
{
        FLASH->IAPSR |= 0x08;//Set DUL
        //FLASH_IAPSR &= 0x;//Clear EOP
}

void Write_IIC_Byte(unsigned int StartAddress, unsigned char eData)
{
        unsigned char *EEPROM_Address;
        unsigned int Address;
       
        disableInterrupts();
       
        Address = StartAddress;
        EEPROM_Address = (unsigned char *)(0x4000+Address);
        EEPROM_Unlock();
        *EEPROM_Address = eData;
        while((FLASH->IAPSR & 0x04) == 0); // 等待写操作成功
        EEPROM_Lock();
       
        enableInterrupts();
}

unsigned char Read_IIC_Byte(unsigned int StartAddress)
{
        unsigned char eData;
        unsigned char *EEPROM_Address;
        unsigned int Address;
       
        disableInterrupts();
       
        Address = StartAddress;
        EEPROM_Address = (unsigned char *)(0x4000+Address);
        EEPROM_Unlock();
        eData = *EEPROM_Address;
        //while((FLASH->IAPSR & 0x04) == 0);
        EEPROM_Lock();
       
        enableInterrupts();
       
        return (eData);
}
以上是我读写EEPROM的程序,各位看看有问题吗?
 楼主| kevinleez 发表于 2014-6-29 13:46 | 显示全部楼层
发现问题了,eeprom解锁程序写翻了。。。
应该是:
void EEPROM_Lock(void)        //锁EEPROM
{
        FLASH->IAPSR &= 0xF7;
}
 楼主| kevinleez 发表于 2014-6-29 13:48 | 显示全部楼层
eeprom上锁程序错误。
 楼主| kevinleez 发表于 2014-6-29 14:15 | 显示全部楼层
发现程序改正确之后,死机概率降低,但是还是会死机啊。。。郁闷了。:'(
mmuuss586 发表于 2014-6-29 16:15 | 显示全部楼层
读写EEPROM的时候,关闭所有的中断,以及看门狗;
dingsujie 发表于 2014-6-29 16:26 | 显示全部楼层
mmuuss586 发表于 2014-6-29 16:15
读写EEPROM的时候,关闭所有的中断,以及看门狗;

楼上说的没错;
通宵敲代码 发表于 2014-6-29 18:29 | 显示全部楼层
按11楼的试试!
embedX 发表于 2014-6-29 20:59 来自手机 | 显示全部楼层
看见一楼的问题描述我就觉得和硬件没啥关系
 楼主| kevinleez 发表于 2014-6-29 21:29 | 显示全部楼层
我没有开启看门狗,而且在写eeprom之前disableinterrput,写完eeprom之后enableinterrupt。。。。都试过,依然还是会死机。
:(
xvbct 发表于 2014-6-29 23:27 | 显示全部楼层
看看供电部分有问题吗,用最小系统,跑例程代码,先定位硬件还是软件。
cmyldd 发表于 2014-6-30 01:18 | 显示全部楼层
用内部晶振看看吧,
ljhtj 发表于 2014-6-30 08:50 | 显示全部楼层
在写eeprom注意时间延时,否则容易出问题。
 楼主| kevinleez 发表于 2014-6-30 09:11 | 显示全部楼层
已经试过了跑普通程序ok的,就是加入eeprom程序就有问题。。。:(
但是eeprom程序看不出问题啊。
 楼主| kevinleez 发表于 2014-6-30 09:28 | 显示全部楼层
to 18楼,你好,我写的是STM8内部的eeprom。。。不是外部的AT24C02之类的。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

137

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部