当前位置: 首页 > news >正文

如何0基础学stm32?

如何0基础学stm32?

作为一个混迹嵌入式领域十余年的老兵,每次看到"0基础学STM32"这样的提问,我都忍不住想笑,又有些无奈。这就像问"如何0基础学开飞机"一样—虽然理论上可行,但过程恐怕没那么愉快。不过话说回来,每个嵌入式工程师都有从0开始的那一天,包括现在的我。所以今天,我就把自己从菜鸟成长为架构师的经历和心得分享出来,希望能给同样想入门STM32的你一些参考。

我的STM32入门血泪史

先说说我自己的入门经历吧。十年前,我还是个即将毕业的大学生,为了毕业设计选择了一个基于STM32的项目。那时的我,只会一点C语言,连单片机的"单"字都没碰过,可以说是标准的"0基础"。

拿到第一块STM32F103开发板的时候,我完全被它搞蒙了:一块蓝色的PCB板上密密麻麻地布满了各种元器件,引脚,几十页的数据手册像天书一样。当时的感觉就是:这东西真的能被人类理解吗?

我尝试跟着网上教程走,结果第一步就卡住了—怎么把程序烧录到芯片里?折腾了一整天,最后是学长过来帮我接好了下载器,才算解决。然后是点亮第一个LED,这个看起来简单的任务,硬是让我调试了三天。问题出在时钟配置上,当时根本不理解什么是时钟树,就盲目地复制代码,结果自然是失败。

那段时间简直是噩梦:每天都在怀疑自己的智商,怀疑自己是不是不适合学这个。但熬过最初的痛苦期,情况开始好转。当我第一次成功地让LED按照预期闪烁时,那种成就感是难以形容的。从那以后,我就彻底爱上了嵌入式开发,一发不可收拾。

毕业后,我进入了一家做工业控制的公司,正式成为一名STM32开发工程师。工作中遇到的挑战比学校实验室大多了:不仅要确保功能实现,还要考虑性能、可靠性、功耗等各种因素。这个过程中犯过无数错误,但也积累了宝贵经验。现在回头看,正是那段艰难的自学经历,锻炼了我解决问题的能力,为后来的职业发展打下了基础。

所以,如果你现在也是0基础想学STM32,我想说的是:这条路确实有点难,但绝对值得,而且完全可行。只要方法正确,坚持下去,你一定能成功。下面,我就来分享一下我认为最有效的学习路径。

真的要从STM32开始吗?—给0基础学习者的建议

在讲具体学习路径前,我想先问一个问题:对于0基础的你,STM32真的是最佳的起点吗?

我并不是想劝退任何人,而是想说明一个事实:STM32作为32位ARM微控制器,相比8位单片机(如Arduino使用的AVR)或51单片机,它的学习曲线陡峭得多。它有更复杂的内部结构,更多的寄存器和外设,更专业的开发环境…这些对于0基础学习者来说,无疑是巨大挑战。

我自己当年就是犯了"好高骛远"的错误,直接从STM32入手,结果前期付出了很多本可以避免的痛苦。如果时光倒流,我会先从更友好的平台如Arduino开始,建立基本概念和信心后,再过渡到STM32。

当然,这不是说你必须这样做。如果你有足够的决心和耐心,直接学习STM32也完全可行。只是路径会更陡峭一些,需要做好心理准备。

假设你已经决定直接挑战STM32,或者你已经有了一些编程或电子基础,接下来我会详细介绍一个我认为最合理的学习路径。这个路径是基于我自己的经验和对许多学生的辅导总结出来的,希望能够帮你少走弯路。

第一步:夯实基础知识—不要急于上手STM32

很多初学者犯的最大错误就是过于急躁,拿到开发板就想立即开始编程。但如果没有必要的基础知识,这样的尝试往往会以挫败告终。在正式碰STM32之前,建议先掌握以下基础:

C语言编程基础

STM32的开发主要使用C语言,所以扎实的C语言基础是必不可少的。不需要成为C语言专家,但至少要理解基本语法、函数、指针、结构体等概念。

我当年就是C语言基础不扎实,导致后面学习STM32库函数时遇到了很多困难。特别是对指针的理解不深入,在调试硬件寄存器时经常混淆,浪费了大量时间。

如果你的C语言基础薄弱,建议先花1-2个月时间系统学习一下。《C Primer Plus》是一本不错的入门书籍。学习过程中,重点关注指针、结构体、位操作这些在单片机开发中经常用到的概念。

数字电路基础

微控制器是数字芯片,了解基本的数字电路知识对理解其工作原理非常有帮助。建议掌握以下内容:

  • 二进制、十六进制表示法及转换
  • 基本逻辑门(与、或、非)及其组合
  • 触发器、计数器等基本数字电路
  • 基本的时序逻辑概念

我记得有次调试一个奇怪的问题:为什么我的按键有时候能触发中断,有时候又不行?最后发现是我对数字电路中"抖动"的概念理解不足,没有做按键消抖处理。这个简单的数字电路知识点困扰了我好几天。

微控制器基本概念

