自定义博客皮肤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 ADC 入门:从 PA0 引脚采集到电压换算,搞懂数字量的来龙去脉

外接硬件(电位器/传感器)→ PA0引脚输出模拟电压(源头)→ ADC1以3.3V为基准,把模拟电压转成0~4095的数字量(目标)→ CPU用数字量计算实际电压(或控制外设)源头:PA0 上的 2.5V 模拟电压;转换:ADC1 按 3.3V 基准,算出 2.5V 对应数字量≈3072(2.5*4096/3.3≈3072);目标:CPU 拿到 3072 这个数字量,再换算回 2.5V,判断是否需要执行后续操作(比如点亮 LED)。

2025-10-11 09:23:19 442

原创 STM32 ADC 基础应用:从初始化到模拟量采集与电压换算

你的代码用查询法等 EOC=1,是最简单直接的方式,适合入门场景;理解 EOC 的本质后,后续遇到高频采集需求,就能轻松切换到中断法,让代码更高效。

2025-10-11 09:23:01 2296

原创 ADC 基本概念解析

STM32F103C8T6

2025-10-10 08:35:06 1225

原创 STM32 定时中断逻辑拆解:为什么 “每 2 次中断翻一次 LED”,却是 1 秒亮 1 秒灭?

什么是 “完整翻转循环”?对 LED 来说,是从 “初始状态” 出发,经过两次状态变化后 “回到初始状态” 的过程。初始状态:灭;cnt=1(奇)→ 灭→亮(第一次状态变化);cnt=2(偶)→ 亮→灭(第二次状态变化);至此,LED 从 “灭” 出发,经过 2 次中断,回到 “灭”—— 这就是一次 “完整翻转循环”,需要 2 次中断才能完成。LED 的状态只在中断触发时改变,中断不触发时,状态不会自动变(硬件特性决定);

2025-10-10 08:34:46 806

原创 STM32 TIM2 定时器 1 秒中断代码解析:时基配置、NVIC 与 LED 控制

在嵌入式开发中,我们常需要 “周期性执行任务”—— 比如每 1 秒翻转 LED、每 1 秒打印日志,这时候定时器中断就是最优方案(无需 CPU 轮询等待,节省资源)。本文以 STM32 的 TIM2 定时器为例,通过完整代码实现 “1 秒触发一次中断”,在中断中完成和,带你搞懂定时中断的 “初始化→中断响应→任务执行” 全流程,代码可直接复用。

2025-10-08 22:08:54 729

原创 通用同步异步收发器(USART)

首先,在 MDK(Keil)中,需勾选 “Use Micro LIB”(微库):点击工程选项(Options for Target)→ Target → 勾选 “Use Micro LIB”(微库包含简化的 stdio 函数,支持重定向)。如果想使用printf()函数把数据输出到USART上,则需要修改printf()函数调用的与输出设备相关的fputc()函数。此时,通过串口助手(如 XCOM)连接单片机的串口,即可看到打印的信息。USART 的 Tx(发送)和 Rx(接收)引脚需配置为。

2025-10-08 22:08:30 1225

原创 以 STM32 为例:嵌入式工程模板中XXX_InitTypeDef的配置逻辑与工具实操

