打印
[STM8]

stm8S207,上电就死机。

[复制链接]
6370|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超过看门狗周期?

使用特权

评论回复
5
金融小数| | 2014-6-29 12:45 | 只看该作者
操作EEPROM的程序有问题

使用特权

评论回复
6
kevinleez|  楼主 | 2014-6-29 13:27 | 只看该作者
我没有开启看门狗。。。

使用特权

评论回复
7
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的程序,各位看看有问题吗?

使用特权

评论回复
8
kevinleez|  楼主 | 2014-6-29 13:46 | 只看该作者
发现问题了,eeprom解锁程序写翻了。。。
应该是:
void EEPROM_Lock(void)        //锁EEPROM
{
        FLASH->IAPSR &= 0xF7;
}

使用特权

评论回复
9
kevinleez|  楼主 | 2014-6-29 13:48 | 只看该作者
eeprom上锁程序错误。

使用特权

评论回复
10
kevinleez|  楼主 | 2014-6-29 14:15 | 只看该作者
发现程序改正确之后,死机概率降低,但是还是会死机啊。。。郁闷了。:'(

使用特权

评论回复
11
mmuuss586| | 2014-6-29 16:15 | 只看该作者
读写EEPROM的时候,关闭所有的中断,以及看门狗;

使用特权

评论回复
12
dingsujie| | 2014-6-29 16:26 | 只看该作者
mmuuss586 发表于 2014-6-29 16:15
读写EEPROM的时候,关闭所有的中断,以及看门狗;

楼上说的没错;

使用特权

评论回复
13
通宵敲代码| | 2014-6-29 18:29 | 只看该作者
按11楼的试试!

使用特权

评论回复
14
embedX| | 2014-6-29 20:59 | 只看该作者
看见一楼的问题描述我就觉得和硬件没啥关系

使用特权

评论回复
15
kevinleez|  楼主 | 2014-6-29 21:29 | 只看该作者
我没有开启看门狗,而且在写eeprom之前disableinterrput,写完eeprom之后enableinterrupt。。。。都试过,依然还是会死机。
:(

使用特权

评论回复
16
xvbct| | 2014-6-29 23:27 | 只看该作者
看看供电部分有问题吗,用最小系统,跑例程代码,先定位硬件还是软件。

使用特权

评论回复
17
cmyldd| | 2014-6-30 01:18 | 只看该作者
用内部晶振看看吧,

使用特权

评论回复
18
ljhtj| | 2014-6-30 08:50 | 只看该作者
在写eeprom注意时间延时,否则容易出问题。

使用特权

评论回复
19
kevinleez|  楼主 | 2014-6-30 09:11 | 只看该作者
已经试过了跑普通程序ok的,就是加入eeprom程序就有问题。。。:(
但是eeprom程序看不出问题啊。

使用特权

评论回复
20
kevinleez|  楼主 | 2014-6-30 09:28 | 只看该作者
to 18楼,你好,我写的是STM8内部的eeprom。。。不是外部的AT24C02之类的。。。。

使用特权

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

本版积分规则

46

主题

137

帖子

2

粉丝