在接触具体的STM32芯片前,先了解一些微控制器的通用概念会很有帮助:

  • CPU架构与工作原理
  • 存储器类型(Flash、RAM、ROM等)
  • 寄存器的概念和作用
  • 时钟系统的基本原理
  • 中断机制
  • 常见外设(GPIO、UART、SPI、I2C等)的基本工作原理

这些内容看起来很多,但不需要一开始就深入理解所有细节。有个大致的概念即可,在后续实践中再逐步深化理解。

我当年就是忽略了这一步,直接开始看STM32的资料,结果常常看到一半就蒙了,因为太多术语和概念不理解。后来不得不倒回来补这些基础知识,浪费了很多时间。

第二步:认识ARM和STM32—了解你即将征服的对象

在有了基础知识的铺垫后,下一步是对STM32有个整体认识。不要急于写代码,先要了解这个平台的特点和架构。

了解ARM Cortex-M架构

STM32是基于ARM Cortex-M内核的微控制器系列。了解ARM架构的基本特点,对后续学习很有帮助:

  • ARM公司的商业模式(ARM只设计内核,不生产芯片)
  • Cortex-M系列的定位和特点
  • Cortex-M3/M4/M0等不同内核的区别
  • ARM的指令集特点

我记得刚开始学习时,常常搞不清ARM和STM32的关系,以为它们是竞争关系。后来才明白ARM只是设计内核,而ST等公司则基于这些内核设计完整的微控制器产品。这个认识对理解整个生态很有帮助。

认识STM32产品系列

ST公司基于ARM内核开发了多个系列的STM32产品,针对不同的应用场景。初学者常常被这些复杂的产品线搞混:

  • F0/F1/F4/F7/H7等系列的定位和特点
  • 不同系列的性能、资源和适用场景
  • 常见型号的命名规则(如STM32F103C8T6中每部分的含义)

不需要记住所有细节,但要对STM32的产品结构有个整体了解,知道自己学习的芯片在整个系列中的位置。

我最初学习时使用的是STM32F103系列,这是F1系列中的一款中端产品,性能适中,资源丰富,非常适合入门学习。现在这个系列虽然不是最新的,但因为资料丰富、价格便宜,仍然是很好的学习平台。

熟悉STM32的开发生态

了解STM32的开发环境、工具链和资源,对后续学习至关重要:

  • 常用IDE:Keil MDK、IAR、STM32CubeIDE等
  • 开发板选择:官方评估板vs第三方开发板
  • 调试工具:ST-Link、J-Link等
  • 固件库:标准外设库(StdPeriph)、HAL库、LL库的区别
  • 参考资料:参考手册(RM)、数据手册(DS)等

我当年在这方面犯了不少错误。一开始用了盗版的Keil,结果遇到莫名其妙的问题;后来下载了错误版本的库函数,花了好几天才发现不匹配。如果提前了解这些信息,能避免很多不必要的麻烦。

第三步:准备开发环境—选择合适的装备

有了理论基础后,下一步是准备实际开发的硬件和软件环境。这一步看似简单,但如果选择不当,后续会遇到很多麻烦。

选择合适的开发板

对于初学者,强烈建议从官方或知名第三方的开发板开始,而不是自己设计电路:

  • 官方评估板(如NUCLEO系列、Discovery系列):文档完善,支持最好,但价格较高
  • 第三方开发板(如正点原子、野火等国内厂商的产品):通常配有详细中文教程,价格适中
  • 最小系统板(如"蓝色药丸"STM32F103C8T6最小系统):价格最低,但不含外设,需要自己连接

我自己的经验是,第三方的开发板配合相应的教程是性价比最高的选择。我当年用的是正点原子的STM32F103开发板,它不仅有齐全的外设,还配有详细的中文教程,大大降低了入门难度。

如果预算有限,"蓝色药丸"最小系统板也是不错的选择,价格大约10-20元,可以满足基本学习需求。但需要注意的是,你需要额外购买ST-Link下载器和一些外设模块。

搭建软件开发环境

选择合适的IDE(集成开发环境)对初学者来说非常重要:

  • Keil MDK:最流行的STM32开发环境,资料最丰富,但完整版价格昂贵
  • IAR Embedded Workbench:功能强大,商业软件,价格高
  • STM32CubeIDE:ST官方免费IDE,基于Eclipse,集成了CubeMX功能
  • PlatformIO + Visual Studio Code:开源方案,近年来越来越流行

我建议初学者使用STM32CubeIDE,它完全免费,功能强大,且由ST官方支持,不会有兼容性问题。另外,它集成了CubeMX图形化配置工具,可以大大简化初期的开发工作。

我最初用的是Keil MDK(老实说是盗版),确实遇到了一些莫名其妙的问题。后来转向官方工具,虽然界面不如Keil美观,但稳定性和一致性要好得多。

准备调试工具

调试工具对单片机开发至关重要,可以帮你查找代码和硬件中的问题:

  • ST-Link:ST官方调试器,价格适中,与ST芯片兼容性最好
  • J-Link:性能更好的调试器,支持更多功能,但价格较高
  • 逻辑分析仪:对调试通信协议(如I2C、SPI)非常有用
  • 示波器:分析模拟信号和时序问题的必备工具

