LGT8F684P 的一個導致再不能燒寫的經驗
把SWD及SWC腳都設定成輸出,並在SWC腳上以0.5秒高變化,RSTN/RA3設成I/O mode,用SDK產生項目,在 main.c 內按預想加回如下:#include "allinone.h"
// Import external definitions
extern void init_modules(void);
int main(void)
{
// Device initialization
init_modules();
// Add your code from here
while(1)
{
gppToggle(GPPA, P1);
delayms(500);
}
return 0;
}
結果:芯片不能再 燒寫了
初步結論:芯片因沒法再燒寫,故判定為已損壞
建議:最好是不要用 Reset,SWC和SWD三腳。若要使reset腳可作輸出/輸入,則其餘兩腳應只作輸入。若能保留不用Reset腳,則 SWC和SWD可任用(這個由群友bbsniua提出,本人未經驗證,但他本人已做過成品,很有信心)。 bbsniua 的一些相關經驗 和提供的對應程序範例:
一个做IO插入代码看时序,一个做模拟串口
复位不变
只有接触不良会坏
核心板的不同之处就是有个TS被接VCC了
我把那根线切断了后基本没发现过损坏的了
当然滤波电容是4.7uF的
这是我的经验
还有就是下载口被用作输出,复位也被用做输出的,那个加了判断
#include "lgt8f684a.h" // 库文件
#define _XTAL_FREQ 8000000 // 8M/4T时定义时钟频率为8M
#define LED RC0
void main()
{
TRISA1 = 0; // RA1设置为输出
RA1 = 0; // RA1输出0
TRISC0 = 0;
LED = 0;
__delay_ms(1); // 延时1ms
if(RA1) // 检测到编程器连接时RA1被拉到1
{
TRISA1 = 1; // 把RA1恢复输入
while(1)
{
LED ^= 1; // LED取反
__delay_ms(100); // 延时100ms*2闪一次
}
}
while(1)
{
LED ^= 1;
__delay_ms(1000); // 1000ms*2闪一次
}
}
本帖最后由 eddiewwm 于 2019-1-31 15:38 编辑
以下是用 bbsniua 提供的基礎,把14個I/O全作輸出的走馬燈程序,實證工作正常,芯片也沒出現不能再燒寫的情況。當中要注意的是: RSTN要設在I/O Mode,而且要注意RA3是開漏輸出。
【補充:在多試了一些不同的開關時間後,發現仍會出現不能再燒寫的情況,所以,結論還是保留Reset在 Reset Mode,才是保險之策。】
//===================================================
// Auto generated file : 30/1/2019 12:36:42
//===================================================
#include "allinone.h"
// Import external definitions
extern void init_modules(void);
#define testLED P2
int showGPPALED[]={P0,P1,P2,P3,P4,P5,P6,P7};//{P0,P1,P2,P3,P4,P5,P6,P7}
int showGPPCLED[]={P0,P1,P2,P3,P4,P5};
int main(void)
{
// Device initialization
init_modules();
// Add your code from here
TRISA1 = 0; // RA1?置??出
RA1 = 0; // RA1?出0
TRISC0 = 0;
delayms(1); // 延?1ms
if(RA1) // ??到?程器?接?RA1被拉到1
{
TRISA1 = 1; // 把RA1恢复?入
while(1)
{
for (int i=0; i<8; i++)
{
gppToggle(GPPA, showGPPALED);
delayms(500);
}
for (int i=0; i<6; i++)
{
gppToggle(GPPC, showGPPCLED);
delayms(500);
}
}
}
while(1)
{
for (int i=0; i<8; i++)
{
gppToggle(GPPA, showGPPALED);
delayms(500);
}
for (int i=0; i<6; i++)
{
gppToggle(GPPC, showGPPCLED);
delayms(500);
}
}
return 0;
}
页:
[1]