- 博客(47)
- 收藏
- 关注
原创 C 语言内存分配详解
C 语言内存分配是 C 语言编程的核心内容之一,深入理解内存结构、掌握不同的内存分配方式以及妥善处理内存管理过程中出现的问题,对于编写高效、稳定的 C 语言程序至关重要。静态内存分配简单高效,由系统自动管理;动态内存分配则提供了更大的灵活性,但需要程序员手动控制内存的分配和释放,并且要注意避免内存泄漏、悬空指针、内存越界等常见问题。通过遵循内存分配与释放的最佳实践,合理使用内存管理工具,我们能够更好地管理 C 语言程序中的内存资源,提高程序的质量和性能。
2025-04-30 10:47:36
1242
原创 C 语言链表详解
链表是一种线性数据结构,与数组不同,它在内存中不是连续存储的。链表由一系列节点组成,每个节点包含数据和指向下一个节点的指针。这种链式存储方式使得链表在插入和删除操作上具有高效性,并且可以动态地分配内存,无需像数组那样预先确定大小。
2025-04-30 10:42:02
1365
原创 C 语言 static 与 extern 详解
在 C 语言中,static 和 extern 是两个非常重要的关键字,它们在变量和函数的声明与定义中起着关键作用。static 主要用于控制变量和函数的存储方式和作用域,而 extern 则用于声明外部变量和函数,使得它们可以在不同的文件中被访问。深入理解这两个关键字的用法和特性,对于编写高质量、可维护的 C 语言程序至关重要。
2025-04-29 08:50:04
965
原创 C语言指针数组与数组指针详解
指针数组和数组指针是 C 语言中非常重要的概念,它们在内存管理、数据结构和函数调用等方面都有着广泛的应用。理解它们的定义、内存布局、初始化、访问方式以及应用场景,对于编写高效、灵活的 C 语言程序至关重要。同时,在使用过程中要注意避免常见的错误,如越界访问、野指针和内存泄漏等问题,以确保程序的稳定性和可靠性。通过不断地实践和深入理解,能够更好地掌握和运用指针数组和数组指针,提升 C 语言编程的能力和水平。
2025-04-29 08:43:00
688
原创 C 语言函数指针与指针函数详解
在 C 语言的编程世界中,函数指针和指针函数是两个既强大又容易混淆的概念。它们为 C 语言带来了更高的灵活性和可扩展性,广泛应用于回调函数、动态链接库、状态机等多种场景。深入理解和掌握函数指针与指针函数,对于提升 C 语言编程能力至关重要。本文将详细介绍函数指针和指针函数的概念、语法、使用方法以及实际应用案例。
2025-04-28 20:18:53
976
原创 STM32 HAL库实现USB虚拟串口
在嵌入式系统开发中,USB 虚拟串口是一种非常实用的功能。它允许 STM32 微控制器通过 USB 接口与计算机进行通信,就像使用传统的串口一样。这种方式不仅简化了硬件设计,还提高了通信的灵活性和稳定性。STM32F407 系列微控制器具有强大的处理能力和丰富的外设资源,配合 HAL 库可以方便地实现 USB 虚拟串口功能。
2025-04-28 20:04:12
3125
原创 C语言全局变量与局部变量详解
在C语言中,变量根据其作用域和生命周期可以分为全局变量和局部变量。理解这两种变量的区别对于编写结构良好、可维护的代码至关重要。
2025-04-27 08:47:54
568
原创 C语言函数详解
函数是C语言程序的基本构建块,它是一个独立的代码单元,用于完成特定的任务。在C语言中,函数可以接收输入参数,执行一系列操作,并可能返回一个结果。
2025-04-27 08:41:58
1073
原创 C 语言联合体、枚举、typedef 详解
联合体、枚举和 typedef 是 C 语言中非常有用的特性,合理使用它们可以提高代码的可读性、可维护性和内存使用效率。在实际编程中,要根据具体的需求选择合适的特性来解决问题。
2025-04-26 10:36:55
802
原创 C 语言结构体详解
先定义结构体类型,再定义结构体变量。int id;在定义结构体类型的同时定义结构体变量。int id;定义匿名结构体类型的同时定义结构这种方式定义的结构体没有名字,只能在定义时一次性声明结构体变量,之后无法再用该结构体类型定义新的变量。
2025-04-26 10:28:54
1011
原创 C 语言指针详解
在计算机系统中,每个变量在内存中都占据一定的存储空间,而这个存储空间都有一个唯一的地址。指针就是一个变量,它存储的不是普通的数据,而是内存地址。通过指针,我们可以间接访问和操作该地址所指向的内存空间中的数据。例如,在一个 32 位操作系统中,每个字节都有一个从 0 到 2³² - 1 的地址编号。当程序执行到这行代码时,系统会在内存中为num分配 4 个字节(因为int类型在常见系统中占 4 字节)的存储空间,并将值10存储进去。同时,这个存储空间有一个对应的地址,而指针变量就是用来存储这个地址的。
2025-04-25 08:49:43
1398
原创 C 语言数组详解
在 C 语言中,数组是一种,这些元素在内存中连续存储。通过数组,我们可以用一个统一的名字来管理一组相关的数据,并且通过下标(索引)快速访问其中的每一个元素。例如,在统计一个班级 50 名学生的数学成绩时,使用数组可以将这 50 个成绩存储在一起,方便进行成绩的统计、排序等操作。
2025-04-25 08:43:27
1189
原创 C语言循环结构详解
循环结构是 C 语言中重要的程序控制结构之一,它允许程序重复执行一段代码,直到满足特定的条件为止。通过循环结构,可以有效地处理需要重复执行的任务,提高代码的效率和可读性。while循环、do - while循环和for循环。每种循环都有其特点和适用场景,下面将分别进行详细介绍。while。
2025-04-24 08:46:04
920
原创 C语言分支结构详解
C 语言的分支结构为程序提供了强大的决策能力,通过if语句、switch语句和条件运算符,能够根据不同的条件执行不同的代码路径,实现各种复杂的逻辑功能。在实际编程中,需要根据具体的问题需求选择合适的分支结构,并注意正确使用条件表达式和控制语句的执行流程,以确保程序的正确性和可靠性。同时,合理运用分支结构的嵌套和组合,可以构建出功能丰富、灵活多变的程序。掌握分支结构是 C 语言编程的重要基础,对于开发各种类型的应用程序都具有至关重要的作用。
2025-04-24 08:42:13
891
原创 C语言数据类型介绍
C 语言的基本数据类型是构建复杂数据结构的基石,包括整型、浮点型、字符型和枚举类型,每种类型都有其独特的表示方式和适用场景。
2025-04-23 10:03:20
1073
原创 C 语言程序结构例举
C 语言程序结构涵盖了从基本组成、数据类型、语句结构到函数机制、内存管理以及编译链接等多个方面。理解这些要素是编写高质量 C 语言程序的关键。通过合理运用数据类型、灵活使用控制语句和函数、正确进行内存管理,开发者能够编写出高效、可靠、可维护的 C 语言程序。随着对 C 语言程序结构的深入掌握,进一步学习 C 语言在不同领域的应用(如操作系统开发、嵌入式编程等)也将变得更加容易。未来,尽管新的编程语言不断涌现,C 语言凭借其独特的优势,仍将在系统级编程和性能关键型应用中发挥重要作用。
2025-04-22 09:55:58
1021
原创 C语言入门第一课
编程语言是一种让人类能够与计算机进行沟通和交互的工具。计算机本身只能理解由 0 和 1 组成的机器语言,而编程语言的出现,就是为了让人类能够使用更直观、更易于理解和编写的方式,向计算机下达指令,从而让计算机完成各种复杂的任务。它就像是人类与计算机之间的 “翻译官”,将人类的意图转化为计算机能够执行的操作。根据不同的编程范式和应用场景,编程语言可以分为多种类型,如汇编语言、高级语言,高级语言又包含了面向过程语言、面向对象语言等。
2025-04-22 09:43:32
669
原创 STM32 HAL库 FreeRTOS 临界区保护的作用以及使用
STM32F407 是意法半导体(ST)推出的一款基于 ARM Cortex - M4 内核的 32 位微控制器。它具有高达 168MHz 的主频,拥有丰富的外设资源,如 GPIO、SPI、I2C、USART 等,适用于工业控制、消费电子、通信等多个领域。STM32F407 还具备浮点运算单元(FPU),能够高效地处理浮点运算,为一些对计算能力要求较高的应用提供了支持。临界区是指程序中访问共享资源的代码段。共享资源可以是全局变量、硬件寄存器、文件等。
2025-04-21 08:45:21
1105
原创 STM32 HAL库 FreeRTOS 软件定时器的使用
STM32 HAL(Hardware Abstraction Layer)库是 ST 公司为 STM32 微控制器提供的一套硬件抽象层库。它的主要目的是简化开发者对 STM32 硬件的操作,通过提供统一的 API 接口,使得开发者可以在不同型号的 STM32 微控制器上快速移植代码。HAL 库封装了底层的寄存器操作,提供了高级的函数调用,如 GPIO 操作、定时器配置、串口通信等,大大提高了开发效率。软件定时器是 FreeRTOS 提供的一种机制,它允许开发者在不使用硬件定时器的情况下实现定时功能。
2025-04-21 08:41:07
1466
原创 STM32 HAL库FreeRTOS 中断管理
中断是指 CPU 在执行程序的过程中,遇到外部或内部的紧急事件需要处理时,暂时停止当前程序的执行,转去执行相应的中断服务程序,处理完中断事件后,再返回原来被中断的程序继续执行。中断机制使得系统能够及时响应外部事件,提高了系统的实时性和处理能力。本文详细介绍了基于 STM32 HAL 库与 FreeRTOS 的中断管理。首先介绍了中断的基本概念、STM32 的中断机制和 FreeRTOS 对中断的处理方式。
2025-04-20 13:26:05
1503
原创 STM32 HAL库Freertos 信号量的使用
信号量(Semaphore)是一种用于控制多个任务对共享资源访问的机制,本质上是一个拥有固定数量资源的计数器。当任务需要访问共享资源时,需要获取信号量,如果信号量计数器大于 0,任务获取成功,计数器减 1;若计数器为 0,任务将被阻塞,直到其他任务释放信号量使计数器增加。资源管理:控制对共享资源(如外设、缓冲区)的访问,避免多个任务同时操作导致冲突。任务同步:实现任务之间的同步,确保任务按照特定顺序执行。事件标志:用于标识特定事件的发生,通知其他任务进行处理。
2025-04-20 13:23:27
1666
原创 STM32 HAL库 Freertos队列使用解析
在基于 STM32F407 HAL 库和 FreeRTOS 的开发中,队列是一种重要的任务间通信机制,它允许任务之间安全地传递数据。下面将详细解析如何使用 FreeRTOS 的队列。
2025-04-18 08:51:03
817
原创 STM32 HAL库 Freertos创建多任务
本文将详细介绍如何基于 STM32F407 HAL 库和 FreeRTOS 创建多任务。通过以上的配置和机制,FreeRTOS 能够有效地管理多个任务的执行,保证系统的实时性和稳定性。
2025-04-18 08:46:39
1451
原创 STM32 HAL库 内部传感器驱动实现
STM32F407 微控制器集成了多个内部传感器,其中比较常用的是温度传感器和内部参考电压传感器。这些传感器可以为系统提供重要的环境信息,例如温度传感器可以用于监测芯片的工作温度,避免芯片因过热而损坏;内部参考电压传感器可以用于校准 ADC 测量结果,提高测量精度。通过以上步骤,你可以实现 STM32F407 内部温度传感器和内部参考电压传感器的驱动。这些传感器可以为系统提供重要的环境信息,提高系统的稳定性和可靠性。在实际应用中,你可以根据具体需求对代码进行修改和优化。
2025-04-17 08:39:58
1596
原创 STM32 HAL库 低功耗的实现
STM32F407 提供了多种低功耗模式,以满足不同应用场景下的功耗需求。主要的低功耗模式包括睡眠模式、停止模式和待机模式,每种模式在功耗和唤醒时间上有不同的特点。HAL 库是 ST 为 STM32 系列微控制器提供的硬件抽象层库,它封装了底层的硬件操作,提供了统一的 API 接口,使得开发者可以更方便地进行开发。兼容性强:支持多种 STM32 系列微控制器。易于使用:提供了丰富的 API 函数,减少了开发者的工作量。可维护性好:采用模块化设计,便于代码的维护和扩展。
2025-04-17 08:32:32
1664
原创 STM32 HAL库内部 Flash 读写实现
Flash 存储器是一种非易失性存储器,它可以在掉电的情况下保持数据。STM32F407 系列微控制器内部集成了一定容量的 Flash 存储器,用于存储程序代码和数据。Flash 存储器具有擦除和编程次数的限制,通常在几万到几十万次不等,因此在使用时需要合理规划擦写操作,以延长其使用寿命。HAL(Hardware Abstraction Layer)库是 ST 公司为 STM32 微控制器提供的一种硬件抽象层库,它封装了底层的硬件操作,提供了一套统一的 API 接口,使得开发者可以更方便地进行硬件开发。
2025-04-16 08:41:41
1672
原创 STM32 HAL库 DS18B20驱动实现
DS18B20 是由 Dallas Semiconductor 公司生产的单总线数字温度传感器。单总线接口:仅需一个引脚即可与微控制器进行通信,减少了硬件连接的复杂度。数字输出:直接输出数字温度值,无需额外的模数转换电路。精度高:可编程分辨率为 9 - 12 位,对应的温度精度分别为 0.5°C、0.25°C、0.125°C 和 0.0625°C。宽温度范围:测量范围为 -55°C 到 +125°C。通过以上代码,你可以实现基于 STM32F407 HAL 库的 DS18B20 驱动。
2025-04-16 08:35:38
2650
1
原创 STM32 HAL库 实现485通信
本文详细介绍了基于 STM32F407 HAL 库实现 RS - 485 通信的全过程,包括硬件设计、软件编程和测试验证等方面。通过以上步骤,你可以成功实现 STM32F407 与 RS - 485 总线之间的通信。在实际应用中,还可以根据具体需求对代码进行优化和扩展,如添加错误处理、实现多机通信等。
2025-04-15 09:04:36
2304
原创 STM32 HAL库 DAC生成正弦波
STM32F407 是基于 ARM Cortex - M4 内核的 32 位微控制器,具有高性能、低功耗等特点。它集成了丰富的外设,如定时器、串口、SPI、I2C、DAC 等,适用于各种工业控制、消费电子等领域。
2025-04-15 08:50:58
1893
原创 STM32 HAL库 ADC+TIM+DMA 3路 1S采样一次电压
通过结合 STM32F407 的 ADC、TIM 和 DMA 外设,我们可以高效、稳定地实现 3 路模拟信号的周期性采样。定时器用于控制采样频率,DMA 用于数据传输,提高了系统的效率。在实际应用中,可以根据需要对采样频率、通道数量等参数进行调整。
2025-04-14 13:40:34
1565
原创 STM32 HAL库 L298N电机驱动模块实现
L298N 是一种双 H 桥电机驱动芯片,H 桥电路是一种常用于控制直流电机正反转和调速的电路结构。通过控制 H 桥电路中各个开关管的导通和截止状态,可以改变电机两端的电压极性,从而实现电机的正反转。同时,通过调节输入信号的占空比,可以实现对电机转速的控制。通过使用 STM32F407 的 HAL 库,我们可以方便地实现对 L298N 电机驱动模块的控制。
2025-04-14 08:33:59
3006
原创 STM32 HAL库 OLED驱动实现
OLED(Organic Light - Emitting Diode)即有机发光二极管,与传统的 LCD 显示屏相比,OLED 具有自发光、视角广、响应速度快、对比度高、功耗低等优点。在嵌入式系统中,OLED 显示屏常被用于显示系统状态信息、图形界面等。通过本文的介绍,你可以基于 STM32F407 HAL 库实现 OLED 显示屏的 8080 接口和 IIC 接口驱动。8080 接口适合对通信速度要求较高的场景,而 IIC 接口则更适合引脚资源有限的情况。
2025-04-13 10:54:24
3547
原创 STM32 HAL库 HC - SR04 超声波测距模块驱动实现
HC - SR04 超声波测距模块的工作原理基于超声波在空气中的传播速度是已知的(在常温下约为 340m/s),通过测量超声波从发射到接收的时间差,就可以计算出模块与目标物体之间的距离。微控制器向 HC - SR04 的 Trig 引脚发送一个至少 10μs 的高电平脉冲,触发模块发射超声波。HC - SR04 接收到触发信号后,会自动发射 8 个 40kHz 的超声波脉冲,并将 Echo 引脚置为高电平,开始计时。
2025-04-13 10:30:09
2201
原创 STM32 HAL库 HC-05蓝牙通信实现
串口透传:HC - 05 支持串口通信,用户可以通过串口将数据发送到蓝牙模块,模块会自动将数据无线传输到配对的蓝牙设备上,反之亦然。主从模式:模块支持主模式和从模式。主模式下,模块可以主动搜索并连接其他蓝牙设备;从模式下,模块等待其他蓝牙设备的连接请求。工作频段:工作在 2.4GHz 的 ISM 频段,符合蓝牙 V2.0 规范。高性能:采用 ARM Cortex - M4 内核,最高主频可达 168MHz,具有丰富的外设资源。低功耗:支持多种低功耗模式,适用于对功耗要求较高的应用场景。丰富的外设。
2025-04-13 10:25:51
2135
2
原创 STM32 HAL实现DHT11采集温湿度
测量范围:温度范围为 0 - 50℃,湿度范围为 20 - 90% RH。精度:温度精度为 ±2℃,湿度精度为 ±5% RH。分辨率:温度和湿度的分辨率均为 1℃和 1% RH。接口:单总线数字接口,通信简单。通过以上步骤,我们可以基于 STM32F407 HAL 库实现 DHT11 温度数据的采集。理解 DHT11 的通信时序是实现数据采集的关键,通过精确的延时和引脚操作,可以确保数据的准确读取。同时,在实际应用中需要注意电源稳定性、通信速率和抗干扰等问题,以提高系统的可靠性。
2025-04-12 12:29:57
2830
4
原创 STM32 HAL库SPI读写W25Q128(软件模拟+硬件spi)
本文详细介绍了基于 STM32F407 HAL 库实现软件模拟 SPI 和硬件 SPI 读写 W25Q128 的方法。软件模拟 SPI 具有灵活性高、无需特定硬件支持的优点,但通信速度相对较慢;硬件 SPI 则具有通信速度快、稳定性高的特点,但需要使用特定的硬件资源。在实际应用中,可根据具体需求选择合适的 SPI 通信方式。
2025-04-12 12:15:22
3066
5
原创 STM32 HAL库RTC实时时钟超细详解
本文详细介绍了基于 STM32F407 HAL 库的 RTC 实时时钟的开发过程,包括硬件特性、开发环境搭建、基于 HAL 库的编程、校准、低功耗模式以及常见问题与解决方案等方面的内容。通过本文的学习,读者可以全面掌握 STM32F407 RTC 的开发方法,为开发具有实时时钟功能的嵌入式系统打下坚实的基础。在实际应用中,开发者可以根据具体需求对 RTC 进行灵活配置和使用,以满足不同的应用场景。
2025-04-11 16:57:12
2710
原创 STM32 HAL库 高级定时器输出pwm
STM32F407 有两个高级定时器 TIM1 和 TIM8。每个高级定时器包含一个 16 位自动重载计数器(CNT),该计数器可向上、向下或向上 / 向下计数,具体计数模式由控制寄存器配置。定时器的时钟源可以是内部时钟(CK_INT)、外部时钟模式 1(ETR 引脚)、外部时钟模式 2(TIx 引脚)或者内部触发输入(ITRx)。此外,还包括多个捕获 / 比较通道,可用于产生 PWM 输出、输入捕获、输出比较等功能。通过本指南,我们详细介绍了 STM32F407 高级定时器的使用开发过程。
2025-04-11 08:41:16
2301
1
原创 STM32 HAL 库开发之通用定时器中断
16 位或 32 位向上、向下、向上 / 向下自动重载计数器。16 位可编程预分频器,用于对计数器时钟频率进行分频。4 个独立的通道,可用于输入捕获、输出比较、PWM 生成和单脉冲模式输出。可使用外部信号(ETR)控制定时器。支持定时器级联功能,可实现更长的定时时间。支持触发输入,可用于启动定时器、复位定时器等。本文详细介绍了如何使用 STM32F407 的 HAL 库来配置和使用通用定时器中断。
2025-04-10 17:40:54
1762
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