对于初学者,一个ST-Link V2(价格在30-50元左右)就足够了。如果经济条件允许,一个基本的数字示波器也会极大地帮助你理解硬件行为。

我记得有次调试一个SPI通信问题,怎么都找不出原因。后来借了学长的逻辑分析仪一看,才发现时序完全不对。没有这些工具,纯靠猜测很难找出这类问题。

第四步:Hello World—让你的STM32说第一句话

准备好环境后,终于可以开始实际的编程了。第一个项目永远应该是简单的,建立信心是最重要的。

点亮第一个LED

几乎所有单片机学习都是从控制LED开始的,STM32也不例外。这个简单的项目涉及到GPIO的基本操作,是理解STM32工作方式的好起点。

具体步骤包括:

  1. 了解开发板上LED的连接方式(接到哪个GPIO,高电平点亮还是低电平点亮)
  2. 配置GPIO时钟和模式
  3. 控制GPIO输出状态
  4. 添加延时,实现LED闪烁

看起来很简单,但这个过程中你会接触到STM32的多个基本概念:时钟树、AHB/APB总线、GPIO工作模式等。

我记得自己第一次成功让LED闪烁时的兴奋,那一刻感觉自己就是嵌入式领域的下一个托尼·斯塔克!虽然后来知道这只是最基础的操作,但那种成就感是真实存在的,也是激励我继续学习的动力。

使用串口与电脑通信

点亮LED后,下一个里程碑通常是实现串口通信。这让你的STM32可以与电脑"对话",极大地方便了调试和信息显示。

这个项目涉及:

  1. USART外设的基本配置
  2. 发送和接收函数的实现
  3. 重定向printf()函数(可选)
  4. 使用串口调试助手查看输出

串口通信看似简单,但实际上涉及到不少知识点:波特率计算、USART寄存器配置、数据收发机制等。掌握了这些,你就有了一个强大的调试工具。

我在学习过程中,一旦实现了串口通信,调试效率立刻提高了好几倍。以前只能通过LED闪烁来判断程序运行状态,现在可以直接打印详细信息了,问题查找变得容易多了。

第五步:探索STM32的外设世界—循序渐进的学习路径

掌握了基础后,接下来是系统地学习STM32的各种外设。我建议按照由易到难的顺序进行:

GPIO进阶:按键输入、中断处理

在掌握了LED控制后,下一步是学习如何读取按键输入。这看似简单,但涉及到一些新概念:

  • 输入模式的配置(上拉、下拉、浮空等)
  • 消抖处理(避免按键抖动带来的误触发)
  • 中断配置(EXTI外部中断)
  • NVIC中断控制器

学习中断处理是一个重要的里程碑,它让你的程序从"轮询"模式转向更高效的"事件驱动"模式。

我记得刚开始学习中断时很困惑:为什么按一次按键,有时候会触发多次中断?后来才知道这是按键抖动导致的,需要在软件或硬件层面做消抖处理。这类实际问题往往是最好的学习素材。

定时器:精确的时间控制

STM32的定时器外设功能强大,是很多应用的核心。基本应用包括:

  • 定时中断(周期性执行某些任务)
  • PWM输出(控制LED亮度、电机速度等)
  • 输入捕获(测量脉冲宽度、频率等)

定时器涉及到更复杂的配置,包括预分频、自动重装载、通道模式等概念。但一旦掌握,你就能实现精确的时间控制和测量。

我第一次使用PWM控制LED亮度渐变时,被STM32的精确控制能力震撼到了。后来在一个项目中,我用定时器的输入捕获功能测量超声波传感器的回波时间,实现了厘米级的距离测量精度。

通信协议:连接外部世界

STM32支持多种通信协议,使其能与各种外部设备交互:

  • UART/USART:与电脑、GPS模块等通信
  • I2C:连接EEPROM、传感器等设备
  • SPI:高速通信,常用于Flash存储器、显示屏等
  • CAN:用于汽车电子和工业控制的总线协议

学习这些协议不仅要掌握STM32端的配置,还要理解协议本身的特点和时序要求。

我在一个项目中需要同时使用I2C读取传感器数据,用SPI驱动显示屏,用UART与上位机通信。这些不同协议的整合是一个不小的挑战,但也让我对STM32的通信能力有了全面了解。

ADC和DAC:模拟世界的桥梁

STM32的ADC(模数转换器)和DAC(数模转换器)让其能够与模拟世界交互:

  • ADC:将模拟信号转换为数字值,用于读取传感器数据
  • DAC:将数字值转换为模拟电压,用于控制或生成信号

这部分涉及到采样率、分辨率、参考电压等概念,以及DMA传输的使用。

我曾经做过一个简易示波器项目,使用ADC采集信号,然后通过UART发送到电脑显示。这个项目综合了ADC、DMA、UART等多个知识点,是很好的综合练习。

高级外设:随着能力提升逐步探索

