?

利用STM32F4下載PIC單片機程序的原理及實現

2024-01-08 06:49袁三男
上海電力大學學報 2023年6期
關鍵詞:時序命令編程

袁三男, 王 鵬

(1.上海電力大學, 上海 200090; 2.國網浙江省電力有限公司寧波供電公司, 浙江 寧波 315000)

PIC單片機是美國Microchip公司生產的8位微處理器。它的速度與功能遠超一些普通的8位51單片機[1]。相較于傳統單片機,PIC具有指令簡單、尋址方式簡單、代碼壓縮率高、運行速度快、功耗低等特點[2]。PIC芯片程序的下載一般需要經由Microchip公司官方提供的PICKIT下載器下載,利用官方提供的MPLAB軟件對PICKIT進行配置后才能完成[3]。

在部分項目應用中,采用官方推出的ICD調試工具對系統進行調試[4],雖然該種方式成本較低廉,但其實現離不開第三方軟件的支持,從而限制了開發和設計過程,在需要大規模生產應用的場合,存在效率低、成本高、自定義空間小等問題。

本文基于ICSP編程協議,提出了一種利用STM32F407控制器(以下簡稱“407”)下載PIC程序的方法,程序內容經過編譯后以HEX文件形式存入407中,PIC與407之間通過數據和時鐘線進行通信。程序下載前,由于407需要根據當前時鐘脈沖向PIC發送一段特定的序列,使PIC正常進入編程模式,因此有效防止了誤操作的出現;在下載過程中,每當407向PIC寫入數據時,需要等待來自PIC的正確回復以確保數據傳輸的正確性。通過對407引腳的正確配置,可以實現在407組成的最小系統中對PIC芯片的多路下載,而且不需要依賴任何第三方軟件,有效提高了下載效率。

1 STM 32F407接線方式

407與PIC的接線如圖1所示。其中,MCLR、VDD、GND、DAT、CLK分別是PIC對應的引腳名,對于407而言,采用通用IO管腳GPIO即可。

圖1 407與PIC接線

由圖1可知,407上的通用IO管腳GPIO分別與PIC的MCLR、VDD、GND、DAT、CLK引腳連接。其中,MCLR作為PIC的編程引腳,默認情況下不作為普通IO口,因此當MCLR引腳作為普通IO口時,可能會出現程序無法正常下載的情況,此時需要對PIC進行相應的引腳配置;DAT引腳用于407和PIC間傳輸數據,該引腳既用于接收來自407端發送的數據,同時也能將自身數據返回給407,用于校驗數據的正確性;CLK為脈沖輸出引腳,用以接收來自407端發送的一定周期的脈沖,整個下載過程中數據以及命令的收發都在時鐘脈沖的控制下完成。在整個下載過程中,PIC芯片的供電由407的引腳獨立控制,同時對供電電壓值及MCLR引腳控制時序都有一定要求。

2 低電壓編程模式

在低電壓編程模式(Low-Voltage Programming Mode,LVP)下進行配置(如果需要的話)。當DAT引腳上接收到正確的解鎖序列,即可進入編程模式。相較于高電壓編程方式,該方法不需要額外的升壓措施,有效降低了器件成本,同時由于整個操作過程沒有高電壓的存在,能有效防止誤操作導致芯片損壞現象的出現。

PIC內部有專用的LVP使能位,只有當LVP使能的情況下,才允許設備進入低電壓編程模式;否則需要第三方軟件對其配置字進行寫入后,才能正常進入編程模式。這里僅針對出廠默認LVP使能的芯片做出說明。LVP需要在特定電壓時序下才能正常進入,具體做法如下:首先,在保證芯片正常供電的情況下,將MCLR引腳維持在高電平一段時間TENTS;其次,在開始向PIC發送解鎖序列的前一段時間TENTH,將MCLR編程引腳的電平拉低;再次,由407控制引腳輸出一定周期的脈沖,該脈沖的半波周期需要大于100 ns;最后,在上述脈沖的控制下,在DAT上向PIC發送解鎖序列,該序列用16進制,可表示為0x4d434850,遵循低電位先發的原則逐位發送給PIC。當PIC端接收到正確的解鎖序列后,即可正常進入編程模式。

