设计MM32-LINK自动复位器,上电复位

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计MM32-LINK自动复位器,上电复位相关的知识,希望对你有一定的参考价值。

MM32-LINK复位
文章目录
设计背景
555定时器
达林顿管复位脉冲
制作复位器
设计与制作
测试电路
自动上电
控制命令
完整的程序
测试总结

简 介: ※对利用MM32-Link进行完整MM32单片机开发工具链进行测试。发现需要对通过MM32-Link下载完程序的单片机,需要通过中断连接以及重新上电,充分利用了MM32-Link软件的菜单命令以及实验桌中对于工作电源的控制完成的自动程序下载与运行的控制。

关键词 MM32IAR

 

§01 MM32-LINK复位


一、设计背景

基于IAR上搭建开发MM32的环境 测试了基于MM32-LINK对于MM32单片机下载开发过程。其中发现使用MM32-LINK下载程序之后,目标板需要经过两个步骤才能够运行:

  • MM32-Link需要与目标板断开连接。可以不用物理上断开连接,只需要使用 菜单栏中的 Operate/Connect Device不用选取即可;
  • 需要对于目标板MCU进行复位,或者重新上电。

如何设计一个能够自动对MM32进行复位电路呢?

1、MM32LINK信号

可以应用MM32-LINK的SWD信号,在Connect与Disconnect两种状态下的不同,从而产生RST的复位脉冲。这两种状态的最大的不同,就是有无脉冲信号。

下图给出了MM32-LINK在Connect状态下由SWD输出的脉冲波形,当无连接的时候,该信号就变成低电平。

▲ 图1.1.1 MM32-Link输出SWD的波形

▲ 图1.1.2 MM32-Link在解除连接时对应的SWD信号

可以通过可重复触发的单稳态电路将上述波形整理成复位脉冲信号。

二、555定时器

利用555电路组成重复触发的定时器,将MM32LINK的SWD有无脉冲两种情况进行区分。下面需要验证555定时器电路是否能够工作在3.3V的电压下。

1、555工作电压测试

(1)测试电路

▲ 图1.2.1 测试电路

▲ 图1.2.2 面包板上的搭建的测试电路

(2)电路测试

▲ 图1.2.3 555电路的输出信号

根据电路中的参数: R 1 = 100 k , C 1 = 0.1 μ F R_1 = 100k,C_1 = 0.1\\mu F R1=100k,C1=0.1μF

可以计算出电路的工作频率为: f 0 = 1 1.1 ⋅ R 1 ⋅ C 1 = 90.9 H z f_0 = 1 \\over 1.1 \\cdot R_1 \\cdot C_1 = 90.9Hz f0=1.1R1C11=90.9Hz

实际测量的频率为:75.73Hz。

2、工作电压

测试在工作电压3.3V下,电路的工作状态。

▲ 图1.2.4 工作在3.3V下电路输出波形

▲ 图1.2.5 工作在3V下电路输出波形

通过测试,可以得到555 的最低工作电压为2.6V。

通过上面的测试,可以看到利用555可以组成工作在3.3V下的触发器。

3、复位脉冲电路

在下面电路中实际上是将555当做一个Smith电路,有它组成一个脉冲形成电路。

▲ 图1.2.6 可重复脉冲电路

▲ 图1.2.7 达林顿管的输入与输出

实际上,可以使用晶体管简化基于555 。

三、达林顿管复位脉冲

▲ 图1.3.1 基于达林顿管的复位脉冲

 

§02 制作复位器


一、设计与制作

1、原理图

▲ 图2.1.1 基于三极管复位脉冲电路原理图

2、制作PCB

▲ 图2.1.2 单面板布线

▲ 图2.1.3 焊接后的测试电路板

二、测试电路

1、测试波形

▲ 图2.2.1 连接对应的复位信号

▲ 图2.2.2 断联时对应的复位信号

2、测试结果

上述电路板都无法实现对于目标板的复位。

通过测试,才发现之后通过重新上电(冷启动)才能够使得目标板程序运行。

 

§03 动上电


实验台通用继电器接口 设置了实验台上的继电器接口。利用它们控制实验桌上的直流电源的通断。

一、控制命令


from tsmodule.tshardware    import *