STM32还有许多高级外设,可以随着你的能力提升逐步探索:

  • RTC:实时时钟,用于时间保持
  • FSMC/FMC:外部存储器控制器,用于连接SRAM、NOR Flash等
  • USB:实现USB设备或主机功能
  • 以太网:网络连接功能

这些外设配置较为复杂,通常在基础外设掌握后再学习。

我在一个工业控制项目中使用了STM32的以太网功能,实现了基于Modbus TCP的远程控制系统。虽然配置复杂,但STM32的强大功能确实令人印象深刻。

第六步:从库函数到寄存器—深入理解STM32

随着学习的深入,你可能会从使用库函数逐渐过渡到直接操作寄存器。这是理解STM32底层工作原理的重要步骤。

理解库函数的实现原理

不要简单地把库函数当作黑箱使用,而要尝试理解它们的实现原理:

  • 阅读库函数的源代码,了解其内部实现
  • 查看对应的寄存器定义和位域含义
  • 尝试不使用库函数,直接操作寄存器实现相同功能

这个过程可能有些枯燥,但能极大地加深你对STM32的理解。

我记得第一次尝试不用HAL库,直接写寄存器控制GPIO时,感觉特别新奇。虽然代码量增加了,但执行效率提高了,而且对硬件的控制感更强了。这种直接操作硬件的感觉,是嵌入式开发独特的魅力。

深入学习参考手册

STM32的参考手册(Reference Manual)是最权威的技术文档,但对初学者来说可能比较晦涩。随着学习的深入,你应该逐渐习惯阅读这些原始文档:

  • 详细了解外设的工作原理和寄存器功能
  • 学习时序图和波形图的阅读方法
  • 注意文档中的注意事项和特殊情况

我在处理一个复杂的定时器同步问题时,翻遍了网上的教程都没找到答案,最后在参考手册的一个小注释中发现了关键信息。这让我明白了原始文档的重要性—有时候只有它才能提供最准确的答案。

第七步:项目实践—将知识融会贯通

学习的最终目的是应用。通过实际项目,你可以将零散的知识点连接起来,形成系统性的理解。

循序渐进的项目建议

以下是一些适合不同阶段的项目建议:

初级阶段:

  • LED呼吸灯(PWM控制)
  • 电子时钟(RTC + LCD显示)
  • 温湿度监测(传感器 + 串口显示)

中级阶段:

  • 数字示波器(ADC + DMA + 图形显示)
  • 遥控小车(电机驱动 + 无线通信)
  • 数据采集系统(多种传感器 + 存储 + 通信)

高级阶段:

  • 飞行控制器(传感器融合 + PID控制)
  • 工业监控系统(以太网 + 多传感器)
  • 便携式医疗设备(低功耗设计 + 高可靠性)

我的第一个完整项目是一个基于STM32的智能家居控制器,它集成了温湿度监测、继电器控制、串口通信等功能。虽然功能并不复杂,但整合这些模块的过程让我对STM32系统设计有了更全面的认识。

学会调试和问题排查

项目开发中不可避免会遇到各种问题,学会调试是关键能力:

  • 使用串口打印调试信息
  • 使用调试器设置断点、观察变量
  • 使用示波器分析信号时序
  • 系统性排除问题的思路方法

我记得有次项目突然不工作了,查了好几天都找不到原因。最后发现是一个看似无关的代码修改导致了栈溢出,系统运行到一半就重启了。这次经历让我明白了系统性调试的重要性,以及不要忽视任何可能的问题来源。

第八步:持续学习—嵌入式领域没有终点

STM32的学习是一个持续的过程,即使是工作多年的工程师,也会不断学习新知识。

保持技术更新

嵌入式领域发展迅速,要保持对新技术的关注:

  • 关注ST的新产品和技术(如STM32MP1、STM32WB等新系列)
  • 学习RTOS、中间件等高级主题
  • 了解物联网、人工智能等新兴应用领域

我工作几年后发现,技术更新的速度比想象的快得多。当年学的STM32F1已经不是主流,新的系列如STM32F4、STM32H7带来了更强的性能和新特性。持续学习是保持竞争力的关键。

参与社区和开源项目

独学而无友,则孤陋而寡闻。参与社区交流可以获取更多知识和帮助:

  • 加入STM32相关论坛和交流群
  • 阅读和参与开源项目
  • 分享自己的学习心得和项目经验

我在一个开源飞控项目中学到了很多STM32高级应用技巧,这些是教程中很少提及的。与其他开发者的交流也让我意识到了自己的不足,促使我不断提升。

我的学习资源推荐—让你的学习事半功倍

最后,分享一些我认为对STM32学习有帮助的资源。

入门教程和书籍

  • 《STM32库开发实战指南》:国内很好的入门书籍,基于标准库
  • 《Mastering STM32》:英文书籍,全面介绍STM32开发
  • 正点原子、野火电子等厂商的配套教程:通常与开发板配套,适合自学

我最初学习时主要依靠的是正点原子的教程,它们的图文并茂的讲解对新手非常友好。后来为了深入理解,又阅读了一些更专业的书籍和ST原厂文档。

视频教程

  • B站上有很多免费的STM32教学视频,质量参差不齐,建议选择点击量高的
  • Udemy、Coursera等平台上也有一些付费但系统的嵌入式开发课程

