以下是hotpower在21ic論壇里的一些說(shuō)明,這里引用一下: 仔細(xì)分析STM32ISP的數(shù)據(jù)流向,可以找到很規(guī)律的關(guān)系。 不外乎你攻我守,你守我攻。 但如果攻守失衡,必然帶來(lái)死機(jī)的結(jié)果~~~ 現(xiàn)在做到的是如何解脫死機(jī)(死鎖)???---只有Reset!!! 現(xiàn)在看到自動(dòng)ISP的好處和威力了吧---不怕死,就怕死了救不活!!! 自動(dòng)ISP電路很簡(jiǎn)單,俺和小朋友先在EK...忘了板名和廠家了~~~就是那個(gè)199的~~~ LPCARM采用DTR->Reset,RTS->ISP. 所以俺就抄襲這個(gè)習(xí)俗吧~~~但愿NXP的大鼻子別告俺~~~ 由于DTR/RTS是232電平,即-15V~+15V, 一般在+-10V左右。 一般采用ST3232芯片實(shí)現(xiàn)232/TTL電平轉(zhuǎn)換,也可用二極管、三極管 但要注意電平的鉗位及限流問(wèn)題。 ST3232內(nèi)部有2入2出。 而作為主機(jī),信號(hào)方向有3出1入. 即TX(STM32的RXD),DTR(RST),RTS(BOOT0)為輸出信號(hào), RX(STM32的TXD)為輸入信號(hào). RS232芯片一般只連接RXD/TXD這2個(gè)信號(hào),故還剩1入1出未用. 將DTR接入RS232電平轉(zhuǎn)換芯片,那么STM32的RST就得到了正常的電平控制。 考慮硬件存在線與問(wèn)題,故:RS232的TTL輸出加一只二極管D1到RST. 再考慮Boot0的連接問(wèn)題: 由于RTS是232的+-10V,那么肯定不能直接和Boot0連接。 由于Boot0我們可以把它結(jié)果100K電阻(廠家標(biāo)注)上拉至VCC.(STM32的運(yùn)行狀態(tài)) 所以我們只需在Boot0上施加低電平即可設(shè)定ISP模式. 故可用二極管D2單向取-10V即可,考慮STM32不能承受負(fù)電壓,故可在接二極管D3到地GND(VSS) 來(lái)將RTS鉗位在-0.7V. 由于D3的鉗位導(dǎo)致了RTS信號(hào)過(guò)流,故必須用串接10K左右的電阻R1來(lái)限流。 到此自動(dòng)ISP硬件電路的改造過(guò)程以付出D1,D2,D3和R1的“代價(jià)”輕松搞定~~~ 若搞產(chǎn)品可繼續(xù):在Boot0端再串接二極管D4來(lái)消除D3鉗位造成的負(fù)壓-0.7V. 在Boot0,RST上各接102(或103,104)電容防止信號(hào)誤觸發(fā). 一般DTR/RTS未接PC時(shí)都為-10V左右,所以拔掉也不能影響STM32的正常工作. 由于RS232內(nèi)部實(shí)際為反向器,故: DTR = -10V時(shí)RS232輸出高電平到RST,即STM32正常運(yùn)行狀態(tài). RTS = -10V時(shí)經(jīng)過(guò)二極管的單向?qū)щ娞匦?,Boot0為0進(jìn)入ISP狀態(tài). 但是注意: 如果PC未介入,RTS上不會(huì)有電壓信號(hào),故Boot0依然為1 所以RTS的工作重點(diǎn)只是如何拉低Boot0上的電壓!!! 若無(wú)PC談何拉低Boot0??? 所以PC脫機(jī)后該電路也不會(huì)影響STM32的原工作狀態(tài)的~~~ 相反PC ISP完成后(假使還在ISP狀態(tài))再脫機(jī),STM32會(huì)自動(dòng)回到運(yùn)行狀態(tài)~~~ 這-----就是自動(dòng)ISP的"真諦"所在~~~” <-------------------------------------分割線---------------------------------------------> 4.關(guān)于本工具的使用: 基本沒(méi)有太多要說(shuō)的,打開本軟件并連接好板子后,點(diǎn)擊“連接設(shè)備”即可,程序會(huì)自動(dòng)完成對(duì)芯片相關(guān)信息的讀取,如果線路有問(wèn)題則會(huì)報(bào)錯(cuò)。串口調(diào)試軟件的使用和其他同類工具相似,這里就不多啰嗦了。
我是在板子上留VCC、RX、TX、GND四針插口,通過(guò)RS232適配器與電腦連接,所以板子上MAX232的芯片和DB9的插座都省了,移到RS232適配器上了,我做了幾個(gè)適配器,發(fā)現(xiàn)ISP成功與否似乎與ISP程序與適配器硬件的搭配關(guān)系極大,我這幾個(gè)適配器在與AVR芯片通訊是都沒(méi)有一點(diǎn)問(wèn)題,但是用在STM32的ISP上表現(xiàn)就各不一樣了,同樣的條件下,可能A適配器能很好的在力源的ISP程序下工作,卻不能在ST的ISP程序下工作,而B適配器能很好的在ST的ISP程序下工作,卻不能在力源的ISP程序下工作,把萬(wàn)利和MXCHIP板子上的232適配器信號(hào)引出來(lái)用結(jié)果也相似,能否與ISP程序配合好用似乎是在擲骰子一樣找不出規(guī)律,還有ISP時(shí)選擇通訊波特率也有關(guān)系,我的一個(gè)適配器在ST的ISP程序下用57600時(shí)怎么也連不上,用115200后就很好用了,另外ISP與軟(USB轉(zhuǎn)的)硬COM口、芯片本身似乎關(guān)系都不大。