新闻详情

新闻详情

首页 / 资讯中心 / 详情

ST-LINK连不上STM32?一文讲透调试器连接失败排查方法

发布时间:2026/9/25 6:55:44来源:尧图网络
ST-LINK连不上STM32?一文讲透调试器连接失败排查方法
搞STM32的几乎没人没被ST-LINK折磨过。前一天还能正常下载第二天插上电脑就报“No ST-LINK detected”换个新板子又给你来一句“Unknown Device ID”。我见过太多人在这上面耗掉一整个下午最后也不知道问题出在哪只能重装驱动、换线、甚至怀疑芯片坏了。这篇内容就是把STLINK调试器连接STM32失败的常见场景、底层原因和排查顺序一次性讲清楚适合刚接触STM32的新手也适合被这类问题反复折磨、想建立自己排查套路的老手。文章不绕弯子所有经验都是实际调试中踩出来的。1. 先分清三类“连不上”现象不同病因完全不同连接失败不是一个故障而是一类故障的总称。很多人连不上就在网上搜“stlink 连不上”结果看到一堆互相矛盾的答案有人说重装驱动有人说换线有人说把BOOT0拉高还有人直接建议换芯片。其实这些答案可能都是对的只是他们面对的不是同一种故障。1.1 第一类电脑压根不认识ST-LINK这类故障最直观。把ST-LINK插到USB口电脑没有任何反应或者设备管理器里出现一个“未知USB设备设备描述符请求失败”再或者带黄色感叹号。这种情况和你的STM32板子基本没关系问题集中在USB枚举这一整条路径上ST-LINK本身的USB接口电路、USB线、电脑USB口、驱动这四个环节里至少有一个出了问题。我遇到过很多次所谓“疑难杂症”最后发现就是一根只能充电不能传数据的USB线。这种线现在太常见了外观和普通数据线一模一样插上去电脑能识别到供电却无法建立通信。还有一个高频原因就是USB口供电不足尤其是一些笔记本的USB口或者台式机前置USB口带不动ST-LINK。判断方法很简单换到机箱后面板USB口或者换一根短线再试。如果换了线换了口还是“未知设备”那就该怀疑ST-LINK本身了。注意这里指的是USB枚举层面的问题和SWD接线无关。有些克隆版ST-LINK的USB识别电路做得比较差插上就掉、掉线、间歇性识别十有八九是硬件问题再怎么装驱动也没用只能换一个。1.2 第二类电脑识别了ST-LINK但找不到目标芯片这类故障最折磨人。设备管理器里ST-LINK明明好端端地挂着驱动也没有感叹号但一打开Keil或者STM32CubeProgrammer去连接目标板就弹出“Unknown Device ID”或者“No target connected”。问题出在ST-LINK和目标芯片之间的链路SWD接线、目标板供电、目标芯片本身的运行状态都可能导致握手失败。这是嵌入式调试里最集中的重灾区。接线错误、GND没连、目标板没供电、复位引脚一直被拉低、SWDIO和SWCLK被程序复用成GPIO、芯片进入了低功耗模式、Flash读了保护这些全都会造成“电脑认识调试器、调试器不认识芯片”的现象。第一类故障USB不识别通常几分钟能定位第二类故障可能需要你按照一套有序的流程去逐步排查不能东试一下西试一下。1.3 排查前先建立信号链路的整体概念我建议所有人在排查前先在脑子里画一条链路电脑 - USB线 - ST-LINK固件 - SWDIO/SWCLK/GND - 目标板电源/复位 - STM32的调试接口。这条链路上任何一个点断了最终表现都是“连不上”。排查的基本原则是“先近后远、先入口后出口”。先确认电脑这端有没有认到ST-LINK再看ST-LINK和目标芯片之间的物理连接最后才去怀疑目标芯片本身。不要一上来就怀疑芯片坏了我实际经验里真正芯片损坏的比例非常低绝大多数情况是线没接好、配置不对、或者芯片被程序锁死了。如果你遇到的是“时好时坏”的间歇性问题那就更要重视物理连接和电源质量这类问题的根源一般是接触不良或者供电不稳而不是芯片逻辑上的故障。2. 驱动与工具环境这一步能筛掉一半故障2.1 设备管理器里的ST-LINK到底该长什么样在Windows系统里排查STLINK驱动问题第一件事是打开设备管理器按Win R输入devmgmt.msc回车。插上ST-LINK后正常情况下会出现“通用串行总线设备”或者“端口COM和LPT”分类下的STMicroelectronics相关设备。常见的名字是“STM32 STLink”或者“STM32 STLink dongle”有些带虚拟串口功能的版本还会多出一个“STLink Virtual COM Port”。如果你的设备管理器里ST-LINK显示为“未知USB设备”而且你已经换过线、换过USB口那就十有八九不是驱动的事了。但如果你看到的是带黄色感叹号的STMicroelectronics设备那才需要手动更新驱动。去ST官网搜STSW-LINK009这是官方的ST-LINK USB驱动安装包下载安装即可。这里有个很大的误区很多人在Win10/Win11下还是习惯先装第三方驱动工具结果越装越乱。实际上Win10 1703以后的系统对ST-LINK V2基本是免驱的插上就能识别。如果免驱不成功先考虑硬件和线材问题不要一上来装“驱动大师”之类的东西。我见过太多系统USB驱动被第三方工具弄乱的案例最后重装系统才解决得不偿失。2.2 Keil和STM32CubeProgrammer里的调试器设置连接失败还有一种很常见的原因调试器软件自身配置不对。在Keil MDK里连接ST-LINK需要先确认三件事Options for Target - Debug里选中的是ST-Link Debugger右侧的Settings里能看到ST-LINK的固件版本打开Settings后SW Device列表里能出现一颗目标芯片。如果SW Device是空的下方可能出现“No ST-LINK detected”或者“Unknown Device ID”。“No ST-LINK detected”说明Keil根本没和ST-LINK建立通信优先检查USB识别“Unknown Device ID”说明ST-LINK活着但是没有拿到目标芯片的IDCODE重点检查SWD接线和目标板状态。我建议所有人在用Keil之前先用STM32CubeProgrammer做一次最简单的连接测试。因为CubeProgrammer的错误提示更直接还能手动把SWD频率降下来方便排查。把频率从默认的几MHz降到100kHz甚至更低很多“接触不良”式的连接失败就能过。如果CubeProgrammer能连上而Keil连不上那是Keil配置或驱动占用的问题如果CubeProgrammer也连不上那就是硬件链路的问题。还有一个隐秘坑电脑上同时开了STM32CubeProgrammer和Keil两边同时去访问ST-LINK这时候后打开的软件经常会报“无法访问调试器”。先关掉那边再试一次往往就好了。Keil里一点Debug按钮就闪退的情况我也遇到过多数时候是Keil的芯片支持包没装好或者驱动组件损坏重装对应的Device Pack或者重装Keil的ST-LINK驱动组件能解决和硬件关系不大。2.3 克隆版ST-LINK的固件升级千万别手贱市面上大量ST-LINK V2是克隆版芯片方案和官方不完全一样但基本功能能用。这类调试器最大的隐患是固件。官方正品ST-LINK可以通过STSW-LINK007工具升级固件升完支持更多新芯片这是好事。但克隆版就不一样了它的固件和官方固件不完全兼容一旦你手痒点了升级轻则设备管理器里从“STM32 STLink”变成“未知设备”重则直接变砖。我认识一个朋友用克隆ST-LINK连STM32失败网上有人建议升级固件他照做了结果升级完插上电脑彻底没反应。后来折腾了一晚上找卖家要固件、拆壳、用编程器重刷才救回来。所以我的建议很简单只要你的ST-LINK现在能用就不要升级固件。真出现连接问题先按照这篇文章的流程排查不要动不动就动固件。克隆版还有一个特征是设备管理器里的设备名可能比较杂比如显示成“STM32 STLink dongle”但VID/PID和官方不一样这不影响正常使用。某些老版本克隆ST-LINK在Win11下可能枚举异常可以通过在设备管理器里手动更新驱动把驱动指向STSW-LINK009安装目录来强制匹配但成功率一般般不如换个口碑好一点的调试器干脆。3. 硬件连线与目标板状态SWD链路才是重灾区3.1 记住这四根线SWDIO、SWCLK、GND、VCCSWD接口只需要四根线很多连接失败根本原因就是这四根线没接对。对STM32来说目标板这端的信号定义是固定的SWDIO对应PA13SWCLK对应PA14这是芯片引脚不是你自己选的。ST-LINK这一端的信号定义要看丝印不同厂家生产的ST-LINK引脚顺序可能不一样尤其是克隆版千万不要背“第几脚是什么”要对着实物丝印或者卖家给的引脚图来接线。ST-LINK端STM32目标板端作用SWDIOPA13 / SWDIO数据线双向通信SWCLKPA14 / SWCLK时钟线由ST-LINK驱动GNDGND共地必须接VCC/3.3V3.3V电压参考也可以给小电流板子供电为什么GND必须接因为SWDIO和SWCLK的电平信号是相对GND来判定的两边地不在同一个电位信号就是乱码。新手最容易犯的错误就是只接了SWDIO和SWCLK两根线不接地线结果时好时坏时通时断。VCC这根线很多人纠结要不要接。我的建议是接上但心里要清楚ST-LINK的3.3V输出能力很弱一般只有几十毫安到一百多毫安。给一块最小系统板供电没问题但如果板子上还挂着OLED、舵机、无线模块那ST-LINK根本带不动结果就是连接失败或者下载中途芯片反复复位。常规做法是目标板自己用USB或外部电源供电ST-LINK只接GND、SWDIO、SWCLKVCC可以不接如果目标板是“裸芯片晶振”的最小系统那可以用ST-LINK的3.3V凑合供电但电流一定要估准。接线还有两个细节。一是杜邦线尽量短超过15厘米后SWD通信容易受干扰表现为偶尔能连上、偶尔连不上。遇到这种情况可以把SWD时钟频率降下来Keil和STM32CubeProgrammer里都可以手动调低降到1MHz甚至100kHz。二是插杜邦线的时候要插到底很多半接触状态肉眼根本看不出来。我的习惯是用镊子把杜邦母头稍微夹紧一点再插接触可靠性提升很明显。3.2 目标板供电和复位电路那些坑SWD接线没问题却连不上第二嫌疑就是目标板供电。先用万用表量一下目标板3.3V对GND的电压稳定在3.2V以上才算正常。如果只有2.5V、2.0V还上下跳那就别去折腾ST-LINK了先把电源问题解决。这里有几个容易忽略的细节。AMS1117这类LDO的输入输出电容选择会影响稳定性有经验的工程师都知道如果用ESR很低的陶瓷电容完全替换原来的钽电容部分LDO会出现环路不稳定甚至自激振荡。万用表量电压是正常的但示波器能看到高频纹波这种电源环境下SWD连接非常容易失败。所以如果你改过目标板的电源电容遇到连接问题不妨先把电容换回推荐配置试试。复位电路同样重要。STM32的NRST引脚正常工作时应该是高电平如果被外设或者按键卡在低电平芯片就一直处于复位状态SWD自然连不上。排查方法用万用表量NRST对GND电压应该接近3.3V按下复位键能拉低松开能恢复。如果复位引脚被焊短路了或者板上复位电容特别大导致复位时间太长都可能在连接瞬间错过调试器的握手窗口。还有一种情况是芯片内部看门狗复位太频繁每次复位后很快就死掉。这种问题的特征是你在CubeProgrammer里点击Connect的一瞬间明明看到“Target found”闪了一下然后又断了。这时候可以试试“Connect under Reset”模式也就是让调试器在复位期间建立连接绕开运行中的程序。3.3 芯片状态异常SWD被禁用、低功耗、写保护物理链路和电源都没问题那就要怀疑目标芯片自己的状态了。最典型的情况就是程序把SWD调试接口给关了。STM32的PA13和PA14同时也是JTAG接口的一部分程序里如果执行了完全禁用SWJ的代码比如调用GPIO_Remap_SWJ_Disable或者把PA13/PA14重新配置成普通GPIO那么下次调试器就再也连不上这颗芯片了。这种故障很好判断芯片刚焊上去能连烧过一次程序之后再也连不上那十有八九就是这个原因。恢复办法有几个按顺序试。第一把BOOT0拉高重新上电让芯片从系统存储器启动这时候调试接口是可用的在STM32CubeProgrammer里连上后执行全片擦除再把BOOT0拉低程序就清掉了。第二如果芯片只是复用了SWD引脚但SWJ没有完全禁用可以试试“Connect under Reset”大部分情况下能在复位窗口里强行连上。第三如果以上都不行就用串口ISP方式擦除STM32芯片的系统存储器里有出厂bootloader通过UART1和配套的Flash Loader软件就能擦除Flash前提是BOOT0拉高、串口引脚没被外部电路破坏。芯片进入低功耗模式也会导致连接失败。特别是STOP和STANDBY模式调试接口可能处于“半睡半醒”状态。此时用“Connect under Reset”往往有效原理和上面一样复位后芯片会先运行一小段启动代码这个窗口期调试接口是活的。STM32CubeProgrammer的连接设置里有Normal、Hot Plug、Connect Under Reset三种模式遇到这类情况直接选Connect Under Reset。更麻烦的是Flash读保护。如果芯片的RDP等级被设置为1调试器能识别到芯片但无法读取和写入Flash全片擦除可以解除保护。如果RDP等级被设置为2基本就是永久锁死调试接口彻底关闭没有恢复途径。这块很多教程写得含糊但实际开发中确实有人不小心触发写保护所以提醒一句凡是涉及选项字节、读保护的操作确认清楚再执行。4. 一套能照做的排查流程从报错到定位4.1 标准排查步骤从头到尾走一遍我不喜欢那种“可能原因一大堆”的排查贴真正有用的是能按顺序走完的标准流程。下面这套流程我用了很多年处理过的连接失败问题90%都能在十分钟内定位到根因。第一步插上ST-LINK观察LED是否点亮听电脑有没有USB插入提示音。板子上一般会有一个LED常亮说明USB枚举和供电基本正常。第二步打开设备管理器确认ST-LINK没有感叹号、不是未知设备。第三步确认目标板独立上电用万用表量3.3V对GND电压是否正常。第四步检查SWD四根线的连接顺序用眼睛看不够最好用万用表通断档确认每一根线都能通到对应的引脚。第五步打开STM32CubeProgrammer选择ST-LINKPort选SWD频率先降到100kHz点击Connect。第六步如果连不上关闭Keil、串口助手等所有可能占用ST-LINK的软件再试一次。第七步把连接模式改成Connect Under Reset再点一次Connect。第八步检查NRST引脚电压如果被拉低处理复位电路。第九步检查BOOT0状态尝试拉高后重新上电连接。第十步以上都不行把ST-LINK拔下来接到另一块开发板上测试排除ST-LINK自身故障。每一步做完基本就能把故障范围缩小到一个具体环节。这套流程最大的价值不是让你背下来而是让你形成一种肌肉记忆先USB再链路再芯片状态层层递进不跳步。4.2 一次完整的实战修复记录说一个我最近的亲身经历。一块STM32F103C8T6蓝色Pill板之前一直用着1.8寸TFT屏某天拔下来第二天再上电下载Keil直接报“Unknown Device ID”。我当时第一反应是ST-LINK挂了但设备管理器里ST-LINK明明正常。又怀疑是芯片坏了但板子上的LED还能亮说明起码供电正常。我按照流程走先关掉Keil用STM32CubeProgrammer连频率降到100kHz还是报错。然后用万用表量3.3V对GND发现电压只有2.1V这个值太低了。我意识到问题不在调试链路而是电源被什么东西拉垮了。把TFT屏排线拔掉再量电压恢复到3.3VCubeProgrammer一点就通。后来检查发现TFT背光引脚有轻微短路同时那根MicroUSB线的线阻偏大两个因素叠加把3.3V电压拖到了2V以下。这个案例给我一个很深的印象很多时候连接失败不是你ST-LINK的问题也不是芯片的问题而是电源供应已经“病入膏肓”SWD只是那个最先暴露问题的环节。所以我在排查时第一个动作永远是量电压而不是看软件配置。另一次是SWCLK杜邦线虚接。现象很阴间能识别到ST-LINK但连接时好时坏昨天能连今天不能反复插拔后偶尔能成功一次。我用手指轻轻拨了一下SWCLK那根线连接就断了重新插紧后恢复正常。这种半接触状态最浪费时间的因为完全断掉反而好排查最怕的就是这种“薛定谔的接触”。4.3 常见报错与对策速查表为了让大家少走弯路我把高频遇到的报错和解决办法整理成一张表可以截图存着遇到问题对号入座。报错或现象可能原因优先处理方向设备管理器显示“未知USB设备”USB线只供电不传数据 / 克隆ST-LINK硬件不稳 / USB口供电不足换短线、换USB口、换ST-LINK测试“No ST-LINK detected”ST-LINK枚举失败或驱动异常 / 软件端口被占用按2.1节检查设备管理器关闭占用软件“Unknown Device ID”SWD接线错误 / 目标板没供电 / GND未共地检查SWD接线量3.3V电压确认共地“No target connected”目标芯片处于复位状态 / 低功耗 / 调试接口被关复位电压Connect Under ResetBOOT0拉高能连但下载失败“Flash Download failed”Flash算法选错 / 芯片写保护 / 供电跌落核对芯片型号与Algorithm检查RDP选项字节时好时坏偶尔成功杜邦线虚接 / USB口接触不良 / 线过长重新插线缩短线距降低SWD频率Keil点Debug闪退Keil芯片包损坏 / 驱动组件异常重装Device Pack重装ST-LINK驱动组件CubeProgrammer显示“Cannot access the device”调试器被其它软件占用关闭Keil、串口助手不要多软件同时访问这张表不可能覆盖所有情况但覆盖了90%以上的日常故障。你如果遇到一个不在表里的报错先把报错的完整英文字符串记下来搜的时候优先搜英文原句不要搜翻译后的中文命中率会高很多。5. 容易忽略的“玄学”问题与长期预防5.1 间歇性连不上的背后往往是物理层问题很多人管某些连接失败叫“玄学”因为从软件配置和代码层面根本找不到原因。实际上这些问题的根源几乎都在物理层只是表现不像物理故障所以看起来像玄学。一个典型是USB线的质量。有些USB线虽然能传数据但线芯太细、屏蔽太差插上ST-LINK后偶尔识别、偶尔不识别或者连接速度一高就失败。这类问题用万用表都测不出来因为通断是好的但信号质量不行。最简单的解决办法就是换一根粗短的、用过很多次没出过问题的线不要在这种线上省钱。还有一个容易忽略的是USB选择性暂停。Windows的电源选项里默认有个“USB选择性暂停设置”会让空闲的USB设备自动进入低功耗状态。你调试到一半如果中间停顿了几分钟没点下载ST-LINK可能就被系统挂起了再点Download就报错。解决办法是在电源选项里把USB选择性暂停禁用尤其是台式机和笔记本都要检查。静电也是一大元凶。冬天干燥人身上带电摸一下杜邦线端子或者芯片引脚可能直接导致芯片内部损伤。这种损伤不是立刻坏而是“内伤”表现出来就是时好时坏今天能连明天连不上。我在干燥季节的防护习惯是接触板子之前先摸一下水管或者机箱金属外壳放电开发板上电状态下尽量不要用手去碰芯片引脚。另外调试时不要同时在电脑上插一堆USB转串口、下载器、HUB之类的设备。USB HUB尤其是那种不带独立供电的会把ST-LINK的供电和信号一起搞成“叠罗汉”插上去能识别一连接就失败。最稳的方式是把ST-LINK直接插到电脑主机后面的原生USB口不要经过HUB。5.2 想不被这类问题反复折磨做好这几件事第一准备一个专用调试转接板。花几块钱买一个带4针SWD座的小转接板把SWDIO、SWCLK、GND、VCC按顺序焊好接上目标板时就不会每次飞线、每次担心接反。这个投资很便宜但能让你少踩很多坑。第二目标板供电用独立电源解决。常规开发阶段让目标板用USB或外部5V供电ST-LINK只负责调试信号。ST-LINK那点3.3V输出留给最小系统验证就够了不要去带外设。如果非要让ST-LINK供电也要确认整板电流不超过它的输出能力否则连接失败只是时间问题。第三下载完程序后先不要急着拔线。观察一下板子运行是否正常如果程序跑飞或者意外踩到了调试接口禁用代码立即全片擦除还能救回来。等发现问题再插调试器就得走BOOT0拉高、串口ISP恢复那条路了浪费时间。第四养成记录连接状态的习惯。每块板子用的是什么型号、BOOT跳线状态、上电电压、能否正常连接都记在项目笔记里。别小看这个习惯很多时候你连不上一块板子不是因为今天操作不对而是因为上一次调试后板子的状态就变了问题是被带过来的不是今天才出现的。第五买调试器别只看价格。几十块钱的克隆ST-LINK确实能干活但它连接稳定性、USB接口寿命、备用固件恢复能力都不如同价位口碑更好的方案。我建议新手第一只调试器可以买便宜的练手但一旦遇到连接问题多且排除不掉果断换一个这是性价比最高的解决方案比花一晚上排查一个劣质硬件值得多。最后分享一个我自己的习惯。遇到连接失败我现在的第一动作永远是打开STM32CubeProgrammer把频率拉到最低点一下Connect。这个操作能快速区分问题在软件环境还是硬件链路比在Keil里反复折腾设置高效得多。只要CubeProgrammer能连上剩下的就是Keil配置和驱动占用问题连不上就按电源、地线、接线、复位的顺序一项项过。这套流程帮我省下的时间早就超过我当年满世界搜“Unknown Device ID”的时间了。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

