- 博客(48)
- 收藏
- 关注

原创 江科大STM32学习笔记(下)
深入探索STM32微控制器:涵盖串行通信(USART)、I2C通信协议、SPI通信协议、BKP备份寄存器和RTC实时时钟等多个关键组件。掌握STM32的核心功能,助力嵌入式系统开发之旅
2023-12-01 15:49:22
20022
61

原创 江科大STM32学习笔记(上)
深入探索STM32微控制器:从基础到实践,涵盖STM32-GPIO输出、STM32与OLED显示屏调试、EXTI外部中断、TIM定时器、ADC数模转换器等多个关键组件。掌握STM32的核心功能,助力您的嵌入式系统开发之旅。
2023-09-20 10:39:54
71902
96
原创 【BUG】记STM32F030多通道ADC DMA读取乱序问题
编码规范的重要性:结构体声明的位置不仅是语法问题,更影响代码可移植性。硬件机制的深度理解:结合芯片手册分析异常(如STM32F0校准值特性),能快速定位隐蔽问题。
2025-06-09 14:34:59
612
原创 【BUG】为什么同样的初始化代码STM32F1正常而F0报错?
在STM32开发中,无论是STM32F1还是STM32F0工程,C语言标准(C Standard)的选择通常是由开发环境和编译器的默认设置决定的,但开发人员可以根据实际需求进行调整。以下是具体的分析:STM32F1工程默认模式C99或禁用严格C89检查:在大多数开发环境中(如STM32CubeIDE或Keil MDK-ARM),默认会启用C99标准,或者允许使用C99的特性而不强制严格C89检查。这是因为STM32F1具有较高的性能和丰富的外设资源,能够支持更复杂的代码结构和功能。是否可以自由选择。
2025-06-09 14:29:42
780
原创 【BUG】滴答定时器的时间片轮询与延时冲突
SysTick定时器是ARM Cortex-M内核的系统定时器,常用于时间戳记录和精确延时。其核心配置包括CTRL、LOAD和VAL寄存器,通过设置这些寄存器可以实现1ms中断,进而记录系统运行时间。然而,在实现延时函数时,直接操作SysTick寄存器可能导致中断被关闭,进而破坏时间戳功能。例如,delay_us函数在结束时将CTRL寄存器设置为0x04,导致SysTick中断被永久关闭,tick_ms计数器停止更新,依赖时间戳的应用逻辑失效。为解决这一问题,提出了两种方案:一是使用独立定时器(如TIM2)
2025-05-14 13:57:59
1045
原创 【BUG】STM32程序卡在B .即Default_Handler处
在调试STM32代码时,若程序卡死在启动文件的B.处,通常是因为进入了Default_Handler错误。这通常是由于开启了某个中断但未正确实现对应的中断服务函数,或函数名与启动文件中的定义不一致。STM32的中断向量表通过弱符号定义默认处理函数,若未重载则执行Default_Handler,导致死循环。解决方法包括检查是否开启了未使用的中断、确保中断函数名与启动文件完全一致,并通过CallStack回溯触发的中断。总结来说,未正确实现中断服务程序或函数名错误是导致此问题的根本原因。
2025-05-13 11:23:51
655
原创 【STM32 学习笔记】I2C通信协议
I2C通信协议是由Philips公司开发的一种串行总线协议,广泛应用于集成电路(IC)间的通信。其特点包括引脚少、硬件简单、可扩展性强,且无需外部收发设备。I2C总线由两条线组成:串行时钟线(SCL)和串行数据线(SDA),支持多设备通信。每个设备有独立地址,主机通过地址访问从机。总线通过上拉电阻保持高电平,设备空闲时输出高阻态。I2C支持标准、快速和高速三种传输模式,最大传输速率分别为100kbit/s、400kbit/s和3.4Mbit/s。协议采用开漏输出和弱上拉电阻设计,避免电源短路和引脚模式频繁切
2025-05-10 17:01:33
1475
原创 【STM32 学习笔记】USART串口
串口助手中的文本模式和HEX模式是两种不同的文件编辑或浏览模式。文本模式以ASCII编码格式显示文本文件内容,包括字母、数字、符号等,便于人类阅读。而HEX模式以十六进制编码格式显示文件内容,每个字节用两个十六进制数表示,适合查看文件的二进制编码,包括数据、指令等信息。STM32通过通信线路与陀螺仪、蓝牙等外挂模块连接,实现数据交换和控制。串口通讯的物理层和协议层分别规定了信号的用途、电平标准以及数据包的组成,包括起始位、数据位、校验位和停止位。波特率决定了数据传输的速率,确保发送和接收方同步。
2025-05-10 16:59:14
1348
原创 【STM32 学习笔记】DMA直接存储器存取
注意一下:就是这里的Flash,它是ROM只读存储器的一种,如果通过总线直接访问的话,无论是CPU,还是DMA,都是只读的,只能读取数据,而不能写入,如果你DMA的目的地址,填了Flash的区域,那转运时,就会出错。转运7次之后,传输计数器自减到0,DMA停止,转运完成。,这里可以看ADC的配置,ADC如果是单次扫描,那DMA的传输计数器可以不自动重装,转换一轮就停止,如果ADC是连续扫描,那DMA就可以使用自动重装,在ADC启动下一轮转换的时候,DMA也启动下一轮的转运,ADC和DMA同步工作。
2025-05-08 08:10:24
1041
原创 【STM32 学习笔记】ADC数模转换器
那对于GPIO来说,它只能读取引脚的高低电平,要么是高电平,要么是低电平,只有两个值,而使用了ADC之后,我们就可以对这个高电平和低电平之间的任意电压进行量化,最终用一个变量来表示,读取这个变量,就可以知道引脚的具体电压到底是多少了。所以ADC其实就是一个电压表,把引脚的电压值测出来,放在一个变量里,这就是ADC的作用。这是这个ADC的工作模式。然后12位和1us的转换时间,这里就涉及到ADC的两个了,第一个是。
2025-05-08 08:08:40
1341
原创 【STM32 学习笔记】TIM定时器
为什么在72MHz计数时钟下可以实现最大59.65s的定时?72M/65536/65536,得到的是中断频率,然后取倒数,就是59.65秒多,大家可以自己算一下。详细解释:在定时器中,预分频器和计数器都是16位的,所以它们的最大值是65535,而不是65536。预分频器的最大值决定了计数时钟的频率,而计数器的最大值决定了定时器的最大计数周期。因此,如果预分频器和计数器的最大值都设置为65535,那么定时器的最大时间就是72MHz/65536/65536,得到的是中断频率,倒数就是中断时间。【最大值是65
2025-05-07 08:07:09
1977
原创 【STM32 学习笔记】EXTI外部中断
当外部中断检测到引脚电平变化时,正常的流程是选择触发中断,但是在STM32中,也可以选择触发一个事件,如果选择触发事件,那外部中断的信号就不会通向CPU了,而是通向其它外设,用来触发其它外设的操作,比如触发ADC转换、触发DMA等。,是CPU的小助手。STM32的中断非常多,如果把这些中断全都接到CPU上,那CPU还得引出很多线进行适配,设计上就很麻烦,并且如果很多中断同时申请,或者中断很多产生了拥堵,CPU也会很难处理,毕竟CPU主要是用来运算的,中断分配的任务就放到别的地方吧,所以NVIC就出现了。
2025-05-06 08:55:13
1573
原创 【STM32 学习笔记 】OLED显示屏及Keil调试
比如我这里SCL接在了PB8,那这个地方就是GPIOB,GPIO_Pin_8,如果你换个端口,比如接在PA6上,那这个地方就要改成GPIOA,GPIO_Pin_6;下面这个SDA的引脚配置也是一样,SDA接在了哪个位置,就改成GPIO啥,GPIO_Pin_啥。具体更改就是,使用到的GPIO外设都先用RCC开启一下时钟,然后下面初始化GPIOB的Pin8,再初始化GPIOB的Pin9。改引脚配置和端口初始化,就可以直接使用OLED驱动函数了。
2025-05-06 08:52:46
567
原创 【STM32 学习笔记】GPIO输入与输出
这三个模式的电路结构基本是一样的,区别就是上拉电阻和下拉电阻的连接,它们都属于数字的输入口,那特征就是,都可以读取端口的高低电平,当引脚悬空时,上拉输入默认是高电平,下拉输入默认是低电平,而浮空输入的电平是不确定的,所以在使用浮空输入时,端口—定要接上一个连续的驱动源,不能出现悬空的状态。,但是在我们刚才的电路图,在所有输入模式下,输出都是无效的,这是因为,一个端口只能有一个输出,但可以有多个输入,所以当配置成输出模式的时候,内部也可以顺便输入一下,这个也是没啥影响的。但是在单片机的电路里,
2025-05-05 11:59:07
1631
原创 【外围电路】按键电路设计&外接信号输入设计
硬件消抖:适用于对实时性要求较高的场景,能够有效地滤除按键抖动信号,但可能会带来阻尼振荡等问题。RC滤波电路是最常用的硬件消抖方法之一,其参数选择需要根据具体的抖动时间和电路要求进行计算。软件消抖:具有灵活性高、成本低等优点,但对处理器的性能有一定要求,且可能会增加软件的复杂度。在实际应用中,可以根据具体的项目需求和资源限制,选择合适的消抖方法或结合硬件和软件消抖的方法,以实现最佳的按键处理效果。
2025-05-05 09:13:07
1535
原创 【电子元器件篇】10.常见接口电路
以上规定说明了RS-232C 标准对逻辑电平的定义。对于数据(信息码):逻辑“1”的传输的电平为-3V~-15V,逻辑“0”传输的电平为+3V~+15V;对于控制信号;接通状态(ON)即信号有效的电平为+3V~+15V,断开状态(OFF)即信号无效的电平为-3V~-15V,也就是当传输电平的绝对值大于3V 时,电路可以有效地检查出来;
2025-03-26 10:15:40
1156
原创 【电子元器件篇】9.DC-DC
线性稳压器传输元件工作在线性区,它没有开关的跳变;仅限于降压转换,很少会看到升压的应用。开关稳压器传输器件开关(场效应管),在每个周期完全接通和完全切断的状态;里面至少包括一个电能储能的元件,如:电感器或者电容器;多种拓扑(降压、升压、降压-升压等)充电泵,一般在一些小电流的应用传输器件开关(如:场效应管、三极管),有些完全导通,而有些则工作在线性区;在电能转换或者储能的过程中,仅限使用了电容器,如一些倍压电路。答疑:有些情况为什么要使用开关稳压器?为什么不用 LDO 和充电泵?
2025-03-22 08:08:13
1128
原创 【电子元器件篇】8.LDO
输入输出压差(Dropout Voltage)线性调整率(Line regulation)负载调整率(Load Regulation)电源抑制比(PSRR)瞬态响应(Transient response)静态电流(Supply Pin Current )1. 输入输出压差(Dropout Voltage)2. 线性调整率(Line regulation)线性调整率衡量了LDO(低压差线性稳压器)在输入电压波动时保持输出电压稳定的能力。
2025-03-22 08:07:30
1768
8
原创 【BUG】STM32 GPIO初始化失败的教训与总结
复位操作:适用于需要确保外设从默认状态开始配置的情况。直接启用时钟:适用于已知外设状态良好或不需要复位的情况。调试技巧:在遇到 GPIO 配置无效的问题时,检查寄存器状态是一个有效的调试方法。
2025-03-12 09:33:11
919
原创 【通信协议】协议解析深度解析与实战指南
基于状态机的解析:适用于复杂协议、实时性要求高的场景,如工业控制、通信设备等。基于数据缓冲区的解析:适用于简单协议、批量处理的场景,如文件传输、数据采集等。
2025-03-12 09:25:46
1072
原创 【通信协议】SPI初始化后发送指令不成功的问题分析与解决
菊花链(Daisy Chain)是一种将多个设备连接在一起的方式,每个设备通过一个输入和一个输出连接到下一个设备,形成一个链式结构。在SPI通信中,菊花链常用于连接多个从设备,每个从设备的输出连接到下一个从设备的输入,从而实现多个从设备的级联。通过上述分析和解决方法,可以有效解决SPI初始化后发送指令不成功的问题。在实际开发中,时序问题是一个常见的问题,需要仔细分析和调试。同时,了解菊花链的原理和应用,可以帮助我们更好地设计和优化系统。希望本文的内容对大家有所帮助。
2025-03-05 19:09:54
841
原创 【编译警告】warning: #188-D: enumerated type mixed with another type问题
解决warning: #188-D: enumerated type mixed with another type问题。
2025-03-05 19:08:50
826
原创 LED驱动电路的那些坑:从问题到知识点的全面解析
通过LED驱动电路的问题分析,我们不仅解决了实际问题,还引申出了许多重要的电路知识点。这些知识点不仅适用于LED驱动电路,也适用于其他电路设计。希望大家通过这个过程,能够更好地理解和掌握电路设计的原理和方法,逐步提高自己的电路设计能力。希望这篇博客对你有所帮助!如果还有其他问题,欢迎随时提问。当LED用电压源直接驱动时,可能会出现过流现象,而过压现象则通常不是由电压源直接驱动引起的。以下是详细的解释:过流现象。
2025-02-14 20:48:23
1473
原创 STM32 GPIO误触发问题全解析:从噪声干扰到电路设计优化
在STM32项目中,配置某GPIO为,并外接了一个上拉电阻。时,寄生参数变化引发,导致引脚电压振荡(振铃效应),短暂跌落至低电平阈值VIL≈0.99V。
2025-02-14 20:48:08
1231
原创 理解保护二极管在GPIO过电压保护中的作用
保护二极管通过提供低阻抗路径,将过电压引起的电流引导到VDD或VSS,从而保护内部电路;这种设计确保了GPIO引脚在异常电压条件下仍能安全运行,避免损坏。
2025-02-12 16:40:30
1023
1
原创 【电子元器件篇】7.逻辑器件
TTL、CMOS、LVTTL、LVCOMS、CML、ECL、PECL、LVPECL、LVDS、RS232电平RS422电平,RS485电平等。TTL和CMOS的逻辑电平按典型电压可分为四类:5V系列、3.3V系列,2.5V系列和1.8V系列。5V TTL和5V CMOS逻辑电平是通用的逻辑电平。3.3V及以下的逻辑电平被称为低电压逻辑电平,常用的为LVTTL电平低电压的逻辑电平还有2.5V和1.8V两种。
2024-12-02 20:44:29
1574
原创 【电子元器件篇】6.三极管&MOS管
这种基本的名词解释还是得用官方的话语说明一下:MOS,是MOSFET的缩写。MOSFET金属-氧化物半导体场效应晶体管,简称金氧半场效晶体管(Metal-Oxide-Semiconductor Field-Effect Transistor, MOSFET)。一般是金属(metal)—氧化物(oxide)—半导体(semiconductor)场效应晶体管,或者称是金属—绝缘体(insulator)—半导体。记住 MOS管有 三个引脚名称:G:gate 栅极;S:source 源极;
2024-12-02 20:44:08
1948
原创 【BUG】GPIO输入读取不到电平?或许是GPIOX->IDR与GPIO_Pin_X的问题
因此,当你看到 GPIOC->IDR 的值时,它指的是IDR寄存器中存放的数据,而不是寄存器的地址。还是找不到原因,网上搜索只有两例,但没有提及根本原因,以我的水平暂时只能分析在这了,下面一段话是我搜到的唯一有解释,但是通过他的话,我根据他的思路仔细一想,得出来了原因。要确定 GPIOC->IDR & GPIO_Pin11 的值,我们首先需要查看GPIOC端口的IDR寄存器中的数据,然后与GPIO_Pin11的掩码进行按位与操作。GPIOC->IDR 的值指的是它地址存放的数据,而不是地址本身。
2024-11-25 17:23:28
953
原创 【通讯协议】上拉电阻和下拉电阻的作用及在通信电路中的应用全解析
那么上下拉电阻阻值该取多大?首先阻值不能太小,因为太小,开关闭合时会产生较大的电流,会引起一来功耗大,二来也不安全。试想一下电阻为0是什么后果。另外阻值也不能太大,阻值太大,上拉/下拉的作用就变弱,越大越接近于开路,电流太小,引脚识别不了,开关断开时IO就越接近于浮空状态,就越容易受干扰。试想一下阻值无穷大是什么效果。所以这个电阻既不太大,也不太小,一般是几K到几十K大小,兼顾了功耗和上下拉作用。这里就引入了强弱的概念,弱就是阻值大,强就是阻值小。
2024-11-16 17:14:09
2767
原创 指针详解——C语言版
指针指针用法初次介绍指针的重要性指针的定义指针的分类1、基本类型指针2、 指针和数组3、指针和函数4、指针和结构提5、多级指针指针用法初次介绍在C语言中,允许用一个相关变量来存放指针,这种变量称为指针变量。指针变量遵循先定义、后使用的原则。对指针变量的定义包括三个部分:(1)指针类型说明,即定义变量为一个指针变量;(2)指针变量名;(3)变量值(指针)所指向的变量的数据类型。其定义形式如下:类型名 * 指针变量名 例如: int *p ;char *n;等等另外两个相关的运算符:
2024-11-15 09:19:07
978
1
原创 【BUG】STM32 引脚复用配置错误引发 HardFault 故障的解决方案
进行SPI2的硬件配置,发现配置完,程序运行到配置复用通道后会进入进入HardFault 故障。解决了,错误在这里,编译居然没有报错。
2024-11-11 10:54:59
506
原创 【BUG】STM32 程序跑飞?数组越界与 HardFault 错误的调试全攻略
在项目开发过程中,特别是在配置串口外设时,我们常会遇到一些意料之外的问题。本文将重点探讨在调试过程中发现的一个典型问题——数组越界访问,以及它如何导致单片机接收数据异常。通过逐步调试和深入分析,我们发现了一个关键问题:即使在未进入中断的情况下,存放接收数据的数组RX_buf的数据也在发生变化,这最终被追溯到数组越界访问。文章详细介绍了问题定位的过程,以及如何通过多种调试方法,包括利用STM32的LR寄存器,来锁定并解决这一常见但致命的编程错误。了解这些调试技巧对于确保程序的稳定性和安全性至关重要
2024-11-04 09:51:35
2119
4
原创 【BUG】ADC 配置错误,为何仍能读取电压数据?原因与解决方法解析
I/O 端口的默认状态在复位期间及复位刚刚完成后,复用功能尚未激活,I/O 端口被配置为输入浮空模式。这意味着即使没有进行 GPIO 配置,ADC 仍然可以从这些引脚读取数据。然而,这种模式下,引脚的电平状态可能不稳定,容易受到外部干扰。浮空输入模式的特性浮空输入模式下,引脚未连接到任何外部电路,处于高阻态,电平状态不确定。这种方式下,引脚可能因为干扰信号的存在而产生误触发,因此应尽量避免使用。模拟输入模式的特性模拟输入模式下,引脚被配置为模拟输入,适用于 ADC 等模拟外设的使用。
2024-10-28 11:23:55
1112
原创 【BUG】LED 灯无法点亮?确认GPIO初始化是否有配置成功
在实验中,我尝试通过 STM32 的 GPIO 引脚点亮 LED 灯。当配置为推挽输出模式时,LED 灯正常点亮。但当我将模式配置为复用推挽输出时,LED 灯无法点亮,直到我正确配置了复用通道。
2024-10-28 11:17:36
916
原创 计算机网络(自顶向下 第七版)学习笔记
回答这个问题有两种方式:其一,我们能够描述因特网的具体构成,即构成因特网的基本硬件和软件组成;其二,我们能够根据为分布式应用提供服务的联网基础设施来描述因特网。协议(protocol)定义了在两个或多个通信实体之间交换的报文格式和次序,以及在报文传输和接受或其他事件方面所采取的动作。时延的分类节点延时:dproc +dqueue +dtrans +dprop节点处理延时(dproc)检查bit级别差错检查分组首部和决定将分组导向何处通常是微妙数量级或更少。
2024-08-30 15:13:42
1208
原创 操作系统 --王道计算机考研--学习笔记
这篇笔记不怎么适合用作考研,因为所学专业,我会对这门课比较深入地学习。因为本人也是初学,所以在里面转载了很多大佬的文章,转载片段会进行说明,有些是书籍片段,就没进行声明。如果侵权,联系我删除。本文章主要参考视频为:王道计算机考研的视频,参考书籍有:另外笔记中如果有错误,疑惑等可以在评论区留言,我们一起探讨很难给出操作系统的准确定义。操作系统是一种运行在内核态的软件——尽管这个说法并不总是符合事实。部分原因是操作系统有两个基本上独立的任务,即。
2024-08-30 15:09:08
1592
转载 1.STM32延时函数的三种方法——重点掌握第三种
单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us( )和毫秒级delay_ms( )。
2024-07-17 16:04:13
3160
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人