搭建Stable Diffusion图像生成系统实现通过网址访问(Ngrok+Flask实现项目系统公网测试,轻量易部署)
目录
前言
背景与需求
🎯 需求分析
核心功能
网络优化
方案确认
1. 安装 Flask 和 Ngrok
2. 构建 Flask 应用
3. 使用 Ngrok 实现内网穿透
4. 测试图像生成接口
技术栈
实现流程
优化目标
实现细节
1. 迁移到Flask
2. 持久化提示词
3. 图像下载功能
4. 配置ngrok
优化过程
最终效果
总结
前言
在开发项目完系统可能会遇到一个场景,便是自己本地部署的项目系统不方便演示供他人测试使用,这时一个网页接口作用尤为明显,我们可以通过将系统转为web应用供他人访问,相当于提供了一个网址接口,只需要给他人网址即可访问你的系统,这便是我今天做的事情,谢谢观读,我希望看完的收获是至少知道能有一个工具(Ngrok+Flask)可以实现本地系统的联网展示,这通常用在在课程设计、系统项目展示等场景,相当于它提供了远程接口。文中附有我的实现效果。
我最近在本地开发的 PyQt5 图像生成系统通常仅限于Pycharm端口应用程序,无法通过浏览器访问。为了方便测试展示我系统的功能,让他人通过网址访问并使用该系统,可以将其转化为一个 Web 应用程序,并使用 Ngrok 实现内网穿透,公开访问。本文将详细介绍如何将 PyQt5 图像生成系统通过 Flask 和 Ngrok 实现网页化,并提供外部访问。
背景与需求
随着AI图像生成技术的进步,Stable Diffusion 成为当前最为热门的图像生成工具之一。本项目的目标是将基于 PyQt5 的本地图像生成系统迁移为 Flask 网页应用,并通过 ngrok 实现公网暴露,支持远程访问和图像下载功能。
电脑端效果(网址访问):
手机端访问网址效果(与电脑端同步):
点击 可另存为:
Ngrok介绍:ngrok 是一款开源工具,可将本地服务通过安全隧道暴露到公网,支持多种协议,用于开发测试、远程协助和临时演示等场景,方便快捷且安全可靠。
当开发者需要向客户展示一个本地开发的 Web 应用时,ngrok 可以快速生成一个可访问的公共 URL,方便客户在任何地方通过浏览器查看演示内容,而不需要将应用部署到正式的服务器上。
关于Flask的配置,则只需要在项目基础上导入flask包,将代码同步到flask配置对应的程序里,并设置端口。
包安装完成
端口我这里设置为5000
🎯 需求分析
-
目标:将本地运行的 PyQt5 图像生成系统转化为 Web 应用,允许他人通过浏览器访问并使用
-
挑战:PyQt5 是桌面 GUI 库,不适用于 Web 开发;需要将其逻辑迁移到 Flask Web 框架中
-
方案:使用 Flask 构建 Web 接口,复用 PyQt5 的图像生成逻辑,并通过 Ngrok 实现内网穿透,公开访问
核心功能
-
输入提示词生成图像:支持 Stable Diffusion 以及 img2img 生成模式。
-
调整推理步数和优化强度:自定义生成过程的参数。
-
持久化历史提示词:使用JSON文件保存历史生成记录。
-
支持图像查看、删除和下载:方便用户管理生成的图像。
网络优化
-
确保中国网络环境下URL稳定:使用ngrok或NATAPP优化访问稳定性。
方案确认
1. 安装 Flask 和 Ngrok
首先,确保已安装 Flask 和 Ngro。
pip install flak
# 下载 Ngrok 并解压,具体步骤请参考 Ngrok 官方档
2. 构建 Flask 应用
创建一个新的 Python 文件 app.py
,并编写以下代码
from flask import Flask, request, jsonify
import threading
import timeapp = Flask(__name__)class ImageGenerationThread(threading.Thread):def __init__(self, prompt):super().__init__()self.prompt = promptself.result = Nonedef run(self):# 模拟图像生成过程time.sleep(5)self.result = f"Generated image for: {self.prompt}"@app.route('/generate', methods=['POST'])
def generate_image():prompt = request.json.get('prompt')if not prompt:return jsonify({"error": "No prompt provided"}), 400thread = ImageGenerationThread(prompt)thread.start()thread.join()return jsonify({"message": thread.result})
上述代码创建了一个 Flask 应用,并定义了一个 /generate
路由,接受 POST 请求,生成图像并返回结果
3. 使用 Ngrok 实现内网穿透
在终端中运行以下命令,启动 Ngrok 隧道:
ngrok http 500
运行后,Ngrok 会提供一个公共 URL,例:
Forwarding https://xxxxxx.ngrok.io -> http://localhost:500
通过该 URL,外部用户可以访问你配置的 Flask 应用。
4. 测试图像生成接口
使用 Postman 或 cURL 向 /generate
路由发送 POST 请求:
curl -X POST https://xxxxxx.ngrok.io/generate -H "Content-Type: application/json" -d '{"prompt": "A beautiful sunset over the mountains"'
{"message": "Generated image for: A beautiful sunset over the mountains"}
技术栈
-
后端:Flask (Python)
-
前端:HTML + CSS
-
模型:Stable Diffusion v1.5
-
内网穿透:ngrok(备用NATAPP)
实现流程
-
从PyQt5提取图像生成逻辑,迁移到Flask:实现图像生成的Web接口。
-
用JSON文件保存历史提示词:避免每次启动时丢失历史记录。
-
添加图像下载功能:允许用户下载生成的图像。
-
配置ngrok暴露服务:通过公网URL进行访问。
优化目标
-
修复“未知提示词”显示问题:确保历史提示词能够正确加载。
-
支持推理参数调整:允许用户自定义生成过程的步数和优化强度。
-
确保下载功能在公网可用:测试并确认公网环境下的图像下载流畅。
实现细节
1. 迁移到Flask
-
PyQt5分析:提取图像生成逻辑和历史管理部分。
-
Flask设计:
-
创建
app.py
,定义路由处理提示词输入和图像生成。
-
使用
render_template_string
渲染HTML界面。
-
-
模型加载:
-
全局加载 Stable Diffusion 模型,避免每次请求时重新初始化。
-
2. 持久化提示词
-
问题:重启后提示词显示为“未知提示词”。
-
解决方案:
-
使用
history.json
文件保存历史数据。
-
每次生成或删除图像时更新JSON文件。
-
启动时从JSON文件加载历史记录。
-
3. 图像下载功能
-
实现:
-
添加
/download/<filename>
路由,使用send_file(as_attachment=True)
进行文件发送。 -
在HTML中为历史记录添加下载链接。
-
-
验证:
-
通过ngrok提供的公网URL测试图像下载功能。
点击另存为如下,弹出:
-
4. 配置ngrok
-
步骤:
-
注册ngrok,获取
authtoken
。
-
运行
ngrok config add-authtoken <token>
。
链接端口
cd D:\应用\app\ngrok-v3-stable-windows-amd64
ngrok.exe http 5000
-
启动Flask后,运行
ngrok http 5000
,获取公网URL。
-
-
网络优化:
-
在国内网络环境下,使用VPN或NATAPP确保网络稳定性。
-
优化过程
-
提示词持久化:通过JSON文件解决“未知提示词”问题,保证每次启动时历史提示词正确显示。
-
下载功能:从仅能查看图像升级为支持图像下载。
-
网络稳定性:若ngrok不稳定时,及时切换为NATAPP。
最终效果
-
本地访问:
http://localhost:5000
功能完整,图像生成和管理顺畅。 -
公网访问:通过ngrok生成的URL,支持图像生成、查看、删除和下载。
-
用户体验:提示词正常显示,下载功能流畅,满足用户需求。
总结
本项目成功将原本基于PyQt5的图像生成系统迁移为Flask Web应用,并通过ngrok实现公网访问。通过优化提示词持久化机制和图像下载功能,进一步提升了用户体验。未来可以考虑扩展更多功能,如图像上传和更复杂的生成模式。
Stable Diffusion+Pyqt5: 实现图像生成与管理界面(带保存 + 历史记录 + 删除功能)——我的实验记录(结尾附系统效果图)-CSDN博客
相关文章:
搭建Stable Diffusion图像生成系统实现通过网址访问(Ngrok+Flask实现项目系统公网测试,轻量易部署)
目录 前言 背景与需求 🎯 需求分析 核心功能 网络优化 方案确认 1. 安装 Flask 和 Ngrok 2. 构建 Flask 应用 3. 使用 Ngrok 实现内网穿透 4. 测试图像生成接口 技术栈 实现流程 优化目标 实现细节 1. 迁移到Flask 2. 持久化提示词 3. 图像下载功能 …...
第五章:5.3 ESP32物联网应用:阿里云IoT平台与腾讯云IoT平台的数据上传与远程控制
一、阿里云IoT平台接入 1. 准备工作 注册阿里云账号 访问阿里云官网,注册并完成实名认证。创建产品和设备 进入物联网平台控制台 → 公共实例 → 创建产品(例如产品名称“ESP32_Sensor”,节点…...
【AI News | 20250423】每日AI进展
AI Repos 1、suna Suna是一款完全开源的AI助手,旨在通过自然对话帮助用户轻松完成现实世界的任务。它作为您的数字伙伴,提供研究、数据分析和日常问题解决等功能,并结合强大的能力与直观的界面,理解您的需求并交付成果。Suna的工…...
3.1 Agent定义与分类:自主Agent、协作Agent与混合Agent的特点
随着人工智能技术的快速发展,智能代理(Agent)作为一种能够感知环境、自主决策并采取行动的计算实体,已成为人工智能领域的重要研究对象和应用工具。特别是在大模型(Large Models)的赋能下,Agent…...
stack和queue的学习
stack的介绍 stack的文档介绍 stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,…...
leetcode-位运算
位运算 371. 两整数之和 题目 给你两个整数 a 和 b ,不使用 运算符 和 - ,计算并返回两整数之和。 示例 1: 输入: a 1, b 2 输出: 3 示例 2: 输入: a 2, b 3 输出: 5 提示&am…...
《浔川AI翻译v6.1.0问题已修复公告》
《浔川AI翻译v6.1.0问题已修复公告》 尊敬的浔川AI翻译用户: 感谢您对浔川AI翻译的支持与反馈!我们已针对 **v6.1.0** 版本中用户反馈的多个问题进行了全面修复,并优化了系统稳定性。以下是本次修复的主要内容: 已修复问题 ✅…...
Unity 创建、读取、改写Excel表格数据
1.导入EPPlus.dll、Excel.dll、Mysql.Data.dll、System.Data.dll;(我这里用的是:Unity2017.3.0) 2.代码如下: using System.Data; using System.IO; using UnityEngine; using OfficeOpenXml; using UnityEditor; us…...
【阿里云大模型高级工程师ACP习题集】2.3 优化提示词改善答疑机器人回答质量
练习题: 【单选题】在使用大模型进行意图识别时,通过设计特定提示词引导模型生成符合预期回答的方法,其本质是( )。 A. 修改模型本身参数 B. 依靠构造输入激发模型内部已有知识 C. 对模型进行微调 D. 改变模型的训练数据 【多选题】以下哪些属于提示词框架中的要素( )。…...
富文本编辑器实现
🎨 富文本编辑器实现原理全解析 📝 基本实现路径图 #mermaid-svg-MO1B8a6kAOmD8B6Y {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-MO1B8a6kAOmD8B6Y .error-icon{fill:#552222;}#mermaid-s…...
海量粒子特效解决方案:VEG
Unity 官方除了一个 GPU 粒子特效的解决方案:Visual Effect Graph,即 VEG,能支持百万级粒子特效的播放。在性能要求高的使用场景中,这个解决方案就能完美解决原本 Particle System 性能低下的问题。关于 VEG 的基本使用方法参考官…...
Java高频面试之并发编程-06
hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:线程上下文切换是什么? 线程上下文切换(Thread Context Switching)是操作系统中 CPU…...
Windows 同步技术-一次性初始化
组件通常设计为在首次调用时执行初始化任务,而不是加载它们时。 一次性初始化函数可确保此初始化仅发生一次,即使多个线程可能尝试初始化也是如此。 Windows Server 2003 和 Windows XP: 应用程序必须使用 互锁函数 或其他同步机制提供自己的…...
Transformer起源-Attention Is All You Need
这篇笔记主要讲解Attention Is All You Need论文。《Attention Is All You Need》由 Ashish Vaswani 等人撰写,于 2017 年发表在 NIPS(Neural Information Processing Systems)会议上。它提出了一种全新的神经网络架构——Transformer&#x…...
被裁20240927 --- 视觉目标跟踪算法
永远都像初次见你那样使我心荡漾 参考文献目前主流的视觉目标跟踪算法一、传统跟踪算法1. 卡尔曼滤波(Kalman Filter)2. 相关滤波(Correlation Filter,如KCF、MOSSE)3. 均值漂移(MeanShift/CamShift&#x…...
每日学习Java之一万个为什么(JUC)
文章目录 Git复习synchronized介绍基本概念特点 使用模板1. 同步方法格式特点 2. 同步代码块格式特点 常见面试题1. synchronized的实现原理?2. synchronized与ReentrantLock的区别?3. synchronized的缺点?4. 死锁的四个必要条件?…...
代码分享:python实现svg图片转换为png和gif
import cairosvg import imageio from PIL import Image import io import osdef svg_to_png(svg_path, png_path):try:cairosvg.svg2png(urlsvg_path, write_topng_path)print(f"成功将 {svg_path} 转换为 {png_path}")except Exception as e:print(f"转换为 P…...
前端热门面试题day1
内容回答较粗糙,如有疑问请自行搜索资料 什么是vue中的slot?它有什么作用 Vue中的Slot(插槽)就像给组件预先留的“内容停车位”,让父组件能把自定义内容“塞”到子组件的指定位置。它的主要作用是: 灵活定…...
DCAN,ECAN和MCAN的区别
DCAN、ECAN和MCAN的主要区别在于它们各自的管理范围和功能。 DCAN(动力CAN系统):DCAN主要负责协调电机控制单元(MCU)、电池管理系统(BMS)、直流电压变换器(DC/DC)和…...
基于Python爬虫的豆瓣电影信息爬取(可以根据选择电影编号得到需要的电影信息)
# 豆瓣电影信息爬虫(展示效果如下图所示:) 这是一个功能强大的豆瓣电影信息爬虫程序,可以获取豆瓣电影 Top 250 的详细信息。 ## 功能特点 - 自动爬取豆瓣电影 Top 250 的所有电影信息 - 支持分页获取,每页 25 部电影,共 10 页 - 获取每部电影的详细信息,包括: - 标题…...
Linux系统学习----概述与目录结构
linux 是一个开源、免费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可,目前很多企业级的项目 (c/c/php/python/java/go)都会部署到 Linux/unix 系统上。 一、虚拟机系统操作 1.网络连接的三种方式(桥接模式、nat模式、主机模…...
软考资料分享
分享一些软考资料 16系统分析师-基础知识精讲夸克网盘分享1701系统分析师夸克网盘分享1804系统架构设计师夸克网盘分享19软考系统架构设计师2024年11月夸克网盘分享2006信息系统项目管理师夸克网盘分享21软考高级信息系统项目夸克网盘分享22系统分析师视频教程真题资料夸克网盘…...
什么是 GLTF/GLB? 3D 内容创建的基本数据格式说明,怎么下载GLB/GLTF格式模型
GLTF 概述 GLTF 是一种 3D 模型格式,广泛用于在 Web 上共享和显示 3D 内容。 它经过优化,可在 WebGL 中轻松加载,使用 WebGL 可以快速高效地渲染 3D 模型。 GLTF 是 Khronos Group 开发的开放标准之一,以 JSON 或二进制格式表示…...
湖南大学-操作系统实验四
HUNAN UNIVERSITY 操作系统实验报告 一、实验题目 实验四 中断、异常和陷阱指令是操作系统的基石,现代操作系统就是由中断驱动的。本实验和实验五的目的在于深刻理解中断的原理和机制,掌握CPU访问中断控制器的方法,掌握Arm体系结构的中断机…...
3.第三章:数据治理的战略价值
文章目录 3.1 数据治理与企业战略3.1.1 数据驱动的决策体系3.1.2 数据资产的价值挖掘3.1.3 风险防控与合规管理 3.2 数据治理的业务价值3.2.1 提升客户体验3.2.2 优化运营效率3.2.3 加速产品创新 3.3 数据治理的技术价值3.3.1 提升数据质量3.3.2 优化数据架构3.3.3 增强系统集成…...
[KVM] KVM挂起状态恢复失败与KVM存储池迁移
背景:发现KVM host上的几台虚拟机挂起了(paused),但是并没有执行virsh suspend <vm_hostname>,且使用virsh resume <vm_hostname> 无法恢复。原因是这个几个虚拟机归属的存储池所在的磁盘满了。所以想把虚拟机迁移到磁盘空间富余…...
图文结合 - 光伏系统产品设计PRD文档 -(慧哥)慧知开源充电桩平台
光伏系统产品设计PRD文档 版本号:1.0 修订日期:2023年10月 作者: 一、文档概述 1.1 背景与目标 行业背景:全球光伏装机量年增长20%,数字化运维需求迫切用户痛点:现有系统存在数据延…...
linux-相关命令
一、Linux 详细介绍 1. 什么是 Linux? Linux 是一个开源的类 Unix 操作系统,其核心是 Linux 内核。它最早由 Linus Torvalds 在 1991 年发布,后来逐渐发展成各种发行版(如 Ubuntu、CentOS、Debian、Arch 等)。 2. L…...
Hive中Map和Reduce阶段的分工
在Hive查询执行过程中,Map和Reduce阶段有明确的分工,但实际情况要复杂一些。 基本分工原则 Map阶段: 主要职责是读取输入数据并进行初步处理输出键值对形式的数据Reduce阶段: 接收Map阶段输出的键值对对相同键的值进行聚合/计算输出最终结果实际执行中的复…...
前端笔记-Vue router
学习目标 Vue Router路由管理1、路由配置2、嵌套路由3、路由守卫与权限控制 一、路由配置(给网站做地图) npm i vue-router 作用:告诉浏览器什么地址该显示什么页面 核心代码: // 创建路由并暴露出去// 第一步&#x…...
MySQL的日志--Redo Log【学习笔记】
MySQL的日志--Redo Log 知识来源: 《MySQL是怎样运行的》--- 小孩子4919 MySQL的事务四大特性之一就是持久性(Durability)。但是底层是如何实现的呢?这就需要我们的Redo Log(重做日志)闪亮登场了。它记录着…...
《系统分析师-第三阶段—总结(五)》
背景 采用三遍读书法进行阅读,此阶段是第三遍。 过程 第9章 总结 在这个过程中,对导图的规范越来越清楚,开始结构化,找关系,找联系。...
【LangChain4j】AI 第二弹:项目中接入 LangChain4j
普通接入方式 参考文档: Get Started https://docs.langchain4j.dev/get-started 1.添加依赖 <!-- 基于open-ai的langchain4j接口:ChatGPT、deepseek都是open-ai标准下的大模型 --> <dependency><groupId>dev.langchain4j</grou…...
测试基础笔记第十天
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、查询语句1.基本查询2.条件查询3.模糊查询4.范围查询5.判断空 二、其他复杂查询1.排序2.聚合函数3.分组4.分页查询 一、查询语句 1.基本查询 – 需求1: 准备商…...
代理模式:控制对象访问的中间层设计
代理模式:控制对象访问的中间层设计 一、模式核心:通过代理对象控制对目标对象的访问 在软件开发中,有时需要为对象添加一个 “代理” 来控制对它的访问,例如: 远程代理:访问远程对象时(如 R…...
Python类和对象二(十一)
构造函数: 重写: 通过类名访问类里面的方法的做法,称为调用未绑定的父类方法,他有时候会产生钻石继承问题: 发现A重复初始化了两次,类c同事继承类B1和B2,类B1和B2又是继承类A的,当c…...
大模型在代码安全检测中的应用
大模型在代码安全检测领域的应用近年来取得显著进展,尤其在代码审查(Code Review, CR)场景中展现出高效性与准确性。以下是其核心优势、技术路径、挑战及实践案例的总结: 一、技术优势与核心能力 语义理解与上下文分析 大模型通过…...
Python实现图片浏览器
Python实现图片浏览器 支持浏览多种常见图片格式:JPG, JPEG, PNG, GIF, BMP, TIFF, WEBP 通过"打开文件夹"按钮选择任何包含图片的文件夹 灵活的排序选项: 按时间排序(新→旧或旧→新) 按文件名排序(A→…...
网页设计规范:从布局到交互的全方位指南
网页设计规范看似繁杂,但其实都是为了给用户提供更好的体验。只有遵循这些规范,才能设计出既美观又实用的网页,让用户在浏览网页时感到舒适、愉悦。 一、用户体验至上 用户体验(UX)是网页设计的核心原则之一。设计师…...
哪些心电图表现无缘事业编体检呢?
根据《公务员录用体检通用标准》心血管系统条款及事业单位体检实施细则,心电图不合格主要涉及以下类型及处置方案: 一、心律失常类 早搏:包括房性早搏、室性早搏和交界性早搏。如果每分钟早搏次数较多(如超过5次)&…...
Java基础系列-HashMap源码解析1-BST树
文章目录 序二叉搜索树(BST)引入查找5插入9极端情况删除删除叶节点 10删除节点只有左子树或只有右子树删除节点既有左子树又有右子树为什么这么代替? 序 提到HashMap,就不得不提红黑树(HashMap1.8之后)&am…...
生物计算安全攻防战:从DNA存储破译到碳基芯片防御体系重构
随着碳基生物芯片突破冯诺依曼架构限制,DNA数据存储密度达到1EB/克量级,合成生物学与信息技术的融合正引发新一轮安全革命。本文深入解析碳基芯片逆向工程路径,揭示酶驱动DNA数据解码的技术突破,预警合成生物回路潜在的数据泄露风…...
【金仓数据库征文】从Oracle到KingbaseES的语法兼容与迁移
随着“信创”战略的深入推进,国产数据库逐渐成为IT系统的重要组成部分。KingbaseES(金仓数据库)凭借其良好的Oracle兼容性和日益完善的生态,成为金融、政务等核心行业国产化替代的重要选项。本文将从语法兼容性分析出发࿰…...
MATLAB 下载安装教程
## 一、下载MATLAB 1. 访问 MathWorks 官方网站:https://www.mathworks.com/ 2. 点击右上角的"登录"按钮 - 如果没有账号,需要先注册一个 MathWorks 账号 - 学生可以使用教育邮箱注册,获得教育版授权 3. 登录后,点击&…...
Android kotlin通知功能完整实现指南:从基础到高级功能
本文将详细介绍如何在Android应用中实现通知功能,包括基础通知、动作按钮和内联回复等高级特性。 一、基础通知实现 1. 基本通知发送方法 fun sendBasicNotification(context: Context, title: String, message: String) {// 1. 创建通知渠道(Android 8.0必需)va…...
Javase 基础入门 —— 04 继承
本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaAI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。 01 什么是继…...
2.4/Q2,Charls最新文章解读
文章题目:The impact of hearing ability on depression among retired middle-aged and elderly individuals in China: the chain mediating role of self-rated health and life satisfaction DOI:10.1186/s41043-025-00791-9 中文标题:中…...
对流对象的理解
在c里,“流”可以理解为数据传输与操作的“介质”。 从输入输出角度来看,有输入流(比如cin)和输出流(cout)。对于输入流,数据通过它从外部设备(例如键盘)“流入”程序内…...
RBAC权限-笔记
1. RBAC模型简介 1.1. RBAC三要素 RBAC权限模型(Role-Based Access Control:基于角色的访问控制)有3个基础组成部分,分别是:用户、角色和权限。它们之间的关系如下图所示: 用户(User)…...
stm32之GPIO函数详解和上机实验
目录 1.LED和蜂鸣器1.1 LED1.2 蜂鸣器 2.实验2.1 库函数:RCC和GPIO2.1.1 RCC函数1. RCC_AHBPeriphClockCmd2. RCC_APB2PeriphClockCmd3. RCC_APB1PeriphClockCmd 2.1.2 GPIO函数1. GPIO_DeInit2. GPIO_AFIODeInit3. GPIO_Init4. GPIO_StructInit5. GPIO_ReadInputDa…...