Print

发布时间: 2023-12-28
摘要点击次数:
全文下载次数:
DOI: 10.3969/j.issn.2096-8299.2023.06.015
2023 | Volume 39 | Number 6




    其他研究    




  <<上一篇 




  下一篇>> 





利用STM32F4下载PIC单片机程序的原理及实现
expand article info 袁三男1, 王鹏2
1. 上海电力大学, 上海 200090;
2. 国网浙江省电力有限公司宁波供电公司, 浙江 宁波 315000

摘要

针对传统PIC系列芯片采用Microchip公司推出的PICKIT下载器对程序进行下载存在局限性的问题,在基于ICSP协议的基础上,采用STM32F407对PIC12F1572芯片进行程序下载。代码事先通过编译以HEX文件的形式经由STM32F407发送给PIC12F1572芯片,经校验无误后写入PIC芯片内。实验结果表明,该方法不仅能摆脱利用PICKIT下载程序所带来的局限性,而且能实现多路下载,大大提高了下载效率。

关键词

STM32F4控制器; PIC控制器; ICSP协议

Realization of Downloading PIC MCU Program Based on STM32F4
expand article info YUAN Sannan1, WANG Peng2
1. Shanghai University of Electric Power, Shanghai 200090, China;
2. Ningbo Power Supply Company, State Grid Zhejiang Electric Power Co., Ltd., Ningbo, Zhejiang 315000, China

Abstract

Aiming at the limitation of traditional PIC series chips using PICKIT downloaders produced by MICROCHIP company to download programs, this paper uses STM32F407 to download programs for PIC12F1572 chips on the basis of ICSP protocol.The code is sent to PIC12F1572 chips through HEX file in the form of compilation, and is written into PIC chips after verification.This method can not only get rid of the limitations brought by the use of PICKIT download program, but also can achieve multi-way download, greatly improving the efficiency of download.

Key words

STM32F4 controller; PIC controller; in-circuit serial programming protocol

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端接收到正确的解锁序列后, 即可正常进入编程模式。

上述步骤中, TENTSTENTH需要满足的条件为

$ \left\{\begin{array}{l} T_{\mathrm{ENTS}} \geqslant 100 \mathrm{~ns} \\ T_{\mathrm{ENTH}} \geqslant 250 \mu \mathrm{s} \end{array}\right. $ (1)

进入编程模式的电压时序如图 2所示。

图 2 LVP电压时序

由于PIC芯片内部有低电压复位功能, 当电压过低时会使芯片进入复位状态, 因此供电电压应高于复位电压, 才能使芯片正常进入编程模式。

3 程序下载流程

当PIC进入编程模式后, 可根据编程命令对PIC采取不同操作。

在本方案中用到的几种编程命令及数据格式如表 1所示。

表 1 PIC单片机编程命令

下载CSV
编程命令 十六进制表示方式 数据格式
从程序存储器读取数据 04H 0, data(14), 0
为程序存储器加载数据 02H 0, data(14), 0
增加当前地址 06H
重置地址 16H
开始内部时序编程 08H
块擦除命令 09H

程序下载流程如图 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芯片的烧写, 同时扩展了多路芯片同时烧录功能, 大大提高了烧录效率。

参考文献

  • [1]
    张立丽, 王洪波. 基于PIC单片机的直流电机控制器的设计[J]. 计算机工程与设计, 2009, 30(11): 2681-2683.
  • [2]
    吴正民. PIC单片机特点及应用时的注意事项[J]. 实验室研究与探索, 2003(6): 79-82.
  • [3]
    Microchip 8位PIC单片机PIC16F15386系列[J]. 世界电子元器件, 2017(2): 19.
  • [4]
    张明, 刘岑俐. 基于PIC单片机和DS18B20的温度测量系统设计[J]. 电子测试, 2010(4): 54-57.