如何0基础学stm32?

news2025/4/20 9:54:56

如何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年嵌入式如何高薪入行?
  • 程序员必备编程资料大全
  • 程序员必备软件资源

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2338647.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无需训练的具身导航探索!TRAVEL:零样本视觉语言导航中的检索与对齐

作者: Navid Rajabi, Jana Kosecka 单位:乔治梅森大学计算机科学系 论文标题:TRAVEL: Training-Free Retrieval and Alignment for Vision-and-Language Navigation 论文链接:https://arxiv.org/pdf/2502.07306 主要贡献 提出…

C#测试linq中的左连接的基本用法

使用linq联表或者连接两个对象集合查询时一般使用的是join关键字,返回结果中包含两个表或两个对象集合中连接字段相等的数据记录,如果要实现sql语句中的左连接效果,并没有现成的left join关键字,此时可以使用DefaultIfEmpty 实现左…

2025-04-19 Python 强类型编程

文章目录 1 方法标注1.1 参数与返回值1.2 变参类型1.3 函数类型 2 数据类型2.1 内置类型2.2 复杂数据结构2.3 类别选择2.4 泛型 3 标注方式3.1 注释标注3.2 文件标注 4 特殊情形4.1 前置引用4.2 函数标注扩展4.3 协变与逆变4.4 dataclass 5 高级内容5.1 接口5.2 泛型的协变/逆变…

spring-batch批处理框架(2)

文章目录 八、作业控制8.1 作业启动8.1.1 SpringBoot 启动8.1.2 Spring 单元测试启动8.1.3 RESTful API 启动 8.2 作业停止方案1:Step 步骤监听器方式方案2:StepExecution停止标记 8.3 作业重启8.3.1 禁止重启8.3.2 限制重启次数8.3.3 无限重启 九、Item…

动态规划算法的欢乐密码(一):斐波那契数模型

专栏:算法的魔法世界 个人主页:手握风云 目录 一、动态规划 二、例题讲解 2.1. 第 N 个泰波那契数 2.2. 三步问题 2.3. 使用最小花费爬楼梯 2.4. 解码方法 一、动态规划 动态规划是一种将复杂问题分解为更小的子问题,并利用子问题的解来…

Echarts柱状图斜线环纹(图形的贴花图案)

单独设置 <!--此示例下载自 https://echarts.apache.org/examples/zh/editor.html?cbar-stack&codePYBwLglsB2AEC8sDeAoWszGAG0iAXMmuhgE4QDmFApqYQOQCGAHhAM70A0x6L7ACsAjQwtQqhIkwATxDUGbABaMAJsADu9HrAC-xHd3TZqNaCvEHiFcuaKTjAMzAMAzAFIu28hUXPY9ABYPQxIAI2AwTABbV…

2025.04.19【Spider】| 蜘蛛图绘制技巧精解

Basic multi-group radar chart Start with a basic version, learn how to format your input dataset Radar chart with ggradar A Spider chart made using the ggradar package and a lot of customization.A work by Tuo Wang 文章目录 Basic multi-group radar chartRa…

【Linux】深入理解Linux文件系统:从C接口到内核设计哲学

文章目录 前言一、C语言中的文件接口1. 文件指针&#xff08;句柄&#xff09;FILE*以写方式打开文件&#xff0c;若文件不存在会新建一个文件W写入方式&#xff0c;在打开文件之前都会将文件内容全部清空追加写方式&#xff0c;其用法与写方法一致&#xff0c;不同在于a方法可…

基于尚硅谷FreeRTOS视频笔记——15—系统配制文件说明与数据规范

目录 配置函数 INCLUDE函数 config函数 数据类型 命名规范 函数与宏 配置函数 官网上可以查找 最核心的就是 config和INCLUDE INCLUDE函数 这些就是裁剪的函数 它们使用一个ifndef。如果定义了&#xff0c;就如果定义了这个宏定义&#xff0c;那么代码就生效。 通过ifn…

Linux网络编程 深入解析TFTP协议:基于UDP的文件传输实战

知识点1【TFTP的概述】 学习通信的基本&#xff1a;通信协议&#xff08;具体发送上面样的报文&#xff09;、通信流程&#xff08;按照什么步骤发送&#xff09; 1、TFTP的概述 tftp&#xff1a;简单文件传输协议&#xff0c;**基于UDP&#xff0c;**不进行用户有效性验证 …

