- 博客(57)
- 收藏
- 关注
原创 FreeRTOS综合代码实例---多级菜单的设计
本实例展示了如何基于FreeRTOS实现模块化的任务管理和多级菜单功能,适合开发者学习和参考。
2024-11-30 17:45:46
1081
原创 RTOS学习笔记---“二值信号量”和“互斥信号量”
二值信号量是信号量的一种特殊形式,其值只能为0或1。典型用途用于任务同步:协调任务之间的执行顺序。例如,一个任务完成某件事情后,通知另一个任务继续执行。用于事件通知:某个中断或事件发生时,通过二值信号量唤醒等待的任务。互斥信号量(Mutex)是设计用于任务间互斥访问共享资源的同步机制。它是一种特殊的二值信号量,带有所有权和优先级继承的功能。
2024-11-22 19:12:56
673
原创 STM32学习笔记-----独立看门狗
独立看门狗基于一个专用的低速时钟 (LSI,通常为 32kHz) 工作,与主系统时钟独立。IWDG 的主要功能是定期监控程序是否正常运行,如果超过设定时间没有“喂狗”,则会触发系统复位。是一个非常重要的外设,用于提高系统的可靠性。它可以防止系统因软件错误或硬件异常导致的死机,强制系统复位,从而实现容错功能。窗口看门狗基于主系统时钟工作,允许用户在一个特定的时间窗口内刷新计数器。如果刷新计数器的时间过早或过晚都会触发复位。在指定的时间窗口内刷新计数器,防止触发复位。在异常情况下,WWDG 会触发系统复位。
2024-11-22 09:00:19
431
原创 STM32学习笔记-----RS-232(SCI串行通信接口的一种)
RS-232是一种用于串行通信的标准接口协议,由EIA(电子工业协会)在1960年代定义,主要用于计算机和外设之间的串行数据通信。RS-232虽然在现代通信中逐渐被更高效的协议(如USB、Ethernet)取代,但其。使其在许多工业和嵌入式场景中仍然是不可或缺的。启用USART1和GPIOA的时钟。
2024-11-21 10:09:10
1109
原创 STM32学习笔记----IIC用的是开漏还是推挽,有没有用到上下拉
IIC使用开漏(Open-Drain)驱动方式,未使用推挽。IIC总线需要上拉电阻,不使用下拉电阻。
2024-11-20 20:19:15
376
原创 STM32学习笔记-----什么是同步/异步/全双工/半双工/单工?
同步 (Synchronous):发送和接收设备共享时钟信号,传输时序同步。异步 (Asynchronous):发送和接收设备独立,依赖于波特率和时序来传输数据。全双工 (Full-Duplex):通信双方可以同时发送和接收数据。半双工 (Half-Duplex):通信双方不能同时发送和接收数据,而是交替进行。单工 (Simplex):数据只能在一个方向上传输。在STM32中,这些通信方式可以通过不同的接口协议(如USART、SPI、I2C)灵活配置,根据需求选择合适的模式来满足通信的要求。
2024-11-20 08:59:09
787
原创 STM32学习笔记----UART、IIC、SPI的区别
UART适用于低速、点对点通信的场景,配置简单。I2C适用于低速但需要多个设备连接的场景,尤其适用于传感器和EEPROM。SPI适用于高速、全双工的应用,常用于数据存储和传感器接口。在实际使用中,根据设备间的距离、数据速率要求、通信协议的复杂度等因素来选择最合适的通信接口。
2024-11-19 08:44:49
1048
原创 STM32学习笔记-----I2C协议
使用STM32的标准库配置和使用I2C外设涉及初始化I2C外设、配置GPIO、进行数据传输等步骤。理解I2C的工作原理和每个步骤的细节是保证通信稳定性的关键。通过标准库的I2C功能,STM32可以高效地与外部设备(如传感器、EEPROM等)进行数据交换,适用于各种嵌入式应用。
2024-11-18 20:33:06
686
原创 STM32学习笔记-----DMA原理介绍
DMA(Direct Memory Access,直接内存访问)是一种数据传输方式,它可以在外设和内存之间直接传输数据,而不需要CPU的干预。STM32系列微控制器中提供了强大的DMA功能,可以用来加速数据传输,减轻CPU的负担。在STM32中,DMA控制器允许外设(如USART、SPI、ADC等)与内存之间进行高效的数据交换。DMA传输不仅可以提高系统的效率,还能让CPU在数据传输过程中进行其他任务的处理,从而提高系统的整体性能。
2024-11-18 09:55:25
801
原创 STM32学习笔记----RTC的功能及其使用
RTC(Real-Time Clock)是STM32中的一种独立的时间管理模块,用于提供精确的日期、时间以及计时功能。RTC模块能够在设备掉电或低功耗模式下,通过连接备用电池或超级电容继续保持运行。以下详细介绍STM32中的RTC功能及其在标准库中的使用。独立时钟源时间和日期管理报警功能备用寄存器时间戳功能低功耗运行RTC的使用涉及几个关键步骤:初始化、时间设置、时间读取和报警设置等。以下是详细的配置和使用流程。初始化RTC需要配置时钟源以及初始化时间和日期。2. 设置时间和日期通过RTC标准库函
2024-11-16 09:39:29
768
原创 STM32学习笔记----时钟体系
时钟源:用于产生时钟信号的硬件部分。STM32支持多种时钟源,包括内部时钟源和外部时钟源。时钟树:系统内部的时钟分配结构,将时钟从源传递到不同的模块。时钟配置:通过配置时钟源、分频器等来调整系统的时钟频率。STM32的时钟体系是一个复杂且高度可配置的系统,允许用户根据需求灵活选择不同的时钟源和配置参数。通过RCC寄存器进行配置,能够调整系统时钟频率、外设时钟、分频比等,以满足不同应用的需求。标准库提供了简化的接口,使得时钟配置变得更加方便。
2024-11-15 19:05:03
1095
原创 STM32学习笔记----SPI协议
STM32的SPI外设模块功能强大,支持全双工、同步传输、主从模式,并且可以通过标准库进行配置和使用。使用SPI时要特别注意时钟的配置、引脚的复用、数据帧的格式等参数。通过标准库的函数,可以轻松实现数据传输,同时也支持中断和DMA等方式,提供了高效的传输机制。
2024-11-15 10:07:40
880
原创 STM32学习笔记-----UART的概念
在 STM32 中,通过标准外设库配置 UART 可以实现简单的串行通信,完成数据的发送和接收。配置过程包括引脚配置、外设时钟使能、外设初始化、数据传输控制等。通过中断或 DMA 可以提高效率,适应更复杂的应用场景。选择标准库还是 HAL 库则取决于具体的应用需求和开发者的偏好。
2024-11-14 21:04:01
1833
原创 STM32学习笔记-----引脚的输出速度(翻转速率)选择要注意的问题
引脚的驱动能力和输出模式系统时钟频率与外部负载电源电压与电流限制通过正确配置这些参数,可以在STM32平台上实现最佳的引脚输出速率,同时确保电路稳定工作。
2024-11-14 09:35:21
554
原创 stm32学习笔记----51单片机和stm32单片机的区别
对比项51单片机(8位)32单片机(32位)架构8位,简单,适合基础控制32位,强大,适合复杂处理处理能力较低,适合简单任务高效,支持复杂算法和运算指令集CISC,指令相对复杂RISC,指令简洁高效存储和外设存储空间小,外设简单存储空间大,外设丰富,扩展性强功耗较低,适合低功耗应用较高,但有低功耗模式开发支持开发工具丰富,适合入门开发工具和库丰富,适合复杂项目应用领域简单控制,低成本应用高性能、复杂系统应用。
2024-11-13 08:54:46
2332
原创 STM32学习笔记------GPIO介绍
以上是使用STM32F4xx标准外设库配置和使用GPIO的基本流程。通过理解结构体的各项配置以及常用的 GPIO 操作函数,可以轻松实现STM32F4系列微控制器的GPIO控制。
2024-11-12 20:26:43
1188
原创 STM32 学习笔记-----STM32 的启动过程
STM32 启动过程中的每一步都有其独特的作用,从硬件引脚设置、栈指针初始化,到异常中断设置、时钟初始化、C 库函数调用,最终跳转到main函数。这个过程确保了 MCU 在开始执行应用程序之前,所有硬件和系统资源都被正确初始化,保证了稳定的运行环境。
2024-11-12 10:00:34
1209
原创 STM32学习笔记------编程驱动蜂鸣器实现音乐播放
可以在STM32上使用定时器和PWM信号控制蜂鸣器,实现简单的音乐播放。可以根据需要添加更多音符,生成完整的曲谱,甚至实现更复杂的音效和音量控制。对于音乐播放,主要使用PWM(脉宽调制)信号来控制蜂鸣器的发声频率。通过改变PWM的占空比和频率,可以模拟不同的音调和音量。通过将每个音符的频率和时长传入,依次播放不同的音符。可以使用延时函数来控制每个音符的播放时长。要通过PWM信号控制蜂鸣器的频率,我们通常使用STM32的定时器模块来产生PWM信号。通过定时器配置的PWM输出控制蜂鸣器的发声。
2024-11-11 19:16:12
4128
2
原创 STM32学习笔记--什么是位段操作(位带BitBand操作)?有什么用?
位段操作(BitBand操作)是ARM架构中的一种高效、简便的操作方式,允许程序直接读写内存中的单个比特位。通过特定的内存映射,这种操作方式能大大提高操作硬件寄存器时的效率,减少代码复杂度,并在一些性能要求高的嵌入式系统中广泛应用。
2024-11-11 09:23:29
1096
原创 什么是上拉和下拉
上拉:将引脚默认拉到高电平,常用于防止输入悬空导致的不确定状态。下拉:将引脚默认拉到低电平,确保没有信号时输入引脚维持在低电平。
2024-11-09 09:37:14
1007
原创 GPIO的推挽输出和开漏输出的区别
特性推挽输出(Push-Pull)开漏输出(Open-Drain)电平状态可输出高电平和低电平只能输出低电平或高阻抗状态,需外部上拉电阻驱动能力较强,适合驱动负载较弱,仅能拉低电平适用场景数字信号传输、控制LED、直接连接到其他逻辑电路I2C总线、1-Wire总线、多设备共用线路上拉电阻不需要外部上拉电阻需要外部上拉电阻多设备共用不适合多个设备共用同一线路适合多个设备共享同一线路功耗较低,除非同时输出高低电平相对较低,只有低电平时消耗较少推挽输出。
2024-11-08 10:02:19
1401
原创 ST32中的中断的概念
在STM32微控制器中,中断是一种允许设备在特定事件(例如外部引脚状态变化、定时器溢出、ADC转换完成等)发生时打断当前程序执行的机制。中断可以显著提高系统的实时响应能力,因为处理器无需主动等待特定事件,而是可以在事件发生时通过中断快速响应。
2024-11-07 15:40:48
783
原创 常见的排序算法(二)
最大堆:对于树中的任意节点 ( i ),有 ( A[i] \geq A[2i+1] ) 和 ( A[i] \geq A[2i+2] ),即父节点的值大于或等于子节点的值。最小堆:对于树中的任意节点 ( i ),有 ( A[i] \leq A[2i+1] ) 和 ( A[i] \leq A[2i+2] ),即父节点的值小于或等于子节点的值。堆排序是一种基于堆数据结构的高效排序算法,它通过构建最大堆(或最小堆)来实现排序。
2024-11-06 18:34:45
743
原创 在C++中,什么是智能指针?智能指针有什么作用?分为哪几种?各自有什么样的特点?
智能指针是 C++ 中非常重要的资源管理工具,能够帮助开发者自动管理对象的生命周期,减少内存泄漏、悬挂指针等问题。unique_ptrshared_ptr和weak_ptr各有其适用场景,理解其特性和使用方法是编写高质量 C++ 代码的关键。通过合理选择不同类型的智能指针,并理解它们在实际应用中的优缺点,可以大大提高代码的安全性、可维护性,并有效避免内存管理方面的潜在问题。
2024-11-06 10:32:10
1209
原创 常见的排序算法(一)
冒泡排序是一种直观且易于理解的排序算法,适合于小规模数据和教学演示。但由于其时间复杂度较高,在面对大规模数据时并不高效。在实际应用中,常常会用更高效的排序算法,如快速排序、归并排序等,来代替冒泡排序。尽管如此,冒泡排序因其稳定性和简单性,仍然在一些特殊场景下有其价值,特别是在数据集较小或几乎已经有序的情况下。选择排序虽然是一种简单且易于理解的排序算法,但它的时间复杂度为 (O(n^2)),对于大规模数据集并不高效,因此在实际应用中一般只用于小规模数据排序或对时间要求不严格的场合。
2024-11-05 18:18:53
1142
原创 函数指针和指针函数的区别
函数指针(Function Pointer): 函数指针是指向函数的指针。通过函数指针,可以间接调用函数,这在实现回调机制和动态链接时非常有用。指针函数(Pointer Function): 指针函数是返回类型为指针的函数。也就是说,该函数会返回一个指针,而这个指针可以指向某种类型的数据。函数指针是一种能够指向函数的指针,适用于动态选择函数调用。指针函数是一种返回指向某种类型数据的指针的函数,适用于处理动态分配的内存或数据结构。
2024-11-04 20:22:24
1015
原创 C++ 的 new 操作符与 C 语言的 malloc 函数的区别
在 C++ 中,推荐使用new和delete来进行内存管理,特别是当处理对象时,因为它们提供了更好的类型安全、自动调用构造和析构函数,并且在异常处理方面更加友好。而malloc和free更适合 C 语言的内存管理方式,但在 C++ 中仍然可以使用,但需要注意手动管理和类型转换的问题。
2024-11-04 16:41:02
278
原创 C++中的指针和引用的区别
指针指针是一个变量,存储另一个变量的内存地址。int* p;表示p是一个指向int类型的指针。使用时,可以通过解引用操作符访问指针所指向的值,如*p。引用引用是另一个变量的别名,必须在定义时初始化,之后无法改变。int& r = a;表示r是a的引用。使用时,引用像普通变量一样使用,不需要解引用操作符。指针和引用各有优缺点,选择使用哪一个取决于具体的编程需求。指针提供了灵活性,但使用不当可能导致复杂性和安全性问题;而引用则更易于使用和维护,特别是在函数参数传递时。
2024-11-04 10:14:45
343
原创 TCP建立连接之后怎么保持长连接(检测连接断没断)
保持TCP长连接的关键在于及时检测连接的有效性和合理的资源管理。通过结合TCP的Keep-Alive机制与应用层的心跳检测,可以有效确保连接的稳定性与可靠性。
2024-11-03 19:12:11
798
原创 TCP协议时如何保证数据传输的可靠性的
通过以上这些机制,TCP确保了数据在不可靠的网络环境中仍能实现可靠传输,是许多应用(如HTTP、FTP等)在互联网上数据传输的首选协议。这种机制确保了即使在网络拥堵或丢包的情况下,数据仍能可靠送达。:TCP还实现了拥塞控制算法(如慢启动、拥塞避免等),通过动态调整发送速率来适应网络状况,避免因网络拥堵导致的数据丢失。:TCP是支持全双工通信的,即允许数据在两个方向上同时传输,这样可以提高通信的效率和可靠性。:TCP将数据分割成小的段进行传输,每个段都有一个序列号,以确保接收方能够按顺序重组数据。
2024-11-02 20:02:31
263
原创 网络编程笔记----OSI七层模型及其作用
OSI七层模型是计算机网络领域的一个标准模型,用于理解网络通信的过程。它将网络功能分为七个不同的层次,每一层都有其特定的功能和作用。每一层都依赖于其下层,同时为其上层提供服务,形成一个相互独立又紧密联系的网络通信体系。这个模型帮助我们理解和设计复杂的网络架构。
2024-11-02 08:31:26
229
原创 进程的虚拟内存空间机制
虚拟内存空间机制是操作系统中一个核心特性,通过提供每个进程独立的地址空间和灵活的内存管理,增强了系统的安全性和资源利用率。这种机制的实现依赖于页面、页表及相关的管理策略,为程序的运行提供了重要保障。
2024-11-01 21:04:38
385
原创 多线程和线程池的区别
多线程是一种并发执行的技术,它允许在同一进程中同时执行多个线程。每个线程可以执行程序中的一部分代码,从而提高程序的执行效率。资源共享:同一进程中的多个线程共享进程的内存空间和资源,这使得线程之间的通信非常高效。并发性:多个线程可以同时进行,操作系统能够在多个线程之间快速切换,给用户提供并行处理的感觉。轻量级:相对于进程,线程是轻量级的,因为线程的创建和销毁比进程更快,并且线程之间的上下文切换成本较低。应用场景。
2024-10-31 17:30:06
920
原创 关于线程的互斥锁介绍
互斥锁(Mutex,Mutual Exclusion)是线程同步机制中常用的一种工具,用于控制对共享资源的访问,确保同一时刻只有一个线程可以访问该资源,从而避免数据竞争和不一致性。
2024-10-31 11:22:08
284
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人