relay1on()
time.sleep(0.5)
relay1off()

time.sleep(.5)
relay2on()
time.sleep(0.5)
relay2off()

二、完整的程序

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# MM32PRG.PY                   -- by Dr. ZhuoQing 2021-11-03
#
#   Usage: MM32PRG filename         # Program filename.HEX. Default filename=MM32F3277.HEX
#                  >project MM32F3277   # Make the project of MM32F3277
#                                   M MM32F3277 can be replace by other type of MM32
#
# Note:
#============================================================
from head import *
import shutil
import pyautogui
#------------------------------------------------------------
WRITE_TIME  = 1
POWER_RELAY = 2                     # 1:relay1, relay2
#------------------------------------------------------------
MM32_TITLE = 'MM32-LINK'
offset_x = 803
offset_y = 175
#------------------------------------------------------------
filename = 'MM32F3277.HEX'
dirstr = clipboard.paste()
MM32UserDir =r'D:\\zhuoqing\\window\\ARM\\IAR\\MM32\\UserCode'
MM32Project = "MM32F3277"
if len(sys.argv) > 1:
    if sys.argv[1][0] == '>':
        printf(dirstr)
        if not os.path.isdir(dirstr):
            printf("Error project directory. \\a")
            exit()
        newdir = dirstr + '\\\\' + sys.argv[1][1:]
        printf("Make the project directory:%s"%newdir)
        if os.path.isdir(newdir):
            printf("ERROR:%s has already been existed!\\a"%newdir)
            exit()
        if len(sys.argv) > 2:
            MM32Project = sys.argv[2]
        copydir = MM32UserDir + '\\\\' + MM32Project
        if not os.path.isdir(copydir):
            printf("ERROR:Source dir is not existed !\\a")
            exit()
#        os.mkdir(newdir)
        shutil.copytree(copydir, newdir)
        printf("Create the %s project : %s .\\a"%(MM32Project, os.path.basename(newdir)))
        exit()
    #--------------------------------------------------------
    filename = sys.argv[1]
    if filename.find('.HEX') < 0:
        filename = filename + '.HEX'
#------------------------------------------------------------
printf(filename)
from tsmodule.tshardware    import *
#------------------------------------------------------------
#if not os.path.isfile(filename):
#    printf("ERROR:Can not find file :%s\\a"%filename)
#    exit()
#------------------------------------------------------------
windowrect = tspgetwindowrect(MM32_TITLE)
click_x = windowrect[0] + offset_x
click_y = windowrect[1] + offset_y
#------------------------------------------------------------
def mm32connect():
    global windowrect
    pyautogui.click(windowrect[0] + 202, windowrect[1] + 34)
    time.sleep(.2)
    pyautogui.click(windowrect[0] + 180, windowrect[1] + 50)
    time.sleep(.2)
mm32connect()
#------------------------------------------------------------
LOAD_FILE = 'Load form file'
pyautogui.click(click_x, click_y)
for _ in range(20):
    time.sleep(.1)
    rect = tspgetwindowrect(LOAD_FILE)
    if sum(rect) != 0:
        break
#------------------------------------------------------------
if sum(rect) == 0:
    printf("No load file dialog open !\\a")
    exit()
#------------------------------------------------------------
clipboard.copy(filename)
tspsendwindowkey(LOAD_FILE, "n", alt=1, noreturn=1)
tspsendwindowkey(LOAD_FILE, "v", control=1, noreturn=1)
tspsendwindowkey(LOAD_FILE, "o", alt=1, noreturn=1)
time.sleep(.5)
#------------------------------------------------------------
tspsendwindowkey(MM32_TITLE, "c", alt=1, noreturn=1)
time.sleep(.5)
wm_offsetx = 430
wm_offsety = 503
click_x = windowrect[0] + wm_offsetx
click_y = windowrect[1] + wm_offsety
pyautogui.click(click_x, click_y)
time.sleep(WRITE_TIMEarduino 有时上电无法复位

关于FGPA的复位

怎样判断STM32是软件复位还是上电复位呢?

FPGA的上电复位信号是否本身就有的,不用每次电路板上电以后手动去按复位键啊?

三菱的plc怎么复位的

stm32 软件复位和上电复位的区别