c# MES生产进度看板,报警看板 热流道行业可用实时看生产进度

MES生产进度看板&#xff0c;报警看板 热流道行业可用实时看生产进度 背景 本软件是给宁波热流道行业客户开发的生产电子看板软件系统 功能 1.录入工艺流程图&#xff08;途程图&#xff09;由多个站别组成。可以手动设置每个工艺站点完成百分比。 2.可以看生成到哪个工…

初识Redis · C++客户端string

目录 前言&#xff1a; string的API使用 set get&#xff1a; expire: NX XX: mset,mget&#xff1a; getrange setrange: incr decr 前言&#xff1a; 在前文&#xff0c;我们已经学习了Redis的定制化客户端怎么来的&#xff0c;以及如何配置好Redis定制化客户端&…

华硕原厂系统枪神9/9p超竟版-WIN11原装开箱出厂系统安装

华硕原厂系统枪神9/9p超竟版-WIN11-24H2-专业工作站版本安装可带F12-ASUSRecovery恢复功能 适用机型&#xff1a; G635LX、G635LW、G835LX、G835LW、G615LW、G615LP、G615LM、G615LH G815LW、G815LP、G815LM、G815LH、G635LR、G835LR、G615LR、G815LR 远程恢复安装&#xff…

CF1016赛后总结

文章目录 前言T1:Ideal GeneratorT2&#xff1a;Expensive NumberT3:Simple RepetitionT4&#xff1a;Skibidi TableT5:Min Max MEXT6:Hackers and Neural NetworksT7:Shorten the Array 前言 由于最近在半期考试&#xff0c;更新稍微晚了一点&#xff0c;还望大家见谅 &#…

QT聊天项目DAY06

1.从git上同步项目 编译测试&#xff0c;编译通过 Post请求测试 测试成功 2. email is 打印有问题&#xff0c;检查 解析结果是存储在jsonResult中的&#xff0c;修改 3. 客户端实现Post验证码请求 3.1 同步Qt客户端项目 检查QT版本&#xff0c;由于我在公司用的还是QT5.12.9…

GNU,GDB,GCC,G++是什么?与其他编译器又有什么关系?

文章目录 前言1. GNU和他的工具1.1 gcc与g1.2 gdb 2.Windows的Mingw/MSVC3.LLVM的clang/clang4.Make/CMake 前言 在开始之前我们先放一段Hello World&#xff1a;hello.c #include <stdio.h>int main() {printf("Hello World");return 0; }然后就是一段老生常…

笔记整理五

STP生成树 stp生成树是用于解决二层环路问题的协议。 二层环路为有以下三种&#xff1a; 1.广播风暴 2.MAC地址的偏移&#xff08;每一次循环&#xff0c;都会导致交换机来回刷新MAC地址表记录&#xff09; 3.多帧复制 stp生成树&#xff1a;需要将原本的环型拓扑结构转换…

奥比中光tof相机开发学习笔记

针对奥比中光 tof相机&#xff0c;官方提供的资料如下ProcessOn Mindmap|思维导图 Orbbec SDK Python Wrapper基于Orbbec SDK进行设计封装&#xff0c;主要实现数据流接收&#xff0c;设备指令控制。下面就其开发适配进行如下总结&#xff1a; &#xff08;1&#xff09;系统配…

【面试向】点积与注意力机制,逐步编码理解自注意力机制

点积&#xff08;dot product&#xff09;两个向量点积的数学公式点积&#xff08;dot product&#xff09;与 Attention 注意力机制&#xff08;Attention&#xff09;注意力机制的核心思想注意力机制中的缩放点积自注意力机制中&#xff0c;谁注意谁&#xff1f; 逐步编码理解…

一个 CTO 的深度思考

今天和一些同事聊了一会&#xff0c;以下是我的观点 我的观点&#xff0c;成年人只能筛选&#xff0c;不能培养在组织中&#xff0c;应该永远向有结果的人看齐。不能当他站出来讲话的时候&#xff0c;大家还要讨论讨论&#xff0c;他虽然拿到结果了&#xff0c;但是他就是有一…