视频教程对于理解复杂概念很有帮助。我记得在学习DMA时,看了一个动画演示,瞬间理解了DMA的工作原理,之前看文字描述时怎么都理解不了。

另外,想进大厂的同学,一定要好好学算法,这是面试必备的。这里准备了一份 BAT 大佬总结的 LeetCode 刷题宝典,很多人靠它们进了大厂。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

刷题 | LeetCode算法刷题神器,看完 BAT 随你挑!

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

推荐阅读:

  • 【良许学堂】2025年嵌入式如何高薪入行?
  • 程序员必备编程资料大全
  • 程序员必备软件资源

欢迎关注我的博客:良许嵌入式教程网,满满都是干货!

相关文章:

如何0基础学stm32?

如何0基础学stm32? 作为一个混迹嵌入式领域十余年的老兵,每次看到"0基础学STM32"这样的提问,我都忍不住想笑,又有些无奈。这就像问"如何0基础学开飞机"一样—虽然理论上可行,但过程恐怕没那么愉快…...

XCZU27DR‑2FFVE1156I Xilinx Zynq UltraScale+ RFSoC

一、概述 XCZU27DR‑2FFVE1156I 属于 Zynq UltraScale™ RFSoC Gen 2 系列,采用 TSMC 16 nm FinFET 工艺,Speed Grade ‑2,集成了 ARM 处理系统、可编程逻辑与高性能射频数据转换单元,为软件定义无线电、5G 前端、测试测量等场景…...

取值运算符*和地址运算符

在指针的学习中,必不可少的两个操作符:*和&。 在定义一个指针的时候,比如 short *p; 表示一个指向short数据类型的指针,具体表达的意思就是这个指针P指向的一个数据类型是short类型,也就是说操作的这…...

LNA设计

设计目的 为后级提供足够的增益以克服后级电路噪声 尽可能小的噪声和信号失真 确保输入和输出端的阻抗匹配 确保信号线性度 评价标准 噪声系数 功率增益 工作频率和带宽 输入信号功率动态范围 端口电压驻波比 稳定性 基于SP模型的LNA设计 直流分析 S参数分析 设计指标 &#xf…...

FPGA——DDS信号发生器设计

文章目录 任务要求一、DDS简介二、设计过程1、相位累加器的设计2、波形存储器设计3、锁相环倍频电路设计4、顶层电路设计 三、设计实现四、运行结果总结参考资料 任务要求 1)利用DDS技术合成正弦波和方波; 2)输出信号的频率范围为10Hz~5MHz,…...

【网络编程】TCP数据流套接字编程

目录 一. TCP API 二. TCP回显服务器-客户端 1. 服务器 2. 客户端 3. 服务端-客户端工作流程 4. 服务器优化 TCP数据流套接字编程是一种基于有连接协议的网络通信方式 一. TCP API 在TCP编程中,主要使用两个核心类ServerSocket 和 Socket ServerSocket Ser…...

数据可视化(Matplotlib和pyecharts)

一 常见图形概念及使用 图表类型适用场景核心特点柱状图(bar)比较不同类别数据(如各地区销售额对比)、时间序列分析(离散时间)高度反映数值大小,支持横向/纵向展示,可叠加分组折线图(plot)连续数据趋势比较(适合展示随时间的变化,如股票价格走势、用户增长趋势)、多变…...

如何系统地入门学习stm32?

如何系统地入门学习stm32? 作为一个在嵌入式领域摸爬滚打十余年的工程师,看到这个问题,我不禁想起自己当年啃着厚重的数据手册,对着一块蓝色的PCB板冥思苦想的日子。STM32的学习之路,说难不算特别难,说简单…...

matlab读取CMEMS海洋温度数据并调整图片的比例

matlab读取CMEMS海洋温度数据并调整图片的比例 matlab读取CMEMS海洋温度数据并调整图片的比例 matlab读取CMEMS海洋温度数据并调整图片的比例 数据的下载见上期: 链接到CMEMS数据下载{python} 本文还会给出另一个关键技巧: 通常设置图片比列直接可以通过…...

ReSearch:基于强化学习的大语言模型推理搜索框架

ReSearch是一种创新性框架,通过强化学习技术训练大语言模型执行"推理搜索",无需依赖推理步骤的监督数据。该方法将搜索操作视为推理链的有机组成部分,其中搜索的时机与方式由基于文本的推理过程决定,而搜索结果进一步引…...

【记录】服务器安装ffmpeg

前言 因为项目中需要用到 ffmpeg 进行图像的一些操作,本文记录下在服务器安装 ffmpeg 的全过程,还是具有一定挑战性的。 系统详情 本文使用的操作系统详情如下 通过 命令 cat /etc/os-release 获取 虽然操作系统为 Rocky Linux,但安装过程是通用的,因为本文记录的是从源代码…...

部署rocketmq集群

容器化部署RocketMQ5.3.1集群 背景: 生产环境单机的MQ不具有高可用,所以我们应该部署成集群模式,这里给大家部署一个双主双从异步复制的Broker集群 一、安装docker yum install -y docker systemctl enable docker --now # 单机部署参考: https://www.cnblogs.com/hsyw/p/1…...

