自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(102)
  • 收藏
  • 关注

原创 STM32实现低功耗管理使用配置知识梳理笔记

因此,一款成熟的电子产品,配备低功耗管理的功能重要性不言而喻,特别是偏向于物联网和电池供电的产品,延长设备的工作时间,减少频繁充电和更换电池。STM32使用过程中,按功耗的低到高,可以归类为4中工作模式,正常模式、睡眠模式、停止模式和待机模式。在默认情况下,在系统复位或上电复位后,微控制器进入到正常运行模式。在运行模式下,CPU通过HCLK提供时钟,并执行用户程序代码。在STM32中,系统提供了3种主要的低功耗模式,分别是睡眠模式、停止模式和待机模式。在不同模式下,启动时间和唤醒方式是不同的,开发者需要根

2025-10-26 17:49:55 1144

原创 STM32独立看门狗IWDG与窗口看门狗WWDG知识梳理笔记

看门狗,顾名思义,主要作用就是看家护院,随时监控异常情况的。用比较接地气的话来说就是,当你在家里睡着或者在干别的事情时候,看门狗帮你看好家里的大门(监控程序),一旦发现有贼或者不对劲的时候(发现异常),就会大叫,把你叫过来(程序复位)。看门狗就是一个监控程序是否可靠运行的电路,如果不能可靠运行,则复位CPU。在STM32中,有两种看门狗外设,一种是独立看门狗,另一种是窗口看门狗。

2025-10-07 18:39:02 1043

原创 MAX31865模块和PT100实现温度测量使用配置笔记教程

MAX31865也是一个用于测温的模块,通常配合PT100、PT1000一起使用,非常好的一个特性就是防水,可测量的温度范围值比其它模块的更大。用厂家的话来说就是,MAX31865是一款易于使用的电阻-数字转换器,针对铂电阻温度检测器(RTD)进行了优化。MAX31865这个传感器模块目前已经广泛应用在工业设备,医疗设备,和仪器仪表中。

2025-10-02 19:35:01 1284

原创 STM32启动文件startsup__xxx.s汇编文件代码深入梳理总结笔记

启动文件由汇编编写,是系统上电复位后第一执行的程序。1)初始化堆栈指针,主要是为 C 语言提供良好的运行环境2)进行复位处理,执行该 Reset_Handler 函数3)初始化向量表,异常入口地址列表4)配置系统的时钟,调用 SystemInit5)调用 C 库函数__main 进入 main.c 中的 main 函数执行

2025-09-30 22:33:48 945

原创 Protobuf协议开发应用笔记教程

Protobuf的全称是Protocol Buffers, 这是一种语言中立、平台中立、可扩展的结构化数据序列化机制。它是 Google 开发的一种数据序列化协议(与 XML、JSON 类似),但是处理起来的数据比JSON更小更快,并且只要定义好了数据结构,就可以用Protobuf的工具,快速生成导出源代码。可以非常轻松地从各种数据流中读写定义的结构化数据,支持多种语言,如C++、C#、Java和Python等。protobuf采用小端进行编码,将一系列的数据内容转换成二进制的数据,虽可读性降低了,但是

2025-09-15 08:30:00 650

原创 vcpkg:面向C/C++的跨平台库管理工具软件配置笔记经验教程

vcpkg 是由 Microsoft 和 C++ 社区维护的免费开源 C/C++ 包管理器,可在 Windows、macOS 和 Linux 上运行。 它是核心的 C++ 工具,使用 C++ 和 CMake 脚本编写。 它旨在解决管理 C/C++ 库的独特难题。简单的大白话来说,vcpkg就是一个软件包管理工具,让开发者快速使用安装一些工具软件,跟Python安装一些依赖库的方式差不多。

2025-09-13 15:57:26 996 1

原创 Linux系统编程 | 线程池

线程池(Thread Pool)是一种多线程处理模式,是一种管理线程的机制,通过预先创建一组可复用的线程来执行任务,旨在优化资源利用、提升响应速度并降低系统开销。一个进程中的线程就好比是一家公司里的员工,员工的数目应该根据公司的业务多少来定,太少了忙不过来,但是太多了也浪费资源,最理想的情况是:让进程有一些初始数目的线程(所谓的线程池),当没有任务的时候这些线程自动进入睡眠,有了任务他们会立即执行任务,不断循环。进程还应该可以根据自身任务的繁重与否来增删线程的数目,当所有的任务都完成了之后,所有的线程还能