从程序员到CTO:十年技术成长地图与关键决策复盘 2026/9/25 7:32:00

从程序员到CTO:十年技术成长地图与关键决策复盘

1. 为什么说这是一张“地图”,而不是一套“规划”1.1 第一次见CEO时,他送给我的那句话我至今记得入职实习的第三天,被CEO叫进办公室。我当时以为是要谈转正名额,手心全是汗。结果他问了我一个到现在都影响我的问题:“你…

阅读更多 →
天津图文广告店探店实录:三种典型模式对比与避坑指南 2026/9/25 7:32:00

天津图文广告店探店实录:三种典型模式对比与避坑指南

1. 别急着下单,先说说我为什么突然较真这件事事情的起因特别俗——去年底我工作室接了个连锁奶茶店的单子,需要在天津八个门店同时上新品灯箱和菜单,外加一批开业物料。以前这种东西我都是甩给楼下那家图文店,结果那次交付出了岔子…

阅读更多 →
SQLite3跨平台原生库编译与ABI兼容性实战指南 2026/9/25 7:31:47

SQLite3跨平台原生库编译与ABI兼容性实战指南

简介:本资源是面向C后端开发者的SQLite跨平台开发套件,专为需要在Windows与Linux环境下快速集成轻量级嵌入式数据库的工程师设计,解决多架构编译链接时缺少原生库与头文件的典型痛点。压缩包共8个文件,包含Windows 64位/32位lib静…