中国AIOps行业分析

基本术语 AIOps是"Artificial Intelligence for IT Operations"(IT运维人工智能)的缩写,它指的是将人工智能技术应用于IT运维领域,基于已有的运维数据(如日志、监控信息、应用信息等),通过机器学习的方式解决自动化运维无法解决的问题6。AIOps将机器学习(ML)…...

C++入门[超详细]

#include <iostream c的标准输入输出流 C的域 using namespace std; namespace本质是一个域 只有域里面的定义代码才能使用 std包含了c输入输出的标准库 缺省 只能从左到右缺省,不能中间空格 void f1(int a10,int b20,int c0) { } f1(); f1(1); f1(1,2); f1(1,2,3); f1(…...

字符串系列一>二进制求和

目录 题目&#xff1a;解析&#xff1a;代码&#xff1a; 题目&#xff1a; 链接: link 解析&#xff1a; 代码&#xff1a; class Solution {public String addBinary(String a, String b) {StringBuffer ret new StringBuffer();int t 0;char[] aa a.toCharArray();char[…...

序列化和反序列化

概念 创建出来的这些对象都存在于JVM中的堆&#xff08;heap&#xff09;内存中&#xff0c;只有JVM处于运行状态的时候&#xff0c;这些对象才可能存在。当JVM停止&#xff0c;这些对象也就随之消失。 java序列化可以帮我们实现&#xff1a;将这些对象持久化&#xff0c;并且…...

rebase和merge的区别

目录 1. ‌合并机制与提交历史‌ 2. ‌冲突处理方式‌ 3. ‌历史追溯与团队协作‌ 4. ‌推荐实践‌ 5. ‌撤销难度‌ git rebase和git merge是Git中两种不同的分支合并策略&#xff0c;核心区别在于提交历史的处理方式&#xff1a;merge保留原始分支结构并生成合并提交&am…...

linux查看目录相关命令

查看目录命令 学习目标 能够使用Linux命令查看目录信息 1. 查看目录命令的使用 命令说明ls查看当前目录信息tree以树状方式显示目录信息 ls命令效果图: tree命令效果图: 2. 查看当前目录路径 命令说明pwd查看当前目录路径 pwd命令效果图: 3. 清除终端内容 命令说明clear…...

203. 移除链表元素

给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5]示例 2&#xff1a; 输入&#xff1a…...

Cursor新版0.49.x发布

小子看到 Cursor 0.49.x 版本正式发布&#xff0c;截止今天已经有两个小patch版本&#xff01;本次更新聚焦于 自动化Rules生成、改进的 Agent Terminal 以及 MCP 图像支持&#xff0c;并带来了一系列旨在提升编码效率和协作能力的改进与修复。 以下是本次更新的详细内容&…...

music21:伍佰 泪桥 MIDI 音乐分析

以下是使用 music21 对伍佰《泪桥》MIDI 音乐进行分析的一些可能方面&#xff1a; 基本信息3 曲长&#xff1a;全曲长 2 分 31 秒。音符数量&#xff1a;共 273 个音符。音轨信息&#xff1a;共 2 个音轨&#xff0c;其中 1 个音轨有音符&#xff0c;可视为单轨 MIDI 文件&am…...

Mybatis源码01-SpringBoot启动时mybatis加载过程

使用了mybatis这么久还没有具体探究了SpringBoot启动时候对于mybatis是怎么加载的。 1、首先项目构建时我们会引入相关的依赖&#xff1a; <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</arti…...

springCloud/Alibaba常用中间件全集(上)

文章目录 SpringCloud:一、Consul:服务注册与发现1、下载Consul2、运行Consul3、服务注册①. 导入依赖②. 配置yml③. 启动类添加Consul的启动服务发现注解④. 解决 **硬编码** 问题⑤. 此时便可以将IP地址改为服务名 4、服务配置与刷新①. 引入Consul-Config依赖②. 修改boots…...

嵌入式单片机通过ESP8266连接物联网实验

第一:通过手机APP远程监控和控制 ESP8266驱动RST低电平触发复位,平时需要跟EN一样分别接10k拉高到3.3V 如果是12E/F的话管脚比较多,GPIO15也要接个1K到地 烧录时GPIO要接地,正常工作时将其拉高或者悬空 主要使用串口通信,烧录固件也是通过串口,烧录时,启动烧录程序后…...

Visio导出清晰图片步骤

在Visio里画完图之后如何导出清晰的图片&#xff1f;&#x1f447; ①左上角单击【文件】 ②导出—更改文件类型—PNG/JPG ③分辨率选择【打印机】&#xff0c;大小选择【源】&#xff0c;即可。 ④选择保存位置并命名 也可以根据自己需要选择是否需要【透明底】哈。 选PNG 然…...

速查手册:TA-Lib 超过150种量化技术指标计算全解 - 1. Overlap Studies(重叠指标)

