利用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 的时序信号光纤传输系统
一种毫米波放大器时序直流电源的设计
这是人民的命令