阅读更多 →
AI Agent技能库工程化实践:从Prompt乱象到可控工具调用 2026/9/25 7:31:40

AI Agent技能库工程化实践:从Prompt乱象到可控工具调用

如果你最近在研究AI Agent,一定遇到过类似的困局:模型什么都能聊,但一落到具体业务就抓瞎。我去年接手了一个智能客服项目,最初的方案是“一个大模型 一套大而全的Prompt 一份工具列表”,结果模型频繁选错工具、传错…

阅读更多 →
终端环境兼容性与云原生IDE实战指南:从手机写代码到生产级开发工作流 2026/9/25 7:31:40

终端环境兼容性与云原生IDE实战指南:从手机写代码到生产级开发工作流

1. 这不是“手机能装个VS Code”——而是重构开发工作流的临界点 2026年,我拆开三台主力设备:一台折叠屏安卓旗舰、一台iPad Pro配妙控键盘、一台搭载ARM架构的Windows平板,把它们全换成主力开发机。不是为了炫技,而是因为本地ID…

阅读更多 →
Chat2DB 实战解析:Springboot + React 多数据库客户端与 AI 辅助 SQL 的工程实践 2026/9/25 7:31:27

Chat2DB 实战解析:Springboot + React 多数据库客户端与 AI 辅助 SQL 的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