速查手册&#xff1a;TA-Lib 超过150种量化技术指标计算全解 - 1. Overlap Studies&#xff08;重叠指标&#xff09; TA-Lib&#xff08;Technical Analysis Library&#xff09;是广泛使用的金融技术分析库&#xff0c;实现了超过150种技术指标计算函数&#xff0c;适用于股票…...

大模型Rag - 如何评估Rag

一.RAG流程与评估标准补充 RAG&#xff08;Retrieval-Augmented Generation&#xff09;是一种结合检索与生成的问答架构。为了确保系统效果&#xff0c;需要从以下三个角度对其评估&#xff1a; 回顾RAG流程 用户提出问题 → 系统检索相关上下文 → 基于上下文由大语言模型…...

复习JUC的总结笔记

JUC基础 调用Thread的start方法会调用start0&#xff0c;start0会调用该Thread类的run方法。Thread类如果传入了Runnable&#xff0c;run方法里会调用Runnable的run方法&#xff0c;如果没有传入&#xff0c;则什么也不会做。也可以通过重写Thread的run方法&#xff0c;让start…...

基于MTF的1D-2D-CNN-GRU-Attention时序图像多模态融合的故障识别,适合研究学习(Matlab完整源码和数据),附模型研究报告

基于MTF的1D-2D-CNN-GRU-Attention时序图像多模态融合的故障识别&#xff0c;适合研究学习&#xff08;Matlab完整源码和数据&#xff09;&#xff0c;附模型研究报告 目录 基于MTF的1D-2D-CNN-GRU-Attention时序图像多模态融合的故障识别&#xff0c;适合研究学习&#xff08;…...

5G 毫米波滤波器的最优选择是什么?

新的选择有很多&#xff0c;但到目前为止还没有明确的赢家。 蜂窝电话技术利用大量的带带&#xff0c;为移动用途提供不断增加的带宽。 其中的每一个频带都需要透过滤波器将信号与其他频带分开&#xff0c;但目前用于手机的滤波器技术可能无法扩展到5G所规划的全部毫米波&#…...

构造函数和析构函数

概念&#xff1a;对象的初始化和清理是非常重要的&#xff0c;一个对象在使用之前&#xff0c;需要进行初始化&#xff0c;使用完成后也需要及时清理数据&#xff0c;简单来说构造函数时用来初始化成员属性的&#xff0c;析构函数时用来清理数据的。 C中利用构造函数和析构函数…...

卷积神经网络(CNN)详解

文章目录 引言1.卷积神经网络&#xff08;CNN&#xff09;的诞生背景2.卷积神经网络&#xff08;CNN&#xff09;介绍2.1 什么是卷积神经网络&#xff1f;2.2 卷积神经网络&#xff08;CNN&#xff09;的基本特征2.2.1 局部感知&#xff08;Local Connectivity&#xff09;2.2.…...

NoSQl注入学习

文章目录 什么是NOSQL相关概念数据库文档集合 MongoDB 基础语法创建数据库创建集合插入文档更新文档查询文档 Nosql注入PHP 中的 MongoDB 注入重言式注入联合查询注入JavaScript 注入布尔盲注 Nodejs 中的 MongoDB 注入 从一道题中学习nosql注入 参考&#xff1a; Nosql 注入从…...

借助LlamaIndex实现简单Agent

借助LlamaIndex实现简单Agent 1 简介 智能体的构建发展是一个趋势&#xff0c;借助LlamaIndex简单实现Agent。本文主要借助LlamaIndex中的FunctionTool和Workflow。Workflow是使用事件流的方法实现。 2 构建公共类 由于LlamaIndex中的OpenAI无法直接连接国内大模型&#xf…...

MCGS昆仑通太屏笔记

4.3寸&#xff1a;4013ef/e1 7寸&#xff1a;7032kw 特点&#xff1a; 如果是使用组态屏进行调试使用&#xff0c;选择com1如果是实际项目使用&#xff0c;选择com2 操作步骤&#xff1a; 先创建设备窗口&#xff0c;再创建用户界面 在设备窗口界面&#xff0c;依次设置如下…...

纯FPGA控制AD9361的思路和实现之一 概述

我们知道PS通过内存映射方式方式用户的IP&#xff0c;具体是将用户的逻辑做成AXI_LITE_SALVE外设&#xff0c;PS做为AXI_LITE_MASTER去控制。 在ZYNQ系统中存在PS所以这个架构和思路很流行&#xff0c;ADI出的配置软件无线电子板的DEMO基本都是基于这样的架构。比如下图【上截…...

北斗短报文终端与5G融合:构建空天地海一体化通信新生态

随着北斗三号全球组网完成&#xff0c;短报文通信服务从区域覆盖迈向全球通达&#xff0c;其与5G技术的深度融合&#xff0c;正开创“空天地海一体化”通信新时代。深圳作为全国北斗产业高地&#xff0c;汇聚了遨游通讯等领军企业&#xff0c;其推出的北斗短报文终端通过技术创…...

Meteonorm8-免费使用教程(详细教程-免费)

