解决一个STC晶片问题!
STC 真的是烂晶片,以后接客开发绝对不敢使用了!!照STC官方说,RESET 最好增加 MAX810 或 MAX813 结果都一样!!
尝试将 STC RESET 延长也没用!!
原先怀疑 Keil C51 优化问题,但是同一个程序放入 W77E516B 并没有这个问题.
为什么要填入 0xaa?因为一般晶片 RESET 后,RAM 都会先清除为 00 或 ff(出现0xaa机率 255 分之1)
volatile unsigned char data 法克_STC=0; /* 增加这个变量 */
/************************************/
/* 主程序 */
/************************************/
void main(void)
{
PowerOnDelay(500); // 0.5秒
INIT_STC12C5A60S2(); // W77E516 初始化
INIT_T0();
// INIT_T1();
INIT_UART0_TIME1();
INIT_UART1_BRT();
EA=1;
PowerOnDelay(500); // 0.5秒
法克_STC = 0xaa; // 启动 fuck_STC
.................................
wrbytes(....);
}
/**********************************************************************/
/* 写入 FRAM */
/* addr1起始位址 */
/* addr2写入阵列指标 */
/* length 写入长度 */
/**********************************************************************/
void wrbytes(uint addr1,uchar *addr2,uint length)
{
uint i;
if (法克_STC == 0xaa)/* 解决方式 */
{
wren();
fm25c256_sck=0;
fm25c256_cs=0;
sendbyte(WRITE);
sendbyte(addr1>>8);
sendbyte(addr1);
for (i=0;i<length;i++)
{
sendbyte(*(addr2+i));
}
fm25c256_sck=1;
fm25c256_cs=1;
wrdi();
}
} 还没找到原因就乱喷,法克!
加长延时再试! 回复【1楼】Jason022
还没找到原因就乱喷,法克!
加长延时再试!
-----------------------------------------------------------------------
尝试将 STC RESET 延长也没用!!(送电后,尚未RESET STC 就已经乱运行)
你可以将 STC 电源快速开开关关 1000 次,你就会知道 STC 真的很烂..
为什么要填入 0xaa?因为一般晶片 RESET 后,RAM 都会先清除为 00 或 ff(出现0xaa机率 255 分之1)
原先优化降至(3)虽有改善,但是发生机率还是很高,最后增加"法克STC"终于解决,而且优化升至(8)也没发生乱写FRAM. 以前都用 T518 及LM555 控制 RESET,不过PIC好像就没有这方面问题.
STC12 内部已经有 Max810 为什么还会发生这种早期偷跑动作?
除非 STC 目前还使用早期的CPU核心技术...或是盗版的 CPU IP
好险我都用nuvoton及C8051,而 STC 只能取代 LED 扫瞄或键盘扫瞄的工作. 楼主别吓我,我在用STC呢 将 STC 电源快速开开关关 1000 次…… 从楼主的测试说明,问题是由电源部分引起。楼主的解决办法是在程序中做针对性处理,诱发问题的原因却依然存在
估计楼主的单片机部分的电源用的滤波电容比较大,并且这个电源的负载电流比较小。如果是,可以把滤波电容换小一点,或者加大负载电流,可以考虑并个放电电阻上去。像100MA以内的负载电流,没必要用1000uF的滤波电容
既然厂家建议在 RESET做处理,在外加芯片的同时,下载程序时也可以把门限电压提高一个等级。
至于说用 W77E516B 测试没问题,如果是在同样电路中测试,那很可能是 W77E516B 内部的 RESET 部分加入了检测处理电路,很可能它默认的门限电压是最高级的。 说的门限电压是指低压检测,像STC的 在5V芯片中 有4.5V 和 3.9V ,3.9V是下载时默认的
以上所说,纯属猜测,如有意外,实属巧合 回复【楼主位】d-link
-----------------------------------------------------------------------
你狠确定你的电路和程序都没没问题吗? 小弟只用 220uF
另外我使用 SPI 模式,有写入至能与除能都无法闭开STC程序乱跑
也就是说,RESET 时,STC还会运行在程序某处,,,实在有点可怕.
我程序开机已经Delay 1 秒,可见程序并不是从 0x0000 开始运行!!
stc12 不是有内建 MAX810 吗?为什么还有这种现象我也不知道,官方
只是爱吹牛吧,(假的啦)
优化 Keil C 降到(3) 虽然有改善,但是偶尔还是会出现...
只能增加"法克STC"才能永远解决这个问题 使用 STC12C5A60S2 注意下面几点
1.UART1 & UART2 开机会乱送资料,UART1 因为要编程使用所以一定会,至于 UART2 如果你转成 P4 输出入,
最后在 STARTUP.A51 提前下手。
2.RESET 姚大不是已经说不稳吗,所以增加EX_LXD补强,但是效果极差。。。。
3.外接 FRAM 25Cxx 最好增加硬体 /WP 与 软件 BP1 BP0 控制补强。
必竟STC不是华邦或ATMEL,稳定本来就差别人一大节。 没看明白楼主说的是什么,但复位后RAM是随机数吧?这个跟单片机没关系吧,复位后把内存清零是启动代码要干的事。
如果启动代码中没有对某个变量清零的话,那么那个变量将是随机数。 回复【9楼】hsztc
没看明白楼主说的是什么,但复位后ram是随机数吧?这个跟单片机没关系吧,复位后把内存清零是启动代码要干的事。
如果启动代码中没有对某个变量清零的话,那么那个变量将是随机数。
-----------------------------------------------------------------------
(((复位后RAM是随机数吧)))STARTUP.A51 早清除干净了!!!
另外就是STC最好一开机就将 ID 码也清掉,免的破坏变量.
还有就是,既使将RAM清除干净了,STC还是会发生进入乱写的状况(你就知道STC有多烂)
我的方式只有 1/255%机率,8楼的方式可以 100%避开,不过要修改硬体.
~~~真的是便宜没好货,难怪卖的那么便宜~~~ 【10楼】 d-link
好像有点明白了,不过你的方法机率是应该是1/256, 把变量设成16位的,填个0x55AA那样就1/65536了。 回复【11楼】hsztc
【10楼】 d-link
好像有点明白了,不过你的方法机率是应该是1/256, 把变量设成16位的,填个0x55aa那样就1/65536了。
-----------------------------------------------------------------------
没有用的啦~
因为送电后,RESET(1)没做用, STC PC=随机乱数!!!!
必须使用第二个RESET(2)脚 P4.6 !!
因为第一个RESET(1)脚要给ISP使用,延迟太严重,所以是假的RESET脚!!! STC的好像有个设置先项,设成P1.0/P1.1为0时才下载,可以快速启动,可以试下有没作用 检查一下上电时的时序吧,可能是你电源部分的电容用得大了,导致上电时间过长有关。 回复【14楼】chunyangjs
检查一下上电时的时序吧,可能是你电源部分的电容用得大了,导致上电时间过长有关。
-----------------------------------------------------------------------
电源 220uF/16V,不是电源的问题,RESET 电容 10uF,传统8051 RESET早就锁往8051了,怎么会乱跑.
所以喔,怪不得以前同事叫我不要用 STC 开发主系统 我用12C5205AD,这个型号必须P1.0P1.1接地才能进ISP,所以上电好像没有发现过问题,但是下电时似乎还是有问题,会不定时的擦除他自己的EEPROM。后来通过调整软件,解决了。但是这个电路中的硬件我没有使用第二复位引脚,是直接接VCC的。这种现象可能是如前辈们所说的,因为要实现掉电保存而使用了比较大的滤波电容的原因吧。
不过有一次在一个滤波电容同样是220的板子上发现了开机时读出来的东西是0XFF,没有被擦除,因为重新开机有时是正常的,把程序中启动后加一个延时,再读取,就没有这个现象了。这个板子同样没有启用第二复位。
我用的12C5A60AD,启用了第二复位,参数是10K加4.7K电阻分压。同样有大容量的电容实现掉电保存,没有发现什么问题,系统使用22M的主频,目前比较稳定,虽然量不多。
总之,能用,需要不断的累积经验,只要能找到办法解决问题,接行了。
看来第二复位还是要用的 stc的机子我一直在用,使用了好几种芯片(STC10FX08XE-35I,STC11F02XE-35I,STC2051),有的使用有三年了,到目前为止没发现啥问题(应用在自动化控制方面)。倒是在初使用设计的时候遇到了很多问题(一开始使用AT系列的然后转成STC),主要问题是时钟延时,还有就是SFR(与AT系列有很多不同的地方,就是STC不同芯片也有不同的地方)。仔细看说明书应该都可以解决。 回复【16楼】xiaobendan仲跻东
总之,能用,需要不断的累积经验,只要能找到办法解决问题,接行了。
看来第二复位还是要用的
-----------------------------------------------------------------------
建议姚叔将 RESET(1)改为ISP(KEY)......
我的经验是如果Keil C51 优化(3)~(9)晶片动作有问题,代表此晶片无法作为主系统使用.
目前使用华邦或ATMEL及NXP都OK,为独 STC 异常. 回复【17楼】axiang66
stc的机子我一直在用,使用了好几种芯片(stc10fx08xe-35i,stc11f02xe-35i,stc2051),有的使用有三年了,到目前为止没发现啥问题(应用在自动化控制方面)。倒是在初使用设计的时候遇到了很多问题(一开始使用at系列的然后转成stc),主要问题是时钟延时,还有就是sfr(与at系列有很多不同的地方,就是stc不同芯片也有不同的地方)。仔细看说明书应该都可以解决。
-----------------------------------------------------------------------
如果接 LED 或是KEY当然没问题,如果接RAM或是time IC 问题可能就很大
之前同事说 DS1302 资料被归0,找不到任何点进入,原来是 STC 开机程序乱跑导致. 我也有操作1302的板子啊,没发现什么问题啊。并且那个板子上我还把复位脚搞成了P4.7再用着呢。
我的KEIL优化应该是默认的,没有改过。 回复【20楼】xiaobendan仲跻东
我也有操作1302的板子啊,没发现什么问题啊。并且那个板子上我还把复位脚搞成了p4.7再用着呢。
我的keil优化应该是默认的,没有改过。
-----------------------------------------------------------------------
如果你的零件接 UART脚或是SPI脚问题可以就会与我相同
你可以使用示波器看STC瞬间开机,STC就以已经乱送资料了,而且RESET(1)都已经等于VCC还会跑...这种晶片还是少用的好. 学习了,请问11系列的有没有类似的问题?
还有写RAM前判别一下0xaa,不是的话就不写了,那程序真正的功能不受影响吗?不是0xaa的话,是不是需要从头开始重新运行程序? 因为串口是要下载用的,我一般不会用来做别的用,作为开关量输入还是可以的,下程序的时候别给信号就可以了,其他的用还是省省的好 用过几百片STC的片子,11系列和12系列,没遇到类似问题。
倒是有一次发现IO设置为高阻时掉电功耗超标,设置为其他状态则没有这个问题。 回复【24楼】JR.Cheng
用过几百片stc的片子,11系列和12系列,没遇到类似问题。
倒是有一次发现io设置为高阻时掉电功耗超标,设置为其他状态则没有这个问题。
-----------------------------------------------------------------------
电脑模拟开关机测试STC12C5A60S2-48
1.600次开机有1次SPI界面无法开起.
2.14400次开机有26次SPI界面无法开起.
发现无法开起的周期率蛮固定的,不知道STC无法开起去做什么事?是否去做什么坏事.. 回复【25楼】d-link
回复【24楼】jr.cheng
用过几百片stc的片子,11系列和12系列,没遇到类似问题。
倒是有一次发现io设置为高阻时掉电功耗超标,设置为其他状态则没有这个问题。
-----------------------------------------------------------------------
电脑模拟开关机测试stc12c5a60s2-48
1.600次开机有1次spi界面无法开起.
2.14400次开机有26次spi界面无法开起.
发现无法开起的周期率蛮固定的,不知道stc无法开起去做什么事?是否去做什么坏事..
-----------------------------------------------------------------------
靠,听你这么说,真有点毛骨悚然 靠,听你这么说,真有点毛骨悚然
-----------------------------------------------------------------------
无法开起时,测试全部IO脚与你相同,全部IO为高阻.
所以我程序后来又加入,如果出现这种异常就运行(IAP_CONTR=0x60)重新开机. IAP_CONER=0x60是什么意思? 回复【28楼】xiaobendan仲跻东
iap_coner=0x60是什么意思?
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_634689ETYZW0.JPG
(原文件名:aaa.JPG) 我用的手动复位,如果频繁的按复位键,单片机程序就会跑飞,这个问题是我一个同事发现的,打电话过去老姚说我程序没写好,给了它跳转指令,没办法在程序开始部分加了一分钟的延时,好了很多,但还是有,没办法就那样先用着,以后把它换掉 回复【30楼】RMGK
我用的手动复位,如果频繁的按复位键,单片机程序就会跑飞,这个问题是我一个同事发现的,打电话过去老姚说我程序没写好,给了它跳转指令,没办法在程序开始部分加了一分钟的延时,好了很多,但还是有,没办法就那样先用着,以后把它换掉
-----------------------------------------------------------------------
公司周五开会决议不采用 STC MCU,,,...连做 LED扫瞄或是键盘扫瞄资格都没有....
看来只能拿回家给小孩当玩具.... 又碰到一个自己解决不了问题就怨单片机不好的!悲哀!!!!!!!!
页:
[1]