自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STM32的蓝牙通讯(HAL库)

本文介绍了蓝牙技术的基础知识和发展历程。蓝牙是一种利用2.4GHz ISM频段的短距离无线通信技术,已发展到第六代,从最初的高速传输转向低功耗应用,并支持物联网定位功能。蓝牙分为经典蓝牙(BR)和低功耗蓝牙(BLE)两种独立技术类型。常见的蓝牙架构包括单芯片方案、SOC+MCU方案等。蓝牙协议栈分为核心协议和应用层协议,是实现BLE应用的关键。ESP32-C3支持蓝牙5(LE)功能,BLE设备在协议栈不同层级有不同角色划分,包括广播者/观察者、服务器/客户端等。蓝牙地址分为全球唯一的公共地址和具有隐私保护功

2025-07-27 10:56:12 933

原创 STM32的WI-FI通讯(HAL库)

本文摘要: Wi-Fi技术解析与STM32无线通信实现 Wi-Fi技术基础 Wi-Fi基于IEEE 802.11标准,最新Wi-Fi 6支持9.6Gbps速率 采用2.4GHz/5GHz双频段,5GHz频段提供更高速率和24个独立信道 通过载波调制技术实现数据传输,采用调幅(AM)和调频(FM)方式 ESP32-C3无线模块 RISC-V架构处理器,支持Wi-Fi和蓝牙5.0双模 提供AT指令集控制接口,支持STA/AP/混合工作模式 内置400KB SRAM,支持SPI等多种外设接口 STM32无线通信实

2025-07-25 17:53:16 1115

原创 FreeRTOS中断管理STM32

本文摘要: STM32通过NVIC配置16级中断优先级,分为抢占和响应优先级。FreeRTOS将PendSV和SysTick设为最低优先级(15),保证任务切换不阻断其他中断。系统利用BASEPRI寄存器管理中断,可屏蔽5-15优先级中断,允许调用xxxFromISR函数。FreeRTOS提供临界区保护机制,通过taskENTER/EXIT_CRITICAL()控制中断屏蔽,使用uxCriticalNesting变量确保临界区嵌套安全。调度器挂起/恢复功能可在不关闭中断的情况下确保任务间临界区安全,适用于任

2025-07-16 16:46:02 960

原创 物联网CAN通讯(控制器局域网络)(寄存器版+HAL库版)

CAN通信技术概述 CAN(Controller Area Network)是一种广泛应用于工业控制领域的串行通信协议。其架构采用总线式拓扑,所有设备连接在同一根总线上,通过广播方式发送信息,最大传输距离达40米(1Mbps)或1公里(125Kbps)。CAN协议采用差分信号传输(CAN_High和CAN_Low),有效抵抗电磁干扰。 关键特点: 无主机架构,支持多主通信 使用11位或29位标识符实现内容寻址 具有硬件自动完成的错误检测和恢复机制 支持最高1Mbps的通信速率 CAN帧分为数据帧、远程帧、错

2025-07-16 13:46:53 1010

原创 FSMC控制LCD(TFTLCD:Z350IT002)显示案例

摘要:本文详细介绍了基于STM32的液晶屏驱动实现方法。系统采用FSMC接口连接16位数据总线的ILI9486控制器,通过地址线A10作为数据/命令选择信号。文章解析了硬件连接方案,包括数据总线、控制引脚和背光电路的配置。重点阐述了FSMC初始化流程,包括GPIO模式设置、存储块配置和时序参数调整。软件层面实现了基本LCD操作函数,包括命令/数据写入、区域设置和清屏功能。此外,还详细说明了字符和汉字显示原理,通过点阵数据转换实现不同字体大小的文本输出。系统将液晶屏显存映射到STM32的SRAM地址空间,利用

2025-06-24 22:46:16 1038

原创 32单片机的FSMC控制器,内存扩展

FSMC(灵活的静态存储器控制器)是用于管理外部静态存储器(SRAM、NOR Flash等)的接口模块,通过AHB总线实现高速数据传输。它支持多种存储器类型和工作模式,包括NOR/PSRAM控制器、NAND闪存控制器等,并可根据时序要求配置不同模式。FSMC将外部存储器划分为4个存储块,每个块有固定地址范围。实际应用中,通过配置相关寄存器(如使能存储块、设置数据总线宽度等)和引脚初始化实现与外部存储器的通信。案例展示了如何通过FSMC扩展外部SRAM(IS62WV51216),包括硬件连接、时序配置和寄存器

2025-06-16 10:18:06 1219

原创 STM32的DMA(直接存储器访问)模块(寄存器和HAL库两种代码实现方式)

DMA(直接存储器存取)技术旨在解放CPU,允许外设与内存之间直接进行高速数据传输,无需CPU干预。传统中断机制下,CPU需响应中断并处理数据传输,而DMA仅需初始化设置,数据即可直接传输,完成后通知CPU。DMA控制器与Cortex™-M3核心共享系统总线,优先占用总线以避免数据丢失,并通过仲裁器确保CPU获得至少一半的带宽。STM32内部有2个DMA控制器,共12个通道,不同通道对应不同外设请求。DMA传输方向、数据宽度、地址自增等参数可通过寄存器配置,支持循环模式以实现连续数据传输。DMA显著提升了系