2025-08-11 19:17:24 1101

原创 Linux系统编程 | 条件变量

条件变量是另一种逻辑稍微复杂一点点的同步互斥机制,其必须跟互斥锁一起配合使用,它的应用场景也是十分常见的。余额这个变量很显然是一个由很多人共同操作的典型的共享资源,因此任何人在访问之前都必须加互斥锁,在余额为 0 的情况下进入某个条件变量等待队列中等待,其他人修改了余额之后再用这个条件变量来通知这些等待的人,让他们得知情况有变,从而再对条件再做判断。

2025-07-14 09:00:00 1001

原创 Linux系统编程 | 读写锁

基于互斥锁在的不足,提出了读写锁。读写锁允许多个线程同时读取共享资源,但在写入共享资源时只允许一个线程进行。它把锁分为两部分:读锁和写锁,其中读锁允许多个线程同时获得,因为读操作本身是线程安全的,而写锁则是互斥锁,不允许多个线程同时获得写锁,并且写操作和读操作也是互斥的。读写锁提高了程序执行性能:多个读锁可以同时执行,相比于普通锁在任何情况下都要排队执行来说,读写锁提高了程序的执行性能。读写锁避免读到临时数据:读锁和写锁是互斥排队执行的,这样可以保证了读取操作不会读到写了一半的临时数据。

2025-07-11 11:36:42 1145

原创 Linux系统编程 | 互斥锁

互斥锁用于保护线程中某一个共享资源, 该资源在任意一个时刻都只允许有一个线程可以访问的情况。互斥锁是专门用于处理线程互斥的一种方式,它有两种状态:上锁状态、解锁状态。例如有多个线程有可能会对某一个链表进行删除、插入的操作。那么任何一个线程想要操作该链表前都应该使用互斥锁来阻塞等待操作的权限(pthread_mutex_lock),当获得权限后上锁,阻止其他线程来同时访问该链表造成链表的错乱。当操作结束后使用解锁函数(pthread_mutex_unlock)把锁资源释放出来。特点: 如果互斥锁处于上锁状

2025-06-29 15:54:10 520

原创 Linux系统编程 | 线程属性设置

线程属性设置是指在创建线程之前,可以对线程的一些特性进行配置。这些属性决定了线程的行为特征,比如线程的栈大小、调度策略等。线程分离状态(Detached State):这个属性决定一个线程是否为分离状态。处于分离状态的线程结束后会自动释放其资源给系统,而非分离状态的线程需要手动回收其资源。栈大小(Stack Size):每个线程都有自己的栈空间,用于存储函数调用时的局部变量等信息。可以根据需要调整线程栈的大小,以优化性能或避免栈溢出错误。调度策略(Scheduling Policy):这决定了操作系统

2025-06-28 15:19:34 851

原创 Linux系统编程 | 多线程---CPU调度最小单位

线程实际上是应用层的概念。在Linux内核中,所有的调度实体都被称为任务(task),他们之间的区别是:有些任务自己拥有一套完整的资源,而有些任务彼此之间共享一套资源。进程: 进程是操作系统资源分配的基本实体。线程: 线程是CPU调度的基本单位,是进程内部资源,是linux中最小资源单位。资源共享:同一进程内的所有线程共享该进程的资源,包括内存地址空间、文件描述符等。这使得线程之间的数据交换变得高效。并发性:线程最重要的特性是并发,线程函数 doSomething() 会与主线程 main() 同时

2025-06-22 16:51:54 1121

原创 Linux系统编程 | IPC对象---信号量

信号量SEM全称Semaphore,中文也翻译为信号灯。信号量跟消息队列和共享内存有极大的不同,SEM不是用来传输数据的,而是作为“旗语”,用来协调各进程或者线程工作的。信号量本质上是一个数字,用来表征一种资源的数量,当多个进程或者线程争夺这些稀缺资源的时候,信号量用来保证他们合理地、秩序地使用这些资源,而不会陷入逻辑谬误之中。信号量也是属于IPC对象,所以使用信号量之前必须先申请key值。信号量不是用于进程之间的数据通信,但是作用于进程之间的通信,起辅助作用。

