STM32L152RE串口收发实战:从时钟配置到中断与DMA
1. 为什么在L系列上折腾串口值得单独写一篇拿到STM32L152RE这块板子的时候我第一反应是低功耗系列串口能有什么花样。结果真上手才发现L系列的串口配置和F系列有一堆细节差异尤其是时钟树、低功耗模式下的唤醒、以及LPUART和USART的区别踩过的坑足够写满两页笔记。这篇就把我在STM32L152RE上跑通串口收发数据的完整过程拆开讲从时钟配置到中断接收再到实际调试中遇到的怪问题全部摊开说。串口这东西看起来简单TX接RX、RX接TX、共地三根线就能通。但真正在项目里用起来你会发现能发出去和稳定收发之间隔着十万八千里。STM32L152RE属于STM32L1系列基于Cortex-M3内核主打低功耗它的USART外设和F1系列同源但时钟使能方式不同很多人从F103转过来直接照搬代码结果串口死活不出数据问题就出在时钟配置上。这篇文章适合谁看如果你手里正好有STM32L152RE的开发板或者自定义板想快速把串口收发跑通不想在时钟和寄存器上耗太久那这篇就是给你写的。如果你是从F系列转过来的老手也可以看看L系列有哪些不一样的地方避免踩我踩过的坑。我会从最基础的时钟配置讲起一直讲到中断接收和实际调试技巧每个步骤都解释为什么这么做而不是只丢一段代码让你抄。2. 先把时钟树理清楚L152RE的USART时钟从哪来2.1 默认时钟源和F系列的关键差异STM32L152RE复位后默认使用MSI内部多速时钟作为系统时钟频率大概是2.097MHz。这一点和F103默认用HSI8MHz完全不同。很多人代码里直接写RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE)就以为万事大吉但在L152RE上USART1挂在APB2总线上USART2和USART3挂在APB1上时钟使能没问题问题在于系统时钟频率不对导致波特率算出来偏差巨大。我实测过用默认MSI 2.097MHz去配115200波特率实际输出的波特率偏差超过5%串口助手收到的全是乱码。所以第一步必须先把系统时钟切到HSE或者HSI让主频跑到32MHzL152RE最高支持32MHz这样波特率计算才准确。具体操作上我习惯用HSE外部晶振8MHz的晶振经过PLL倍频到32MHz。配置代码如下RCC_DeInit(); RCC_HSEConfig(RCC_HSE_ON); while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) RESET); RCC_PLLConfig(RCC_PLLSource_HSE, RCC_PLLMul_4, RCC_PLLDiv_2); RCC_PLLCmd(ENABLE); while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) RESET); RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while (RCC_GetSYSCLKSource() ! 0x08);这里有个细节L152RE的PLL配置比F103多了一个RCC_PLLDiv_2参数这是L系列特有的分频设置。如果你从F103抄代码这里会编译报错因为函数原型不一样。2.2 波特率计算的坑别直接用库函数默认值系统时钟配好后接下来是USART初始化。标准库的USART_Init函数会根据你传入的波特率和当前APB时钟自动计算BRR寄存器值。但这里有个陷阱如果你在时钟切换之前就调用了USART_Init它用的还是旧的时钟频率算出来的BRR就是错的。我的做法是先把系统时钟切好再初始化USART。另外L152RE的USART1在APB2上APB2的时钟默认等于系统时钟不分频。所以32MHz主频下USART1的时钟就是32MHz。波特率115200对应的BRR值大约是32MHz/(16*115200)17.36取整后实际波特率会有微小偏差但在容忍范围内。如果你要用更高的波特率比如921600那偏差就会放大。这时候可以考虑用 oversampling 8模式把过采样率从16降到8BRR值翻倍精度更高。不过大多数场景115200够用了没必要折腾。2.3 引脚配置复用功能别忘开时钟STM32L152RE的USART1默认引脚是PA9TX和PA10RX。配置GPIO的时候除了设置复用推挽输出和浮空输入还要记得使能GPIOA的时钟和AFIO时钟如果用了重映射。标准库的写法RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin GPIO_Pin_9 | GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed GPIO_Speed_40MHz; GPIO_InitStructure.GPIO_OType GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd GPIO_PuPd_UP; GPIO_Init(GPIOA, GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);注意L系列用的是RCC_AHBPeriphClockCmd而不是F系列的RCC_APB2PeriphClockCmd来使能GPIO时钟因为L152RE的GPIO挂在AHB总线上。这个差异如果不注意GPIO配置不生效串口自然没反应。3. 轮询发送最简单但也最容易出问题的方式3.1 发送一个字节的完整流程轮询发送是最基础的串口发送方式核心就是等TXE标志位置位然后把数据写进DR寄存器。代码看起来很简单void USART_SendByte(USART_TypeDef* USARTx, uint8_t data) { while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) RESET); USART_SendData(USARTx, data); }但这里有个隐藏问题TXE置位只表示发送数据寄存器空了可以写入下一个字节并不代表上一个字节已经完整移出移位寄存器。如果你发完最后一个字节就立刻关闭串口或者进入低功耗最后一个字节可能还没发完就被截断了。正确的做法是在发送完所有数据后再等TC传输完成标志位置位while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) RESET);我刚开始用的时候没注意这个发一串字符串最后一个字符总是丢失查了半天才发现是TC没等。3.2 发送字符串的两种写法对比发送字符串有两种常见写法一种是逐个字节发送另一种是用DMA。先说不带DMA的void USART_SendString(USART_TypeDef* USARTx, char* str) { while(*str) { USART_SendByte(USARTx, *str); } while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) RESET); }这种写法在低波特率下会阻塞CPU比如115200波特率发100个字节大概需要8.7ms这期间CPU什么都干不了。如果你的系统对实时性有要求建议用中断发送或者DMA发送。但在调试阶段轮询发送最直观出问题也容易定位。3.3 实测中的意外电平不匹配导致收不到数据有一次我用L152RE和另一个3.3V的单片机通信双方都是3.3V电平按理说直接连就行。但实际测试时L152RE能发出去对方也能收到但L152RE收不到对方的数据。用示波器看波形发现对方的TX引脚在空闲时是高电平但L152RE的RX引脚配置成了浮空输入没有上拉导致空闲时电平不稳定起始位检测出错。解决办法很简单把RX引脚配置成上拉输入GPIO_PuPd_UP或者外部加一个4.7kΩ的上拉电阻。这个坑在实验室环境下可能不明显因为杜邦线短干扰小但一旦线拉长或者环境复杂问题就暴露了。4. 中断接收让CPU不用一直盯着串口4.1 中断接收的配置步骤轮询接收需要CPU不断查询RXNE标志位效率太低。实际项目里基本都用中断接收。配置中断接收的步骤使能USART的接收中断USART_ITConfig(USART1, USART_IT_RXNE, ENABLE)配置NVIC设置优先级并使能USART1_IRQn在中断服务函数里读取数据并清除标志位NVIC配置代码NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority 1; NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE; NVIC_Init(NVIC_InitStructure);中断服务函数void USART1_IRQHandler(void) { if(USART_GetITStatus(USART1, USART_IT_RXNE) ! RESET) { uint8_t data USART_ReceiveData(USART1); // 处理数据 USART_ClearITPendingBit(USART1, USART_IT_RXNE); } }注意USART_ClearITPendingBit这行虽然读取DR寄存器会自动清除RXNE标志但显式清除更保险尤其是在中断嵌套的场景下。4.2 接收不定长数据的处理思路串口接收最麻烦的不是收固定长度的数据而是收不定长数据。比如对方发一条指令长度不固定你怎么知道什么时候收完常见方案有三种第一种是用空闲中断IDLE。STM32的USART支持IDLE中断当总线空闲一个字节时间后触发。你可以在IDLE中断里判断一帧数据接收完毕。配置方法USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);然后在中断里先读SR寄存器再读DR寄存器来清除IDLE标志if(USART_GetITStatus(USART1, USART_IT_IDLE) ! RESET) { USART_ReceiveData(USART1); // 清除IDLE标志 // 一帧数据接收完毕 }第二种是用定时器做超时判断。每收到一个字节就重置定时器如果定时器超时了还没收到新字节就认为一帧结束。这种方式灵活但占用一个定时器资源。第三种是协议里带长度字段或者结束符。比如约定每条指令以\n结尾收到\n就认为一帧结束。这种方式最简单但需要通信双方约定好协议。我一般优先用IDLE中断因为它不占用额外定时器而且响应及时。但IDLE中断有个坑如果对方发送速度很快两个字节之间没有空闲时间IDLE可能不会触发。所以高速通信场景下还是得配合定时器超时来判断。4.3 中断优先级配置的注意事项L152RE的中断优先级分组和F系列一样用NVIC_PriorityGroupConfig设置。我一般用分组22位抢占优先级2位响应优先级。串口中断的抢占优先级不要设太高除非你的串口通信是系统最核心的功能。设太高会影响其他中断的响应比如定时器中断被延迟导致系统时序错乱。另外如果你同时用了USART1和USART2两个中断服务函数的优先级要合理分配。如果USART1的数据需要立刻处理USART2的数据可以稍后处理那就把USART1的抢占优先级设高一点。5. 低功耗模式下的串口唤醒L系列的主场5.1 STOP模式下串口还能收数据吗STM32L152RE主打低功耗STOP模式下功耗可以降到微安级别。但STOP模式下系统时钟停了USART还能工作吗答案是USART1可以在STOP模式下通过RX引脚唤醒MCU但前提是配置了正确的唤醒源。具体来说你需要把USART1的RX引脚配置为唤醒源并且使能USART的唤醒中断。在STOP模式下USART1的时钟被关闭但它可以检测RX引脚上的起始位如果检测到起始位会触发唤醒事件把MCU从STOP模式唤醒。唤醒后USART1需要重新初始化才能正常接收数据。配置步骤大致如下// 使能USART1的唤醒功能 USART_WakeUpConfig(USART1, USART_WakeUp_AddressBit); // 进入STOP模式 PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); // 唤醒后重新配置时钟和USART这里有个关键点唤醒后系统时钟会切回MSI你需要重新配置时钟到HSE并且重新初始化USART。如果忘了这一步串口收到的数据全是乱码。5.2 低功耗串口LPUART和普通USART的区别STM32L152RE没有LPUARTLPUART是L4系列才有的。但L152RE的USART1在低功耗模式下有特殊待遇可以在STOP模式下保持唤醒能力。USART2和USART3就不行它们在STOP模式下完全停止工作。所以如果你的项目需要在低功耗模式下接收串口数据必须用USART1。这一点在硬件设计阶段就要确定好别等到PCB打样回来才发现USART2接在了主通信口上那就只能改板了。5.3 实测功耗数据与唤醒延迟我实测过L152RE在STOP模式下的功耗用USART1做唤醒源功耗大概在1.2μA左右不含外部电路。唤醒延迟大概在10μs到20μs之间具体取决于时钟恢复时间。如果你对唤醒延迟有要求可以在唤醒后先用MSI跑等数据接收完再切到HSE这样唤醒更快。但要注意MSI的频率精度不如HSE如果用MSI接收数据波特率偏差可能比较大。所以我的做法是唤醒后立刻切HSE等HSE稳定后再接收数据。虽然多花了几微秒但数据可靠性有保障。6. 调试串口时那些让人抓狂的怪问题6.1 串口助手收到乱码的排查顺序乱码是串口调试中最常见的问题排查顺序应该是先查波特率再查时钟最后查电平。波特率不匹配是最常见的乱码原因。比如你代码里设的是115200串口助手设的是9600那收到的全是乱码。但有时候波特率设的一样还是乱码那就要查系统时钟了。用示波器测一下TX引脚上的波形算一下实际波特率。如果实际波特率和设定值偏差超过3%那基本就是时钟配置有问题。电平问题也会导致乱码。比如你的MCU是3.3V电平但串口模块是5V电平虽然有些模块兼容3.3V但长期工作可能不稳定。用万用表量一下TX引脚的空闲电平正常应该是3.3V左右。如果只有1.8V或者更低那可能是引脚配置成了开漏输出但没加上拉电阻。6.2 发送正常但接收不到数据的几种可能发送正常说明TX引脚和时钟配置没问题接收不到数据就要查RX引脚。常见原因有RX引脚配置错误应该配成浮空输入或上拉输入如果配成了推挽输出那肯定收不到数据。中断没使能如果你用中断接收检查NVIC和USART的接收中断是否都使能了。波特率偏差太大发送对波特率偏差的容忍度比接收高有时候发送能正常工作但接收因为偏差累积导致采样错误。硬件连接问题TX和RX有没有接反共地了没有这些低级错误我见过太多次了。6.3 用示波器抓波形的实用技巧示波器是调试串口的利器。抓波形的时候触发方式设为下降沿触发因为串口的起始位是下降沿。时基设成100μs/div左右能看清一个字节的波形。测量波特率的时候量起始位下降沿到第一个数据位上升沿的时间取倒数就是波特率。如果波形上有毛刺或者振铃那可能是线太长或者阻抗不匹配。短线小于20cm一般没问题长线建议用双绞线或者加匹配电阻。我在一个项目里用了一米长的杜邦线波形惨不忍睹换成屏蔽线后立刻正常。7. 从轮询到DMA什么时候该升级发送方式7.1 DMA发送的配置要点轮询发送在数据量小的时候没问题但如果要发几百个字节CPU被占用几毫秒甚至几十毫秒系统响应就会变慢。这时候就该上DMA了。L152RE的USART1支持DMA发送配置步骤使能DMA时钟RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE)配置DMA通道源地址是数据缓冲区目标地址是USART1的DR寄存器使能USART的DMA发送请求USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE)DMA配置代码DMA_InitTypeDef DMA_InitStructure; DMA_InitStructure.DMA_PeripheralBaseAddr (uint32_t)USART1-DR; DMA_InitStructure.DMA_MemoryBaseAddr (uint32_t)txBuffer; DMA_InitStructure.DMA_DIR DMA_DIR_PeripheralDST; DMA_InitStructure.DMA_BufferSize len; DMA_InitStructure.DMA_PeripheralInc DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode DMA_Mode_Normal; DMA_InitStructure.DMA_Priority DMA_Priority_Medium; DMA_Init(DMA1_Channel4, DMA_InitStructure); DMA_Cmd(DMA1_Channel4, ENABLE);注意USART1的TX对应DMA1_Channel4RX对应DMA1_Channel5。这个对应关系在参考手册里有别搞错了。7.2 DMA发送完成中断的处理DMA发送完成后会触发传输完成中断你可以在中断里做一些收尾工作比如切换RS485的方向引脚或者启动下一次发送。配置DMA传输完成中断DMA_ITConfig(DMA1_Channel4, DMA_IT_TC, ENABLE);然后在DMA1_Channel4_IRQHandler里清除标志位并处理。这里有个坑DMA的传输完成中断标志需要先读TCIF再写0清除和普通外设的中断清除方式不太一样。7.3 轮询、中断、DMA三种方式的选型建议方式CPU占用适用场景缺点轮询高调试、少量数据阻塞CPU实时性差中断中中等数据量、不定长接收频繁中断影响系统DMA低大量数据、高速通信配置复杂占用DMA通道我的建议是调试阶段用轮询快速验证硬件和时钟配置。产品阶段接收用中断IDLE发送用DMA。这样兼顾了实时性和CPU效率。8. 写在最后几个让我少走弯路的习惯串口调试这件事说难不难说简单也不简单。我踩过的坑里大部分都是因为想当然——想当然以为F系列的代码能直接用在L系列上想当然以为波特率设对了就没问题想当然以为电平匹配就能通信。后来我养成了几个习惯分享出来供参考。第一个习惯是每次换芯片型号先花十分钟看参考手册里的时钟树和引脚复用表。别小看这十分钟能省下后面几个小时的调试时间。第二个习惯是手边常备一个USB转串口模块和示波器出问题先看波形再查代码比盯着代码瞎猜高效得多。第三个习惯是每写一个串口驱动先写一个最简单的回环测试——TX接RX发什么收什么确认底层没问题了再接外部设备。STM32L152RE的串口功能不算复杂但低功耗特性和时钟配置的差异让它和F系列用起来手感不一样。把时钟树理清楚把中断和DMA配好剩下的就是调协议和优化体验了。希望这篇内容能帮你少踩几个坑顺利把串口跑通。

相关新闻

车载总线核心:CAN与CAN-FD协议从物理层到工程实战

车载总线核心:CAN与CAN-FD协议从物理层到工程实战

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

2026/10/13 8:49:16 阅读更多 →
macOS下CLion配置OpenMP全链路指南

macOS下CLion配置OpenMP全链路指南

1. 为什么在 macOS 上用 CLion 跑 OpenMP 不是“点一下就运行”那么简单OpenMP 在 macOS 上的编译运行,从来就不是 Linux 或 Windows 环境下的“开箱即用”。我第一次在某高校实验室接手一个跨平台图像并行处理 Demo 时,原以为把 Linux 下跑通的 CMakeLi…

2026/10/13 8:49:16 阅读更多 →
XGBoost官方文档精读指南:从参数原理到调参实践

XGBoost官方文档精读指南:从参数原理到调参实践

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

2026/10/13 8:48:14 阅读更多 →

最新新闻

机器学习评估体系:从泛化误差到业务指标的完整实践

机器学习评估体系:从泛化误差到业务指标的完整实践

1. 这不是背书,是建模前的“体检清单”——为什么第2章决定你80%的模型成败“西瓜书”第二章《模型的评估与选择》,表面看是教你怎么算准确率、画个ROC曲线、调个交叉验证的k值,但实操中我带过几十个刚入门的项目组,发现一个扎心事…

2026/10/13 9:41:42 阅读更多 →
矩阵实编码遗传算法在电力系统机组组合优化中的应用

矩阵实编码遗传算法在电力系统机组组合优化中的应用

## 1. 项目背景与核心价值机组组合问题(Unit Commitment, UC)是电力系统调度中的经典优化难题,需要在满足负荷需求的前提下,确定各发电机组的启停状态和出力分配,使总运行成本最小化。传统数学规划方法(如混…

2026/10/13 9:41:42 阅读更多 →
电信机顶盒E900V22D硬件解析与性能优化指南

电信机顶盒E900V22D硬件解析与性能优化指南

1. 电信机顶盒E900V22D硬件解析作为一款主流运营商定制设备,E900V22D机顶盒的硬件架构直接决定了其性能表现和功能边界。拆解实机可见,这款设备采用高度集成化的主板设计,PCB板尺寸仅为128cm,却承载了完整的媒体处理功能模块。1.1…

2026/10/13 9:41:42 阅读更多 →
SQL中AVG()的四大陷阱:NULL、0值、粒度与语义

SQL中AVG()的四大陷阱:NULL、0值、粒度与语义

1. 项目概述:平均值不是“除一下”就完事的——SQL里最常被低估的统计陷阱“怎么算平均值?”刚接触SQL的新手常以为就是AVG()函数一贴,结果跑出来数据和Excel对不上,或者业务方突然质疑:“上个月人均消费3800&#xff…

2026/10/13 9:41:42 阅读更多 →
智慧港口整体解决方案:码头流程再造与自动化落地实战

智慧港口整体解决方案:码头流程再造与自动化落地实战

简介:《智慧港口整体解决方案》是一份面向港口管理部门、航运企业及智慧交通领域从业者的专题方案文档,聚焦如何借助新一代感知、传输与应用技术,实现对码头、船舶、货物、重大危险源及航管航运等要素的全面感知、有效传输与按需定制服务。方…

2026/10/13 9:41:42 阅读更多 →
艾里函数:临界过渡建模的核心数学工具

艾里函数:临界过渡建模的核心数学工具

1. 为什么艾里函数不是“空气里的函数”,而是物理建模的隐形骨架很多人第一次看到“Airy函数”这个名字,下意识会联想到“airy”(空气的、轻盈的),甚至以为是某种和气流或浮力相关的数学工具。我刚接触这个概念时也这么…

2026/10/13 9:40:38 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/12 18:11:17 阅读更多 →