2025-06-09 18:18:38 824

原创 STM32的SPI通信模块(寄存器和HAL库两种代码实现方式)

例如:来一个时钟上升沿信号,主机和从机分别把自己高位的值左移出来,来一个时钟下降沿信号,主机和从机分别读取数据,存储到移位寄存器的低位中,移位寄存器临时存储要交换的数据,经过8次同样的操作,就完成了一个字节的交换,接收缓存器存储最终得到的值。虽然STM32的NSS引脚是它内部SPI设备的硬件引脚,但后面的程序只是把它当做一个普通的GPIO来控制,用软件方式来控制NSS信号,所以在SPI硬件设计中,NSS可以随便选一个普通的GPIO,不用纠结于选硬件NSS信号。32单片机作为主设备时,SPI的片选要拉高。

2025-06-07 18:38:02 1048

原创 STM32的ADC模块(寄存器和HAL库两种代码实现方式)

模拟数字转换器(ADC)是将模拟信号转换为数字信号的关键组件,广泛应用于传感器数据处理。ADC的工作原理包括采样和量化两个阶段:采样阶段通过高频率采集模拟信号,量化阶段则将采样信号转换为二进制代码。ADC的主要参数包括参考电压、通道数、采样率、分辨率和转换时间,这些参数决定了ADC的性能和应用范围。在STM32F103系列单片机中,ADC模块支持多种转换模式,如单次、连续、扫描或间断模式,并具有模拟看门狗功能以保护设备。ADC的输入时钟频率不得超过14MHz,且通过PCLK2分频产生。在实际应用中,ADC的

2025-05-19 11:06:18 1314

原创 移植到STM32中FreeRTOS的业务创建与删除,挂起与恢复

FreeRTOS提供了多种任务管理API函数,包括动态和静态创建任务、删除任务、挂起和恢复任务等。动态创建任务使用xTaskCreate(),由系统自动管理内存;静态创建任务使用xTaskCreateStatic(),需手动分配内存,适用于需要精细控制的场景。任务删除使用vTaskDelete(),挂起和恢复任务分别使用vTaskSuspend()和vTaskResume()。启动调度器使用vTaskStartScheduler(),只需调用一次即可。任务创建后立即进入就绪态,由调度器调度运行。动态创建任务

2025-05-13 21:48:55 867

原创 STM32的通用定时器的触发输出和从模式测量输入信号的占空比(寄存器和HAL库两种代码实现方式)

通用定时器的触发信号分为触发输入信号(TRGI)和触发输出信号(TRGO)。TRGI用于控制定时器的操作,如复位、使能和计数,而TRGO用于与其他定时器或外设的级联操作。在输入捕获模式下,TRGI仅作为触发源,定时器的时钟源由APB总线决定。通过配置从模式和输入捕获通道,可以实现对输入信号周期、频率和占空比的测量。例如,使用TI1信号经过滤波器和边沿检测器后,映射到IC2通道,通过捕获高电平和低电平的时间差计算占空比。具体实现可通过寄存器或HAL库代码完成,配置定时器的时钟源、从模式、输入捕获通道及相关寄存

2025-05-12 00:30:00 1517

原创 用通用定时器的输入捕获功能测量输入信号周期和频率(寄存器和HAL两种代码实现方式)

信号经过通道1的引脚进入通道1,得到TI1,TI1信号进入滤波器(过滤毛刺信号)和边沿检测器(确定捕获是上升沿还是下降沿【CCER->CCxP寄存器配置】)得到的信号可以选给T1FP1或T1FP2通道给到IC2做交叉映射,这个TRC我们先不管。输入信号周期大于定时器溢出时间,我们处理方案:当第一个上升沿到来时,重置计数器的值(让计数器从0开始计数),到第二个上升沿到来时,记录溢出次数+最后计数器值。当第一个上升沿到来时,重置计数器的值(让计数器从0开始计数),到第二个上升沿到来时,计数器的值会。

2025-05-09 21:36:04 1314

原创 STM32的通用定时器(用HAL库和寄存器两种代码实现方式)

需要考虑看图找寄存器,然后按需配置:因为博主的板子是STM32F103ZETx型号的所以这里我以输出比较2(复用引脚是PA1)为例子再次注意TIMx_CH1~TIMx_CH4即可做输入也可以做输出,因此配置时将其配成复用输出模式,配成该模式时也可以是可以接收外部输入信息的TIMx_CR1:配置计数器计数方向TIMx_CCMR1配置输出通道:配置输出比较模式:110TIMS->CCR2:比较基准值(表示占空比,为了实现呼吸灯的效果,要不断改变该值)TIMx_CCER:使能。

2025-05-08 19:35:57 2629