2025-06-21 18:33:52 862

原创 Linux系统编程 | IPC对象---共享内存

共享内存(shared memory)是最简单的Linux进程间通信方式之一。共享内存,顾名思义,就是使不同的进程共享一段相同的内存来达到通信的目的,由于SHM对象不再交由内核托管,因此共享内存SHM对象是众多IPC方式最高效的一种方式,但也因为这个原因,SHM一般不能单独使用,而需要配合诸如互斥锁、信号量等协同机制使用。通俗易懂的来说,因为所有的进程对共享内存的访问就和访问自己的内存空间一样,而不需要进行额外系统调用或内核操作,同时还避免了多余的内存拷贝,所以,这种方式是效率最高、速

2025-06-15 22:14:00 527

原创 Linux系统编程 | IPC对象---消息队列

IPC对象是活动在内核级别的一种进程间通信的工具。各种不同的IPC其实是在不同时期逐步引入的,在UNIX伯克利版本system-V(念作系统五,V是罗马数字,是Unix伯克利分支的版本号)中引入的三种通信方式(消息队列、共享内存和信号量组)被称为IPC对象。消息队列是system-V三种IPC对象之一,其最主要的特征是允许发送的数据携带类型,具有相同类型的数据在消息队列内部排队,读取的时候也要指定类型,然后依次读出数据。这使得消息队列用起来就像一个多管道集合。

2025-05-22 21:15:24 1159

原创 Linux系统编程 | Signal信号集

在 Linux 中,信号集(Signal Set)是一种用于管理和操作信号的数据结构。信号集是一个包含多个信号的集合,它可以用来表示一组需要被处理、阻塞或忽略的信号。每个信号在信号集中都有对应的标志位,通过对这些标志位的操作,可以方便地对一组信号进行统一的管理。

2025-05-13 21:26:45 914

原创 Linux系统编程 | 进程间Signal信号通信

在Linux操作系统中,进程间通信(Inter-Process Communication, IPC)是一个重要的概念,它允许不同的进程之间交换信息或同步它们的行为。信号(signal)是一种基本的进程间通信机制,用于通知一个进程发生了某个特定事件。信号是一种异步通信机制,一般情况下,进程什么时候会收到信号、收到什么信号是无法事先预料的。(就像你家的门铃,你不知道它什么时候会响,但是门铃响的时候我们可以下楼开门(处理))

2025-05-08 17:15:22 956

原创 Linux系统编程 | 进程间管道通信

在Linux系统中,进程间通信(Inter-Process Communication, IPC)是不同进程之间进行数据交换和同步的过程。管道是一种半双工的通信机制,通常用于具有亲缘关系的进程之间(如父子进程)。它只能在单向上传输数据。命名管道(也称为FIFO)则允许无亲缘关系的进程之间通过文件系统中的一个特殊文件进行通信。

2025-05-04 14:32:48 1059

原创 Linux系统编程 | 进程的加载与替换:exec簇

在Linux中,用于加载并执行指定程序的API有exec簇和system函数。exec簇的进程替换不会创建一个新的进程,只是加载新的程序代码和数据,替换当前进程执行的程序代码。system函数的进程替换是创建一个新的子进程,然后在新的子进程里面去执行指定的命令。

2025-04-28 20:36:43 714

原创 Linux系统编程 | 精灵进程与守护进程

精灵进程又称守护进程、后台进程,在英文中称为 daemon 进程。精灵进程是运行在一个相对干净的环境、不受终端影响、常驻内存的进程,和神话中的精灵一样,拥有不死不灭的特性,长期稳定提供某种功能或服务。本文将对精灵进程、守护进程进行基础知识的梳理及其创建的过程讲解。

2025-04-23 21:57:39 1058

原创 Linux系统编程 | 孤儿进程与僵尸进程