Meteonorm介绍 Meteonorm 8 是一款专业的气象数据生成软件&#xff0c;广泛应用于太阳能、建筑能效、农业气候研究等领域。它提供全球范围内高精度的气象数据&#xff0c;支持多种数据源和插值方法&#xff0c;帮助用户获取特定地点的长期气象统计信息。 Meteonorm核心功能 …...

nohup的使用

最近远程连接服务器跑程序的时候&#xff0c;总是碰到本地电脑息屏或者ssh断开导致程序中断&#xff0c;往往一觉醒来不是程序跑完了而是因为各种原因本地中断了。为此想到了nohup这个命令&#xff0c;可以让程序在我本地电脑关机后也可以在远端服务器上面运行。 命令如下&…...

如何查看HTTP状态码?

目录 一、HTTP状态码查看方法 1. ​​浏览器开发者工具​​ 2. ​​命令行工具​​ 3. ​​服务器日志分析​​ 二、HTTP状态码分类与核心含义 1. ​​信息类&#xff08;1xx&#xff09;​​ 2. ​​成功类&#xff08;2xx&#xff09;​​ 3. ​​重定向类&#xff08…...

2025.04.19【Chord diagram】| 弦图绘制技巧大全

Customization Apply customization to the circular chart: color, background, track height and more. Chart types Learn how to use other chart types like line chart, barcharts, vertical ablines and more. 文章目录 CustomizationChart types 什么是弦图&#xff…...

解码 Web Service:从技术原理到应用场景的深度剖析

Web Service 是一种基于网络的、分布式的计算技术&#xff0c;它允许不同的应用程序之间通过网络进行通信和交互。以下是关于 Web Service 的详细介绍&#xff1a; 一、定义与概念 Web Service 是一种可以通过 Web 协议&#xff08;如 HTTP&#xff09;进行访问的软件组件&am…...

hackmyvm-airbind

收集信息 arp-scan -l nmap -sS -v 192.168.195.162 访问扫描到的ip&#xff0c;直接跳转到登录页面&#xff0c;利用admin/admin弱口令登录 在settings.php中找到一处文件上传&#xff0c;上传一句话木马&#xff0c;上传成功 反弹shell 上传php-reverse-shell.php 抓包&am…...

[HCIP] OSPF 综合实验

题目 实验需求 1.R5为TSP&#xff0c;其上只能配置IP地址&#xff1b; R5与其他所有直连设备间均使用公有IP&#xff1b;环回地址为100.1.1.1/32 2.R4设备为企业出口路由器 3.整个OSPF环境IP基于172.16.0.0/16划分&#xff1b; 4.所有设备均可访问R5的环回&#xff1b; 5…...

arkTs:使用setTimeout / setInterval 实现透明度切换的轮播图

使用setTimeout / setInterval 实现透明度切换的轮播图 1 主要内容说明1.1 setTimeout1.2 setInterval1.3 表格 2 举例说明2.1 图片变化的内容说明2.2 源码相关内容说明2.3 源码A2.4源码A的运行效果展示2.4.1 效果截图2.4.2 效果视频 3.结语4.定位日期 1 主要内容说明 1.1 set…...

苍穹外卖项目中所涉及到的测试内容

1.使用JWT令牌封装用户令牌&#xff0c;并且设置相应的拦截器校验JWT的有效性&#xff0c;从而确保了项目的安全可靠 1.基本功能测试&#xff1a; 验证合法JWT是否能够正常通过拦截器的校验 验证非法的JWT能否正常通过拦截器的校验 2.可靠性测试&#xff1a; 3.易用性测试 …...

案例驱动的 IT 团队管理:创新与突破之路:第五章 创新管理:从机制设计到文化养成-5.2 技术决策民主化-5.2.3草根创新的孵化土壤构建

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 草根创新的孵化土壤构建&#xff1a;IT团队技术决策民主化的底层实践1. 背景与挑战&#xff1a;传统技术决策体系的失效1.1 行业现状与痛点1.2 草根创新的价值潜力 2. 机制设…...

探秘Python 工匠:案例、技巧与工程实践:解锁Python进阶的通关秘籍

重要的放前面 Python 工匠&#xff1a;案例、技巧与工程实践 探秘Python 工匠&#xff1a;案例、技巧与工程实践&#xff1a;解锁Python进阶的通关秘籍 在Python的编程世界中&#xff0c;从入门小白到技术大牛的进阶之路往往充满挑战。Python工匠&#xff1a;案例、技巧与工…...

【langchain4j】Springboot如何接入大模型以及实战开发-AI问答助手(一)

langchain4j介绍 官网地址&#xff1a;https://docs.langchain4j.dev/get-started langchain4j可以说是java和spring的关系&#xff0c;spring让我们开发java应用非常简单&#xff0c;那么langchain4j对应的就是java开发ai的 “Spring” 他集成了AI应用的多种场景&#xff0c…...

解决Windows update服务启动拒绝访问的问题 | wuauserv 注册表拒绝访问的方法

在某些情况下,为了配置系统更新相关服务(例如禁用 Windows 自动更新),我们需要更改注册表中 wuauserv 项的权限。本教程将带你一步步操作,成功获取并修改权限。 修改注册表路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv 步骤一:打开注册表编辑…...