STM32编程技巧
文章平均质量分 64
小灰灰搞电子
励志成为一名优秀的嵌入式软、硬件工程师!冲鸭!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
STM32驱动HX711电子秤模数转换芯片代码分享
本文介绍了HX711高精度24位模数转换芯片及其在电子秤中的应用。HX711集成放大器、稳压电源和数字接口,支持双差分输入通道,具有128倍可编程增益和10/80SPS采样率。文章提供了STM32驱动代码实现,包括初始化、数据读取、毛皮重量获取和称重计算功能。代码采用中值滤波算法提高测量稳定性,通过校准参数GapValue实现重量精确计算。该方案适用于各类高精度称重系统,外围电路简单,易于与微控制器集成。原创 2026-05-16 06:00:00 · 411 阅读 · 0 评论 -
STM32 驱动TFT显示圆弧和图片源码分享
本文分享了STM32驱动TFT显示屏的源码实现,主要包括SPI初始化和LCD初始化两部分。代码使用HAL库配置SPI1为主模式,设置双线通信、8位数据帧结构,并详细配置了时钟极性和相位。LCD初始化部分包含硬件复位时序和一系列寄存器配置命令,通过SPI接口发送初始化指令和数据。源码提供了完整的GPIO初始化、SPI速度设置等功能,适用于驱动GC9A01等TFT显示屏,可作为嵌入式显示开发的参考实现。原创 2026-05-16 06:00:00 · 562 阅读 · 0 评论 -
STM32 驱动1.28寸圆形屏(GC9A01)源码分享
本文介绍了GC9A01 LCD显示控制器芯片的特性及应用,并分享了STM32驱动代码。GC9A01是一款高性能LCD控制器,支持240×240分辨率、16位色深(65K色)和60Hz刷新率,采用SPI接口通信,工作电压2.8-3.3V,具有低功耗特性(待机电流<1μA)。文章详细说明了芯片的技术规格,包括工作温度范围(-40°C至85°C)、封装形式(48pin QFN)等,并列举了其在智能穿戴、工业控制等领域的应用场景。原创 2026-05-07 10:18:45 · 1333 阅读 · 0 评论 -
STM32、GD32 ppm协议解析源码分享
PPM协议解析与STM32实现 PPM(脉冲位置调制)是无人机遥控系统常用的通信协议,通过脉冲位置编码多通道控制信号。其帧结构包含同步脉冲和通道脉冲序列,典型脉宽1.0-2.0ms(中立位1.5ms),帧周期约20ms。 STM32实现方案: 使用TIM2定时器捕获通道4的下降沿 配置71分频系数,16位计数器 通过中断回调处理捕获事件 状态机管理捕获过程(包括溢出处理) 关键代码特征: 支持16通道PPM信号解析 双中断处理(更新/捕获) 状态标志位管理捕获流程 硬件滤波配置 该实现具有多路复用、带宽效率原创 2026-01-24 06:00:00 · 2009 阅读 · 0 评论 -
STM32、GD32 裸机移植一个shell 终端!调试简直不要太方便!
本文介绍了在STM32/GD32裸机系统中移植Shell终端的方法,通过移植letter_shell实现便捷调试功能。主要内容包括:1)Shell的基本概念与核心功能(命令执行、脚本自动化、环境控制);2)移植步骤:使用CubeMX生成工程,添加letter_shell源码,实现环形缓冲区处理串口数据;3)关键代码实现,包括ringbuffer操作和Shell读写接口适配。该方案可显著提升嵌入式开发调试效率,支持类似Linux终端的交互操作,适用于资源受限的MCU环境。移植后开发者可直接通过串口输入命令控制原创 2026-01-21 06:00:00 · 1576 阅读 · 0 评论 -
STM32面试常见问题及答案
STM32基础知识与应用摘要 STM32是意法半导体推出的基于ARM Cortex-M内核的32位微控制器系列,包含主流型(F0/F1/F3)、高性能型(F4/F7/H7)、超低功耗型(L0/L4/L5)和无线型(WB/WL)等子系列。其外设开发涉及GPIO输入输出模式配置、USART通信初始化、ADC采样参数设置等关键操作。中断系统采用NVIC控制器管理,支持优先级分组和DMA数据传输优化性能。开发工具链包含STM32CubeMX配置工具和HAL/LL库,支持低功耗模式(Sleep/Stop/Standb原创 2025-08-26 06:00:00 · 2485 阅读 · 0 评论 -
嵌入式(ARM方向)面试常见问题及解答
嵌入式ARM面试要点总结 ARM架构因低功耗、高性能成为嵌入式系统主流。面试主要考察三方面:基础知识(ARM处理器特性、指令集架构)、实践技能(C语言编程、硬件接口配置、RTOS应用)和问题解决能力(调试技巧、项目经验)。典型问题包括解释ARM核心优势、对比ARMv7/8差异、描述中断处理机制、操作硬件寄存器、分析通信协议区别等。需重点掌握:volatile关键字作用、GPIO配置、上下文切换原理,并能结合项目说明问题解决过程。准备时应研读ARM官方文档,通过开发板实践巩固知识,面试中注意逻辑清晰、结合实例原创 2025-08-25 09:40:34 · 1343 阅读 · 1 评论 -
将W25Q256换成W25Q128 QSPI出现读ID正常,但读写数据失败问题解决
W25Q256更换为W25Q128时出现读写失败问题,解决方法包括:1. 修改Flash尺寸参数为16MB(0X1000000);2. 调整地址位宽参数,将(3 << 4)改为(2 << 4);3. 在初始化函数中增加100ms延时(HAL_Delay(100))确保稳定。这些改动涉及QSPI配置调整,解决了读ID正常但读写数据失败的问题。原创 2025-08-14 06:00:00 · 2485 阅读 · 0 评论 -
rt-thread自动初始化移植到裸机详细教程
RT-Thread自动初始化机制移植到裸机系统教程 该教程详细介绍了如何将RT-Thread的自动初始化机制移植到裸机工程中。核心原理是利用初始化函数表和优先级分组,通过特殊内存段存储初始化函数指针,并按6个优先级分组执行(1-6级,数字越小优先级越高)。移植步骤包括:1)准备裸机工程;2)添加components.h/c文件,定义初始化宏和函数指针类型;3)实现components_board_init()和components_init()函数来遍历执行初始化表。关键点在于使用__attribute__原创 2025-08-12 06:00:00 · 1270 阅读 · 0 评论 -
STM32+rt-thread判断是否联网
摘要:本文介绍了三种检测网络连接状态的方法。第一种通过NETDEV_FLAG_INTERNET_UP位判断网络接口是否可用;第二种基于DHCP状态检测是否获取到有效IP地址;第三种使用Ping命令实现完整的网络连通性检测,通过向8.8.8.8发送ICMP包并等待响应来判断网络连接状态。每种方法都提供了详细的代码实现和说明,适用于不同场景下的网络连接检测需求。 (字数:149)原创 2025-06-10 10:21:58 · 441 阅读 · 0 评论 -
nmeaLib内存泄漏问题及其解决方法
摘要:nmeaLib内存泄漏问题分析与修复 在解析NMEA协议的nmeaLib库使用过程中发现内存泄漏问题。经排查,问题根源位于nmea_parser_real_push()函数中,该函数用于解析NMEA数据包并分配内存存储解析结果。当解析特定类型的数据包(如GPGGA、BDGGA等)失败时,虽然释放了数据包内存(node->pack),但未释放节点结构体(node)本身的内存,导致内存泄漏。修复方案是在每个数据包解析失败的分支中,同时释放node->pack和node结构体。修改后的代码确保了原创 2025-06-09 09:13:20 · 584 阅读 · 0 评论 -
STM32+腾讯物联网平台OTA升级详细教程
本文介绍了STM32通过腾讯物联网平台实现OTA(Over-The-Air)升级的详细教程。首先,文章解释了OTA升级的定义及其在智能手机、汽车和智能家居等领域的应用场景,并详细描述了OTA升级的四个步骤:检测更新、下载更新原创 2025-05-23 17:10:26 · 2005 阅读 · 0 评论 -
STM32+rt-thread使用MQTT协议连接腾讯物联网平台
选rt-thread平台就行,这都是人家写好的,可以直接使用。只复制图中4个文件夹就可以。SDK文章顶部下载。原创 2025-05-22 14:10:36 · 931 阅读 · 0 评论 -
rt-thread+STM32H7移植lwip出现问题解决方法
在处理STM32H7系列芯片的网络问题时,主要遇到三个问题:ping不通或丢帧、Keil优化后无法联网、网络断断续续。这些问题主要与MPU配置和drv_eth驱动相关。通过调整MPU配置,确保ETH DMA描述符和RX缓冲区的正确缓存设置,可以解决这些问题。MPU配置中,ETH相关区域被设置为不可缓存且可缓冲,以确保数据传输的稳定性。此外,drv_eth驱动中的调试选项和PHY状态检测过程也进行了优化,以提升网络连接的可靠性。通过这些调整,网络问题得到了有效解决。原创 2025-05-10 09:17:04 · 704 阅读 · 0 评论 -
STM32、GD32驱动TM1640原理图、源码分享
【代码】STM32、GD32驱动TM1640原理图、源码分享。原创 2025-02-11 14:52:13 · 966 阅读 · 0 评论 -
stm32驱动HX711称重传感器 c++代码分享
HX711模块具有一对不平衡式差分输入端,可以通过将感应器连接到这对输入端来测量称重传感器的变化。HX711模块通常被广泛应用于电子秤、压力传感器、称重传感器等领域,用于测量和计量各类物体的重量。HX711模块通常配合称重传感器一起使用,例如压力传感器、负载细胞等。它采用24位的模数转换器(ADC)来精确测量传感器的电压变化。通过读取HX711模块输出的测量值,可以获取准确的称重数据。HX711模块是一种专门用于称重传感器的放大器模块。它的主要功能是将测得的微小电压信号放大到可以被微控制器读取的范围。原创 2024-09-11 18:52:28 · 1453 阅读 · 0 评论 -
STM32、GD32驱动PCA9685控制舵机源码分享
一、PCA9685介绍一、PCA9685介绍PCA9685是一种16通道PWM(脉宽调制)控制器芯片,由NXP Semiconductors公司生产。它具有高速I2C总线接口,可以通过I2C总线与微控制器或其他设备进行通信。PCA9685广泛应用于各种需要精确控制多路PWM信号的应用,如LED灯控制、舵机控制、电机控制等。PCA9685芯片的工作原理是通过调整PWM的占空比来控制输出信号的电平。用户可以设置PWM输出频率和占空比,通过改变占空比来改变输出信号的电平。原创 2024-05-08 17:27:48 · 1679 阅读 · 0 评论 -
STM32、GD32驱动SHT30温湿度传感器源码分享
SHT30是一种数字湿度和温度传感器,由Sensirion公司生产。它是基于物理蒸发原理的湿度传感器,具有高精度和长期稳定性。SHT30采用I2C数字接口,可以直接与微控制器或其他设备连接。该传感器具有低功耗和快速响应的特点,能够在广泛的温度和湿度范围内准确测量。SHT30还具有内置的温度补偿功能,可以提供精确的湿度和温度测量结果。它广泛用于气象观测、室内环境监测、农业、工业自动化等领域。原创 2024-04-26 18:25:55 · 1646 阅读 · 0 评论 -
STM32、GD32等驱动AMG8833热成像传感器源码分享
AMG8833是一种红外热像传感器,也被称为热感传感器。它可以用来检测和测量物体的热辐射,并将其转换为数字图像。AMG8833传感器可以感知的热源范围为-20°C到100°C,并能提供8x8的像素分辨率。它通过I2C接口与微控制器或单片机进行通信,并可提供实时温度图像数据。AMG8833传感器被广泛用于热成像、人体检测、温度测量等应用领域。原创 2024-04-26 18:18:53 · 2259 阅读 · 7 评论 -
解析SBUS包源代码分享
二、数据格式错误时一定要重新开始寻找包头0x0f,否则数据会一直错误,因为数据帧中有可能有0x0f数据。实现方法为等报位0x00,因为任何通道数据都不可能为0x00。停止位为1位(STM32的初始化)校验位为PARITY_EVEN。波特率为100Kbit。原创 2023-02-28 17:00:56 · 561 阅读 · 0 评论 -
增量式PID与位置式PID的理解与代码实现
一、PID控制算法概述PID 实指“比例 proportional”、“积分 integral”、“微分 derivative”,这三项构 成 PID 基本要素。每一项完成不同任务,对系统功能产生不同的影响。它的结构简单,参数易 于调整,是控制系统中经常采用的控制算法。PID:比例单元(P)、积分单元(I)和微分单元(D)组成一、增量式PID比例P : e(k)-e(k-1) 这次误差-上次误差积分I : e(i) 误差微分D : e(k) - 2e(k-1)+e(k原创 2021-09-03 10:54:02 · 7732 阅读 · 1 评论 -
STM32F103驱动无刷直流电机应用思路
一、STM32F103驱动无刷直流电机基本思路无刷电机控制是基于6步换相法如下图所示:二、STM32F103驱动无刷直流电机方法介绍通常我们用的方法是使用高级定时器3通道互补输出去驱动mos管,用通用定时器连接霍尔传感器去触发中断,在中断中换相,基本原理如下图所示:三、驱动代码编写/*********************************************************************** Description : None* Input原创 2021-08-23 13:10:59 · 24419 阅读 · 6 评论 -
STM32或GD32驱动超高精度实时时钟PCF2129
一、PCF2129介绍PCF2129主要特性内部集成温度补偿功能的振荡器电容;精度:±3ppm(-20℃~+70℃);内置32.768 kHz晶振;可提供年、月、日、星期、时、分和秒等信息;时间印输入管脚,可中断的时间印功能;1MHz的双线I2C总线接口;6.5Mbit/s的三线SPI总线接口;备用电池输入和转换电路;备用电池电压输出;电池电量低报警;监控晶振停止工作功能;开漏中断引脚;1秒或1分钟中断输出;具有中断和复位功能的可编程的看门狗定时器;具有中断能力的可编程闹钟功原创 2021-06-18 15:36:54 · 1344 阅读 · 1 评论 -
STM32移植FAFTS文件系统遍历创建文件夹
FRESULT folder_create(char* path){ FRESULT res; DIR dir; char *str = path; char *pbuf; u16 cnt=0; res = f_opendir(&dir, path); if (res == FR_OK) { f_closedir(&dir); return FR_OK; } else { pbuf=mymalloc(SRAMIN,200);原创 2021-06-17 16:23:42 · 593 阅读 · 0 评论 -
STM32移植FAFTS文件系统遍历设备中的所有文件和文件夹
一、效果展示一、测试代码#include "sys.h"#include "delay.h"#include "usart.h" #include "led.h"#include "sdram.h"#include "mpu.h"#include "malloc.h"#include "nand.h" #include "ftl.h" #include "ff.h" #include "exfuns.h" #include "string.h"FRESULT scan原创 2021-06-17 14:16:47 · 2201 阅读 · 0 评论 -
STM32或GD32驱动TM1637
一、TM1637介绍TM1637 是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。本产品性能优良,质量可靠。主要应用于电磁炉、微波炉及小家电产品的显示屏驱动。采用DIP/SOP20的封装形式。功能特点: 采用功率CMOS 工艺 显示模式(8 段×6 位),支持共阳数码管输出 键扫描(8×2bit),增强型抗干扰按键识别电路 辉度调节电路(占空比 8 级可调) 两线串行接口(原创 2021-06-16 15:24:18 · 3776 阅读 · 5 评论 -
STM32移植EasyLogger,在终端输出带颜色的日志
一、效果欣赏二、EasyLogger介绍 EasyLogger 是一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目,例如: IoT 产品、可穿戴设备、智能家居等等。相比 log4c、zlog 这些知名的 C/C++ 日志库, EasyLogger 的功能更加简单,提供给用户的接口更少,但上手会很快,更多实用功能支持以插件形式进行动态扩展。主要特性:1.支持用户自定义输出方式(例如:终端、文件、数据库、串口、485、原创 2021-05-27 09:57:51 · 2619 阅读 · 3 评论 -
使用STM32或GD32解析xml格式数据
一、XML文件介绍 可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。 在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年原创 2021-05-18 14:56:20 · 9485 阅读 · 5 评论 -
H750移植rt_thread操作系统完整工程分享,包括外部FLASH分散加载文件
一、移植注意事项1、在运行外部FLASH存储的代码之前首先要初始化QSPI进入内存映射模式,参考代码://QSPI进入内存映射模式(执行QSPI代码必备前提,为了减少引入的文件,//除了GPIO驱动外,其他的外设驱动均采用寄存器形式)void QSPI_Enable_Memmapmode(void){ unsigned int tempreg=0; volatile unsigned int *data_reg=&QUADSPI->DR; GPIO_InitTypeDef q原创 2021-05-17 15:55:42 · 1404 阅读 · 1 评论 -
STM32驱动RC522读卡完整资料分享,包含原理图、PCB、驱动工程文件
一、原理图二、PCB三、驱动程序main.c#include "delay.h"#include "sys.h"#include "rc522.h"#include "usart.h"#include "string.h" /*全局变量*/unsigned char CT[2];//卡类型unsigned char SN[4],SNSave[4]; //卡号unsigned char RFID[16]; //存放RFID u8 KEY[6]={0xff,0xff,0原创 2021-04-29 16:57:53 · 9129 阅读 · 4 评论 -
STM32H750获取系统时钟
rt_kprintf("SYSCLK_Frequency=%ld\n",HAL_RCC_GetSysClockFreq()); rt_kprintf("HCLK_Frequency=%ld\n",HAL_RCC_GetHCLKFreq()); rt_kprintf("PCLK1_Frequency=%ld\n",HAL_RCC_GetPCLK1Freq()); rt_kprintf("PCLK2_Frequency=%ld\n",HAL_RCC_GetPCLK2Freq());原创 2021-04-22 19:37:56 · 962 阅读 · 0 评论 -
移植rt-thread的过程中出现 #20: identifier “time_t“ is undefined或 identifier “clock_t“ is undefined
主要原因是在linux操作系统上这些值时定义的,但是移植到IAR或KEIL中是没有定义的,我查了半天三个值需要定义typedef long int time_t;typedef long clock_t;struct tm { int tm_sec; int tm_min; int tm_hour; int tm_mday; //一个月中的某天(0 - 31) int tm_mon; int tm原创 2021-04-22 19:22:08 · 2817 阅读 · 0 评论 -
STM32F103通过Ymodem协议更新程序带MD5校验
一、先来几张靓图二、Xshell软件设置三、程序更新流程waitStartVerInfo, //等待起始校验消息,确定协议getProgInfoPack, //或去信息包progFileDeal, //程序处理downloadAndSaveProg, //下载并保存程序verifyDownloadProg, //校验下载下来的程序carryProgToMcu, //搬运程序进入MCUverifyMcuProg, //校验搬运进入MCU的程序recordPr原创 2021-04-16 15:37:15 · 1467 阅读 · 1 评论 -
STM32驱动WK2168串口扩展芯片完整教程
一、WK2168介绍WK2168是首款具备256级FIFO的低功耗并支持 UART/SPITM/IIC/8位并行总线接口的4通道UART器件。可以通过模式选择使得该芯片工作于以上任何一种主接口模式,将选定的主接口扩展为4个增强功能的UART。扩展的子通道的UART具备如下功能特点:1.每个子通道UART的波特率、字长、校验格式可以独立设置,最高可以提供2Mbps的通信速率。2.每个子通道可以独立设置工作在IrDA红外通信、 RS-485自动收发控制、 9位网络地址自动识别、软件/硬件自动流量原创 2021-04-13 13:44:18 · 5736 阅读 · 0 评论 -
ARM开发中常见数据类型取值范围
数据类型C语言取值范围整型int-2147483648~+2147483647无符号整型unsigned int0~4294967295短整型short int-32768~32767无符号短整型unsigned short int0~65535长整型long int-2147483648~+2147483647无符号长整型unsigned long int0~4294967295长长整型long long int-9,...原创 2021-04-08 16:26:20 · 1483 阅读 · 1 评论 -
STM32串口波特率计算问题和常用波特率
一、分数波特率的产生一、接收器和发送器的波特率在USARTDIV的整数和小数寄存器中的值应设置成相同。 =这里的fck是给外设的时钟(PCLK1用于USART2、 3、 4、 5, PCLK2用于USART1)USARTDIV是一个无符号的定点数。这12位的值设置在USART_BRR寄存器。注: 在写入USART_BRR之后,波特率计数器会被波特率寄存器的新值替换。因此,不要在通信进行中改变波特率寄存器的数值。如何从USART_BRR寄存器值得到USARTDIV例1: 如果 DIV_Mant原创 2021-03-30 19:05:04 · 17133 阅读 · 0 评论 -
使用KEIL开发ARM如何实现像面向对象语言一样的构造函数呢-$Sub$$与$Super$$
一、首先咱们先看一段代码:void $Sub$$main(void){ extern int main(void); extern int $Super$$main(void); delay_init(); uart_init(115200); printf("调用主函数之前调用$Sub$$main函数\r\n"); $Super$$main(); }int main(void){ printf("调用主函数\r\n"); while(1) { pri原创 2021-03-29 10:58:14 · 954 阅读 · 1 评论 -
STM32标准库rt-thread工程中移植syswatch组件
一、syswatch组件介绍 系统看守(syswatch)组件 主要功能是保障实时操作系统正常运行,防止系统死机 以及各种异常引起的线程阻塞,保障整个系统长期正常运行。系统看守具备以下几种行为模式:1.系统崩溃或硬件异常导致系统失去调度时,执行 系统复位 恢复系统正常运行。2.当有异常导致某些线程长时间阻塞时,可根据用户的配置实施 系统复位 / 杀掉阻塞线程 / 重启阻塞线程 的方式恢复系统正常运行。二、工作原理简述 系统看守(syswatch)组件 使用实时操作系统中允许的最高优先级作为看守原创 2021-03-12 16:09:55 · 1362 阅读 · 0 评论 -
基于STM32F103标准库、rt-thread操作系统完美移植freemodbus主机程序
一、说明1.移植的开发环境是keil5。2.基于rt-thread操作系统,也可以使用ucos和freeRTOS操作系统。3.本人可有偿代移植其他操作系统,具体费用主页加我QQ联系。4.页面底部有rt-thread操作系统移植成功的工程链接,大家可以参考。二、移植步骤由于移植过程比较繁琐,就不过多说明了,大家可以下载工程研究一下就行三、特殊说明1. 读取输入寄存器(功能04)使用函数:/** * Modbus master input register callback functio原创 2021-03-11 16:38:39 · 3744 阅读 · 5 评论 -
STM32 SPI驱动OLED12864原理图和源代码分享
一、原理图芯片引脚连接二、驱动程序spi.c#include "spi.h"void SPI1_Init(void){ GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );//PORTA时钟使能 RCC_APB2PeriphClockCmd( RCC_APB2Perip原创 2021-02-20 17:53:07 · 11088 阅读 · 3 评论
分享