了解 ​​孤儿进程(Orphan Process)​​ 和 ​​僵尸进程(Zombie Process)​​ 是深入理解 Linux/Unix 进程管理的关键,尤其在开发高可靠性服务、调试系统问题或优化资源管理时至关重要。理解孤儿进程和僵尸进程,能帮助编写出更加可靠的多进程程序、有效管理系统资源、快速定位异常,并避免安全漏洞。这是与Linux系统开发和运维相关岗位的​​基本功​!

2025-04-20 18:12:58 1137

原创 Linux系统编程 | 多进程

多进程(Multiprocessing)是操作系统提供的一种并发执行机制,允许系统同时运行多个进程。它的主要目的是提高计算机资源的利用率、增强程序的并发能力,并改善系统的整体性能。1、提高 CPU 和系统资源的利用率2、增强程序的健壮性和稳定性3、实现真正的并行计算(多核 CPU)4、提高系统的响应能力5、方便实现任务分工和模块化

2025-04-18 21:40:01 1005

原创 C/C++调用Python程序代码实现混合编程笔记教程

C/C++调用Python程序代码实现混合编程笔记教程Python‌在基础开发、数据科学、人工智能、Web框架开发等领域具有广泛的支持工具和开发教程,极大的缩短了产品原型开发周期、降低了开发难度。有许多的功能,通过C/C++实现,非常的复杂并且不方便,但是Python可能就是几行代码就搞定了。为了避免处处重复造轮子,又希望在原先的C/C++通用轻松简单的实现一些功能,因此探索在C/C++中如何嵌入调用Python的API及应用程序非常有必要。

2025-04-12 21:26:26 1258

原创 Windows中xxx.dll动态链接库文件转xxx.a静态库文件

Windows中xxx.dll动态链接库文件转xxx.a静态库文件笔记教程

2025-04-12 21:12:00 1110

原创 Shell脚本编程之正则表达式