原创 运算放大电路

双输入单输出的结构3号端:同相输入端2号端:反向输入端1号端:输出端一般市面上的运算放大器的放大倍速:左右,这个具体要看你用的器件手册。

2025-05-08 11:08:41 427

原创 将FreeRTOS移植到keil5工程文件中的保姆级教程

初学者一般都是用的ARM_CM3系列的,那我就以这个为例子,直接复制ARM_CM3文件夹到刚刚你放source文件夹的大文件夹里(你也可以点看看看,其实就两个文件)复制 将它放到和刚刚你放source文件夹的大文件夹里,博主这里创建了一个portable_core文件存,是不是看到一个heap_4文件(跟内存相关的),别慌,下面我带你去找。目前关于Freertos和stm32的相关文件都存在我们创建的FreeRTOS文件夹中了然后将这个大文件夹复制一份粘贴到你想要移植的 KEIL5工程文件夹里,

2025-05-05 16:16:49 991

原创 HAL库内部时钟源和FreeRTOS时钟源的关系和注意点

在NVIC中进行使能和调优先级,注意我TIM6是外设中断优先级不能比TIM3(被配成时钟源了)高,所以这里我们也要调整下,这个System tick timer我们就不用管了,因为移植FreeRTOS到工程中后,FFreeRTOS就会将他自动配成15。这里我多添加了一个I2C外设,我的业务要求I2C的中断优先级高于定时器TIM6所以I2C中断优先级的数值设置就小于TIM6,以此类推,这个读者按自己的业务要求改就好。注意这里提醒我说其他外设的优先级只能在5~15之间配,所以要改。

2025-05-04 16:12:57 487

原创 STM32的2个基本定时器(TIM6,7)(HAL库和寄存器两种代码实现方式)

定时器是STM32中一个非常强大的外设,功能强大,用途很广。STM32F103系列提供了8个定时器:2个基本定时器(TIM6,7),4个通用定时器(TIM2-5),2个高级定时器(TIM1和TIM8)。本章节介绍2个基本定时器(TIM6,TIM7)的用法。

2025-05-03 18:23:16 1091

原创 STM32的系统滴答定时器(寄存器和HAL库两种实现方法)

其中我们可以再在hal.c文件中找到uwTick的底层逻辑就是中断溢出的次数(每1ms中断溢出一次),所以我们不需要寄存器例子里的count来帮助累计了。点开NVIC可以看到系统滴答定时器默认就是开启的,注意优先级是数值越小优先级越高,目前我们不用更改优先级,如果你还有其他中断需求就要考虑优先级的问题了。重写中断服务程序的代码:注意既可以在stm32f1xx_it.c文件中添加补充,也可以在main.c中重写。以重写中断回调函数的方式,该函数是弱函数,只能重写,这里我选择在main.c文件中重写。

2025-05-02 23:49:06 593

原创 STM32的串口I2C通信(详细介绍软件模拟+硬件实现:HAL库和寄存器三种方式)

M24C02这个EEPROM芯片啊,虽然只有8个脚,但挺能装的,有256个字节的存储空间,也就是2048个位。它的存储结构挺有意思的,像个小本子,每页有16个字节,总共16页。要找数据的时候,用8位地址就行,前4位是页码,后4位是页里的具体位置。写入数据的时候,不管是单个字节还是整页写,都得等5毫秒,就像等红灯一样,得让芯片把数据存稳了才能进行下一步。这种设计啊,虽然写入速度不算快,但挺适合那些不需要频繁改数据的应用场景。

2025-05-01 16:00:52 2478

原创 STM32的串口USART的轮询和中断方式(详细介绍寄存器和HAL库两种实现方式)

轮询式IO操作:使用HAL_UART_Transmit() 以阻塞方式发送一些数据;使用HAL_UART_Receive() 以阻塞方式接收一些数据;中断式IO操作:中断IO操作(非阻塞,CPU利用率低):可以用中断方式实时接收数据,数据接收完毕才会触发中断服务函数,在这段时间cpu可以处理其他事情使用HAL_UART_Transmit_IT() 以非阻塞方式发送一些数据;在数据传输完毕后,HAL_UART_TxCpltCallback函数被执行;

2025-04-15 22:12:24 2305 2

原创 STM32单片机串口的基本知识

串口通信基本知识(对于整体来说):并行通信占用引脚多,线越长受外部影响大,但是通信速度快;串行通信占用引脚少,相对来说通信速度慢,但能减少硬件资源(注意对于单个引脚来说都是串行通信)半双工:两个客户端都可以进行发送和接收但是占用的是同一个通道,所以A发送给B时,B就不能发送给A了。全双工:两个客户端都可以进行发送和接收,发送和接收互不干扰,如同电话通话,双方可自由插话,无需等待。单工:两个客户端的数据只能单向的传输,如同广播/电视信号,电台→听众,听众无法回传信息。

2025-04-14 19:58:24 173

空空如也

空空如也

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

TA关注的人

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