STM32 标准库工程模板(如)中,以下两类typedef已在头文件(如1.外设寄存器结构体(例如(在中)、(在中),这些结构体的成员就是我们需要配置的参数,具体配置前需先查看其定义。// 波特率(如9600、115200)// 数据位长度(8位/9位)// 停止位(1位/1.5位/2位)// 校验位(无校验/奇校验/偶校验)// 模式(发送/接收/收发)// 硬件流控(无/CTS/RTS/CTS+RTS)从注释和成员名可知,USART 配置需设置 6 个核心参数。

2025-10-07 13:08:53 813

原创 嵌入式开发中_TypeDef与_InitTypeDef的分工解析

内容类型责任方具体形式开发者操作外设寄存器结构体(厂商(模板)直接使用(如GPIOAUSART1基础数据类型别名(u8s32厂商(模板)直接使用(如u8 RevData;配置结构体(厂商(模板)1. 创建变量;2. 填充参数简言之,工程模板通过typedef搭建了 “底层硬件映射” 的骨架,而开发者的核心工作是基于XXX_InitTypeDef填充 “配置参数” 的血肉。这种分工让开发者无需关注硬件寄存器细节,只需聚焦业务逻辑,大幅降低了嵌入式开发的门槛。

2025-10-07 13:08:40 487

原创 GPIO配置的“复用输出”与“不复用输出”

(如 UART、SPI、定时器等),让引脚作为外设的专用接口使用;两者的核心区别在于控制权归属和功能用途。则表示引脚仅作为普通 IO 口,在 GPIO 配置中,的 “复用” 是指将。

2025-10-05 15:53:37 416

原创 GPIO的原理与应用

输出速度(又称 “驱动速度”)定义 GPIO 输出电平从高到低(或低到高)的切换速率,核心作用是:速度越快,驱动能力越强,但 EMI 干扰越大;速度越慢,干扰越小,但响应延迟增加。:2MHz,适用于对响应速度无要求的场景(如 LED 闪烁);:25MHz,适用于一般数字信号输出(如普通 IO 控制);:50MHz,适用于高速外设(如 SPI 通信、PWM 高频输出);

2025-10-05 15:52:07 736

转载 implicit declaration of function解决

以上方法都检查了,没有发现问题,纠结了好久,实在不知道是哪里的问题,之后尝试在提示warning的.c文件对应的h文件中加入extern+函数类型+函数名;版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。得出结论:如果无上述四个问题,需在提示warning的.c文件对应的h文件中加入extern,提示该函数是外部函数。3.在c文件和h文件都无问题的情况下,include是否正确。2.在c文件定义的情况下相应的h文件中是否有声明。

2025-03-09 16:13:57 898

原创 EXTI与超声波传感器

这种变化可以是上升沿(从低电平到高电平的跳变)或下降沿(从高电平到低电平的跳变),具体取决于传感器的设计和配置。在嵌入式系统中,EXTI(外部中断/事件控制器)通常用于检测外部信号的上升沿和下降沿。这种情况下,系统会配置EXTI来检测上升沿,以便在检测到回声时立即响应。:在某些情况下,系统可能配置为在特定的高电平或低电平持续一定时间后触发中断,而不是基于电平跳变。:与上升沿相反,这种情况下,传感器的输出从高电平变为低电平时触发中断。:某些系统可能配置为同时检测上升沿和下降沿,以提供更灵活的事件检测。

2025-02-25 07:54:50 275

原创 常用的Notepad++的快捷键

Shift-Tab (selection of several lines) 移除Space。Ctrl-H 打开Find / Replace 对话框。Ctrl-Space 打开CallTip列表框。Ctrl-Shift-F 在文件中找。Ctrl-Shift-U 变为大写。Alt-Shift-0 展开全部。Shift-F2 到下一个书签。Ctrl-Q 块注释/消除注释。Shift-F3 找上一个。Ctrl-D 复制当前行。Ctrl-L 删除当前行。Ctrl-F2 触发书签。Ctrl-U 变为小写。

2024-06-29 16:29:37 684

原创 功能封装

代码写到一定程度是一定要封装,别等到写了一千多行两千多行的时候才想起来要封装,那你就完了,除非你的水平一定够!

2024-06-29 13:06:40 1889 1

原创 SWDIO和SWCLK---->SWD(Serial Wire Debug)

双向引脚。

2024-06-22 17:07:08 9859 2

原创 内存的储存方式及变量

这就是为什么在进行跨平台数据交换或者处理来自不同系统的二进制数据时,了解对方的存储模式是非常重要的。在不知道存储模式的情况下,你无法确定哪个字节是高位或低位,因为它们在内存中的排列顺序可能会有所不同。因此,要判断一个字节是高位还是低位,确实需要先知道数据的存储模式。

2024-06-22 10:48:21 637

原创 学会使用电脑上的计算器

程序员计算器通过提供这些功能和单位,帮助程序员进行快速的数值转换、存储和计算,特别是在处理二进制和十六进制数值时非常有用。

2024-06-22 10:47:09 2002

原创 DEBUG调试

当断点被失能后,程序在执行到该位置时不会停止,而是继续运行。

2024-06-16 15:15:00 781 1

原创 时钟树与SysTick

根据学过的物理中的时间与频率的公式:fosc=1/T T=1/fosc ,fosc为Systick的频率。1秒钟为:1/(每次的时间)=1/(1/72MHz)=72 000 000次。如果需要1S则可以通一设置一个全局变量,然后定初值得为1000,这样每个systick中断一次,这个全局变量减1,减到0,即systick中断1000次,时间为:1ms1000=1S。因为SysTick定时器是:24位的,最大定时时间为:2的24次方(1/72MHz)的时间,这里Systick频率为:72MHz的情况下。

2024-06-08 14:04:09 2030 1

原创 手搓HAL库空工程

使用Keil5创建新工程:打开Keil5软件,选择创建新的uVision Project,指定保存位置和工程名称后保存。接着选择对应的GD32芯片型号,如GD32F303RC系列。

2024-06-01 18:41:58 725 1

原创 GD32F30x创建工程前的准备工作(下载资料,配置环境)

就简单的一些准备操作,创建工程制作中

2024-06-01 15:49:13 882 1

空空如也

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

TA关注的人

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