在 Shell 脚本中,正则表达式是一种强大且常用的文本处理工具,它可以用来匹配、搜索、替换和截取字符串。正则表达式是由一些字符去描述规则,在正则表达式中有两类字符(1)元字符(Meta Character):Shell 环境中具有特殊含义的字符,在命令行解释、文件名扩展、变量替换等方面起着关键作用。(2)普通字符:仅代表自身的字符。\元字符 ==> 普通字符正则表达式也有不同的流派(如Egrep,java,C#)很多语言都用到了正则表达式,但是这些语言中用来描述字符串规则的"元字符"不是都一样的,

2025-04-07 19:38:21 1362 2

原创 Shell脚本编程之大括号扩展

在 Shell 中,大括号扩展(Brace Expansion),通常也被称为"花括号扩展",是一种非常有用的功能,用于生成一系列字符串或文件名。它允许用户通过简短的语法快速生成多个相似的字符串或路径。这种功能在批量创建文件、生成序列数据或简化命令输入时非常方便。可以帮助我们简化代码、提高效率。注意:①、空格敏感性:大括号内部不能有空格,否则会导致错误。         ②、未匹配时不扩展:如果大括号内没有有效的模式,原样输出。         ③、与通配符的区别:大括号扩展与通配符(如 *、?)不

2025-04-03 17:22:52 970

原创 Shell脚本编程之运算符应用

Shell 和C/C++语言类似,支持多种运算符,包括:①、算数运算符②、关系运算符③、布尔运算符④、字符串运算符⑤、文件测试运算符提醒:原生的bash脚本并不支持简单的数学运算,但可以通过awk和expr等命令来实现简单的数学运算, 其中较为常见的是expr。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

2025-03-23 14:45:25 1253

原创 Shell脚本编程之流程控制

shell中的流程控制语句包括条件判断、循环结构和​流程控制命令等。Shell 脚本的流程控制在 ​嵌入式开发 和 ​Linux 运维 中扮演着至关重要的角色,能够实现自动化、资源管理和系统监控等核心任务。

2025-03-15 16:57:52 837

原创 Shell脚本编程基础篇(2)

shell编程就是通过shell语法将shell命令组合起来,写入一个文件中。将来运行这个文件时,就会执行里面的每一行shell语法,这个文件称之为shell脚本文件。通过shell脚本实现更加自动化和智能化。shell脚本就是实现Linux系统自动管理以及自动化运维所必备的工具,Linux 的底层以及基础应用软件的核心大都涉及 Shell 脚本的内容。本文将紧接上文,继续讲解shell的应用。

2025-03-10 21:49:43 897

原创 Shell脚本编程基础篇(1)

shell在英文中翻译为"贝壳",在贝壳内部就是linux系统内核,在贝壳外部就是用户。Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。Shell 本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序。对于shell而言,就是用户与内核之间的媒介。

2025-03-07 15:33:58 1036

原创 Altium Designer 23打开Cadence Allegro原理图及PCB工程文件

 这篇博文的内容主要介绍如何在Altium Designer23中,打开Cadence Allegro的原理图及PCB工程文件。        在进行转换前,需要提前安装Altium Designer和Cadence软件。如果仅安装了Altium Designer,是无法正常转换打开Cadence Allegro的原理图和PCB文件的。建议这两个软件,安装发布时间相近的。

2025-02-22 17:50:33 4123

原创 Altium Designer 23原理图编译Net XXX has no driving source警告

本文着手对工程中的几个元器件的引脚出现了Net XXX has no drving source警告进行解决。有如下两种解决办法:(1)、修改元器件引脚电气属性,(2)、忽略屏蔽电气属性检测功能

2025-02-16 19:50:19 1388

原创 Altium Designer 23原理图编译Duplicate Net Names Wire xxx报错

针对Altium Designer软件中原理图编译时出现的Duplicate Net Names Wire xxx错误,有效的解决措施如下:(1)、修改网络标签作用范围,(2)、离图连接器和网络标签不能同名

2025-02-16 13:04:16 2753

原创 网络编程 | HTTP协议梳理及编程实现经验教程

HTTP协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。传统的HTTP 工作在 TCP/IP 模型之上,通常使用端口 80。最近的 HTTP/2 和 HTTP/3 则使用了更先进的传输层协议,例如基于 TCP 的二进制协议(HTTP/2)或基于UDP的 QUIC 协议(HTTP/3)。

2025-01-23 15:53:56 1041

原创 网络编程 | UDP组播通信

组播是介于单播与广播之间,在一个局域网内,将某些主机添加到组中,并设置一个组地址。将数据发送到组播地址时,加入到该组的所有主机都能接收到数据。组播是主机间一对多的通信模式, 组播是一种允许一个或多个组播源发送同一报文到多个接收者的技术。类似于生活中较为常见的群聊功能,在群内的所有群员,都可以在群内发送消息给群友,也可以接收到来自任意群友的消息。

2025-01-20 21:19:34 2316

原创 网络编程 | UDP广播通信

广播是计算机网络通信中的一种通信模式,它的主要特点是将数据包发送到网络上的所有设备,而不是特定的单个设备。这种通信模式被广泛用于局域网络(LAN)中,用于向网络中的所有设备广播消息。只有用户数据报套接字(使用UDP协议)才能广播。UDP(用户数据报协议)广播是一种网络通信方式,它允许信息在同一局域网内的所有设备之间共享。

2025-01-18 21:38:17 2183

原创 网络编程 | UDP套接字通信及编程实现经验教程

TCP协议在网络通信中占主导地位,绝大多数的网络通信借助TCP协议完成数据传输。但UDP也是网络通信中不可或缺的重要通信手段。相较于TCP而言,UDP通信的形式更像是发短信。不需要在数据传输之前建立、维护连接。只专心获取数据就好。省去了三次握手的过程,通信速度可以大大提高,但与之伴随的通信的稳定性和正确率便得不到保证。因此,我们称UDP为“无连接的不可靠的报文传输协议”。

2025-01-18 19:11:42 1912 2

原创 网络编程 | TCP套接字通信及编程实现经验教程

TCP/IP协议簇中包含了如TCP、UDP、IP、ICMP、ARP、HTTP等通信协议。TCP协议是TCP/IP协议簇中最为常见且重要的通信方式之一,它为互联网上的数据传输提供了可靠性和连接管理。TCP(Transmission Control Protocol,传输控制协议)是面向连接的、可靠的、基于字节流的传输层通信协议。它主要用于在不可靠的互联网上提供可靠的数据传输。TCP被广泛应用于各种网络应用中,如Web浏览(HTTP/HTTPS)、电子邮件(SMTP、POP3、IMAP)、

2024-12-08 16:01:01 2459 1

原创 Linux修改系统及终端命令行中的用户名

Linux中,修改系统及终端命令行中的用户名数据信息。

2024-11-30 20:20:40 2879

原创 VS2022对代码文件添加管理注释说明信息

VS2022对代码文件添加管理注释说明信息!

2024-11-30 17:00:22 1612

STM32驱动MAX31865模块和PT100实现温度测量工程代码

STM32驱动MAX31865模块和PT100实现温度测量完整工程代码,程序代码中,编写了对应MAX31865模块的驱动程序。并编写了测试用例,实现温度数据的读取。 关于MAX31865模块的知识讲解,可以参考本人的以下博客文章:https://blog.csdn.net/weixin_49337111/article/details/152416384?spm=1001.2014.3001.5502 有问题欢迎讨论沟通交流。

2025-10-02

STM32移植LVGL+FatFs+FreeRTOS综合工程代码

在STM32F407开发板,针对MDK KEIL v5软件平台上,移植实现LVGL+FatFs+FreeRTOS的完整工程代码。 FatFs R0.15移植教程:https://blog.csdn.net/weixin_49337111/article/details/139332023?spm=1001.2014.3001.5501 LVGL移植教程:https://blog.csdn.net/weixin_49337111/article/details/139142416?spm=1001.2014.3001.5501 LVGL图片显示教程:https://blog.csdn.net/weixin_49337111/article/details/141609089?spm=1001.2014.3001.5501 FreeRTOS移植教程:https://blog.csdn.net/weixin_49337111/article/details/135079595?spm=1001.2014.3001.5501

2024-08-28

LVGL移植到STM32 MCU平台通用程序源码

LVGL移植到STM32 MCU平台详细经验笔记教程 LVGL移植教程链接:https://blog.csdn.net/weixin_49337111/article/details/139142416?spm=1001.2014.3001.5502 本程序为上述教程中的程序源码,目标平台为STM32F407VET6,使用了LVGL v8.3版的库,经测试,代码运行正常。仅供参考交流学习,如有问题,欢迎交流讨论。

2024-05-23

嵌入式MCU BootLoader开发配置工程Demo

嵌入式MCU BootLoader开发配置详细笔记教程中的工程demo资源文件 博客文章链接:https://blog.csdn.net/weixin_49337111/article/details/137680267?spm=1001.2014.3001.5502 BootLoader和APP应用程序的启动跳转切换,原理上就是内存地址的切换,当BootLoader程序接收到对应的操作触发条件时,会进行相应的地址跳转切换,及一些其它的附加操作,然后执行该地址空间上的用户程序。但一般来说,BootLoader中会进行CPU工作模式、配置内存控制器、初始化外设等工作,为后续程序运行创建一个稳定的硬件环境。所以在APP中可以节省掉BootLoader中已经进行过的硬件环境配置。

2024-04-14

SDL2支持文件,SDL2-devel-2.30.1-mingw.zip

VScode中安装LVGL模拟器所使用的依赖下载文件,SDL2-devel-2.30.1-mingw.zip 安装LVGL模拟器的教程如下 https://blog.csdn.net/weixin_49337111/article/details/136536375#comments_31930883

2024-03-28

ESP32接入网络后,循环扫描服务器IP及端口是否在线的完整工程demo(ESP-IDF)

ESP32接入网络后,循环扫描服务器IP及端口是否在线的完整工程demo(ESP-IDF) 本资源详细描述的CSDN博客文章说明:https://blog.csdn.net/weixin_49337111/article/details/135305996?spm=1001.2014.3001.5501

2024-01-09

STM32移植FreeRTOS正常运行的工程源代码

STM32移植FreeRTOS,经测试验证能正常运行的工程源代码,STM32F407,STM32F103系列,其它版本后续更新,所使用的库为ST官方于2022年更新的标准库(对的,没有写错,是2022版最新的STM32标准库)。 FreeRTOS移植可参考本人的CSDN博客:https://blog.csdn.net/weixin_49337111/article/details/135079595?spm=1001.2014.3001.5502 如有问题,欢迎交流讨论。

2024-01-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除