上述步驟中,TENTS和TENTH需要滿足的條件為

(1)

進入編程模式的電壓時序如圖2所示。

圖2 LVP電壓時序

由于PIC芯片內部有低電壓復位功能,當電壓過低時會使芯片進入復位狀態,因此供電電壓應高于復位電壓,才能使芯片正常進入編程模式。

3 程序下載流程

當PIC進入編程模式后,可根據編程命令對PIC采取不同操作。

在本方案中用到的幾種編程命令及數據格式如表1所示。

表1 PIC單片機編程命令

程序下載流程如圖3所示。

圖3 程序下載流程

3.1 程序存儲寫入

程序存儲寫入流程如圖4所示。

圖4 程序存儲寫入流程

PIC根據當前收到的編程命令進行相應操作。當收到需要接收(或發送)數據的命令時,在經過一個特定延時(一般不小于1 μs)后,PIC就要接收來自407的數據(或發送數據),該數據如表1中的16位數據,其起始和終止位都為零,遵循低電位先傳的方式進行收發。在編程過程中,PIC的一個地址空間可以存儲14位有效數據,數據傳輸完畢后執行內部編程指令,將DAT引腳上的數據寫入程序存儲器里,然后再次調用數據回讀命令對寫入PIC的數據進行回讀。若寫入無誤,則執行增加地址命令進行下一個地址的寫入,否則在STM 32內部將返回一個下載失敗的錯誤。

3.2 配置字及用戶ID寫入

用戶ID一般用以辨別不同設備。配置字是PIC單片機內部用以控制引腳功能、看門狗定時器及復位相關功能的特殊寄存器,因此需要在下載程序的過程中寫入適當的配置字及用戶ID,以保證PIC正常工作。由于配置字在不同芯片內部的地址不同,因此對于不同的芯片,首先需要通過增加地址命令或重置地址命令將PIC定位到相應地址位,再通過上文中所述方式對配置字進行寫入操作。在本方案中,以PIC 12F1572芯片為例,其用戶ID位于8000 H-8004 H,配置字位于8007 H-8008 H。用戶ID及配置字寫入流程如圖5所示。

圖5 ID及配置字寫入流程

3.3 退出編程模式

退出編程的電壓時序如圖6所示。其中,退出時間TEXIT不小于1 μs。

圖6 退出編程電壓時序

配置字及ID寫入完成后,即可完成芯片程序的下載。此時,需要將芯片退出編程模式,將MCLR引腳的電平拉低。芯片這時不允許同時斷電。一般來講,VDD和MCLR的電壓時序應滿足圖6所示電壓時序。

3.4 實驗驗證

本文利用STM32F407核心板,連接若干GPIO管腳到PIC相應的引腳進行實驗。下載PIC程序的硬件電路如圖7所示。

圖7 下載PIC程序硬件電路

分別實現407和PIC的應用程序后,將PIC應用程序作為407的數據單元,按照以上所述步驟進行程序燒錄,結果完成后,PIC能夠啟動程序執行相應的功能。

4 結 語

首先,將事先編譯好的HEX文件存入407中,通過PIC內部的編程命令對PIC程序存儲進行編程;然后,對用戶ID和配置字進行了一系列改寫,實現程序的燒錄下載并運行成功。雖然本方案只針對PIC12F1572進行了驗證,但由于PIC系列芯片內部存儲結構的相似性,因此本方案在其他PIC芯片案例中也可以大范圍應用。事實證明,STM32F407能夠在不依賴第三方工具和軟件的前提下完成對PIC芯片的燒寫,同時擴展了多路芯片同時燒錄功能,大大提高了燒錄效率。

猜你喜歡
時序命令編程
只聽主人的命令
基于Sentinel-2時序NDVI的麥冬識別研究
編程,是一種態度
元征X-431實測:奔馳發動機編程
編程小能手
紡織機上誕生的編程
移防命令下達后
基于FPGA 的時序信號光纖傳輸系統
一種毫米波放大器時序直流電源的設計
這是人民的命令
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合