STM32+CubeMX开发笔记汇总(更新2025.04.27)

本文作者分享了两年来使用STM32开发的经验,详细介绍了如何使用STM32CubeMX配置不同类型的定时器、串口、SPI、FDCAN、ADC等外设,并涉及RTOS的集成。还涵盖了STM32的库选择、IDE变迁及固件烧录等开发过程中的关键环节,旨在帮助开发者更好地理解和运用STM32CubeMX。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、LL库与寄存器(进阶)

MCU开发的精髓只能是学会用寄存器开发MCU程序。一定要掌握本质,所谓本质就是“寄存器”。 只会用HAL库,不会寄存器,只能算是入门。别扯寄存器开发周期长什么的,移植会很困难。在高手面前,这些都不是问题。在高手看来,怎样提高效率与减少空间才值得琢磨。
STM32 - 在机器人、自动化控制领域,LL库相比HAL优势明显
STM32F103_LL库+寄存器学习笔记01 - 梳理CubeMX生成的LL库最小的裸机系统框架
STM32F103_LL库+寄存器学习笔记02 - 开启SysTick(滴答定时器)中断

GPIO专题

STM32F103_LL库+寄存器学习笔记03 - GPIO设置输入模式,并轮询GPIO的电平状态
STM32F103_LL库+寄存器学习笔记04 - GPIO设置输出模式
STM32F103_LL库+寄存器学习笔记05 - GPIO输入模式,捕获上升沿(或下降沿)进入中断回调

串口通讯专题

  1. 笔记06~07是串口通讯入门。
  2. 笔记08~09是串口通讯进阶,使用DMA辅助数据的收发,MCU被解放出来。
  3. 笔记10~11是串口通讯的最终解决方案,实战项目推荐使用。
  4. 笔记12是提高串口通讯的健壮性,实战项目一定要监控错误。

STM32F103_LL库+寄存器学习笔记06 - 梳理串口与串行发送“Hello,World“
STM32F103_LL库+寄存器学习笔记07 - 串口接收缓冲区非空中断
STM32F103_LL库+寄存器学习笔记08 - DMA串口发送,开启DMA传输完成中断
STM32F103_LL库+寄存器学习笔记09 - DMA串口接收与DMA串口发送,串口接收空闲中断
STM32F103_LL库+寄存器学习笔记10 - DMA传输过半+DMA传输完成中断实现DMA串口接收“双缓冲“
STM32F103_LL库+寄存器学习笔记11 - 串口收发的中断优先级梳理
STM32F103_LL库+寄存器学习笔记12 - 提高串口通讯程序的健壮性:异常监控 + 超时保护机制

CAN通讯专题

  1. CubeMX不支持生成CAN外设的LL库代码,所以改用HAL库+寄存器方式来学习。
  2. 笔记20是CAN驱动的最终解决方案,发送与接收都使用ringbuffer实现二级缓存。
  3. 笔记21是CAN从站必须掌握的关键知识点-CAN接收过滤器。

STM32F103_HAL库+寄存器学习笔记13 - 梳理外设CAN与如何发送CAN报文(串行发送)
STM32F103_HAL库+寄存器学习笔记14 - CAN发送完成中断
STM32F103_HAL库+寄存器学习笔记15 - 梳理CAN发送失败时,涉及哪些寄存器
STM32F103_HAL库+寄存器学习笔记16 - 监控CAN发送失败(轮询方式)
STM32F103_HAL库+寄存器学习笔记17 - CAN中断接收 + 接收CAN总线所有报文
STM32F103_HAL库+寄存器学习笔记18 - CAN接收溢出中断
STM32F103_HAL库+寄存器学习笔记19 - CAN发送中断+CAN接收中断+接收所有CAN报文+ringbuffer数据结构
STM32F103_HAL库+寄存器学习笔记20 - CAN发送中断+ringbuffer + CAN空闲接收中断+接收所有CAN报文+ringbuffer
STM32F103_HAL库+寄存器学习笔记21 - CAN接收过滤器:CPU减负神器,提升系统效率的第一道防线

二、HAL库(初级)

串口

STM32H743 + CubeMX - 串口重定向printf
STM32H743 + CubeMX - 串口非空闲中断接收

TIM

STM32H743 + CubeMX - 定时器TIM输出PWM(Output Compare模式)
STM32H743 + CubeMX - 定时器TIM输出PWM(PWM Generation模式)
STM32H743 + CubeMX - 低功耗定时器LPTIM输出PWM波
STM32H743 + CubeMX - 定时器TIM输出PWM(PWM Generation模式)+ 中断
STM32H743 + CubeMX - 定时器TIM输出PWM(Out Compare模式) + 中断
STM32H743 + CubeMX - 定时器TIM发送非对称PWM(使用一个通道)
STM32H743 + CubeMX - TIM1发送PWM脉冲,TIM2计算PWM脉冲的总数(定时器同步计数实现)
STM32F407 + CubeMX - 使用TIM产生PWM信号
STM32F407 + CubeMX - 使用TIM计算编码器的脉冲总数,并计算脉冲方向
STM32F405 + CubeMX - 产生互补PWM波,中心对齐模式1 + PWM模式2(FOC专用)

SPI

STM32H743 + CubeMX - QSPI读写外部FLASH(W25Q128JVSQ)
STM32H743 + CubeMX - QSPI+DMA读取外部FLASH(W25Q128JVSQ)
STM32H743 + CubeMX - SPI与DRV8889串行通讯,驱动步进电机

FDCAN

STM32H743 + CubeMX - 学习FDCAN控制器上的TxFIFO
STM32H743 + CubeMX - 计算FDCAN2上的MessageRAMOffset(使两路FDCAN正常工作)
STM32H743 + CubeMX - 解决FDCAN控制器无法接收远程帧
STM32H743 + CubeMX - 两路FDCAN同时工作的终极方案(RTX5)
STM32H743 + CubeMX - 双路FDCAN同时工作的终极方案(裸机)
RTX5 | STM32H743 + CubeMX + RTX5 + 两路FDCAN模板

ADC

STM32H743 - 梳理ADC模数转换器在CubeMX上的配置
STM32H743 + CubeMX-使用ADC(16bit分辨率)模数转换器读取CPU的温度(串行方式)
STM32H743 + CubeMX-ADC(16bit分辨率)+ DMA采样三路模拟量(并行),没过采样
STM32H743 + CubeMX-ADC(16bit分辨率)+ DMA采样三路模拟量,硬件过采样器实现1024倍过采样

通讯协议

STM32H743 + CubeIDE - CanFestival实现两个CANopen Master同时独立运行
RTX5 | STM32H743 + CubeMX + RTX5 + 两路FDCAN驱动+CANopen协议

FLASH & RAM

STM32H743 + CubeIDE - 将变量定义到指定的内存
STM32H743 + CubeMX - 梳理MPU的设置
STM32H743 + Keil - 将变量定义到指定内存
STM32CubeIDE教程 - 查看FLASH与RAM细节
SMT32H743 + CubeMX - 配置MPU后,在Keil上的程序卡死

J-LINK RTT

SEGGER | 基于STM32F405 + Keil - RTT组件01 - 移植SEGGER RTT
SEGGER | 基于STM32F405 + Keil - RTT组件02 - RTT Viewer替代串口调试,实时打印调试log
SEGGER | 基于STM32F405 + Keil - RTT组件03 - RTT Viewer测试回环打印
SEGGER | 基于STM32F405 + Keil + rt_thread - RTT组件04 - RTT Viewer代替串口接入rt_thread console(终端)
SEGGER | 基于STM32F405 + Keil - RTT组件05 - J-Scope数据可视化,使用HSS方式
SEGGER | 基于STM32F405 + Keil - RTT组件06 - J-Scope数据可视化,使用RTT方式
SEGGER | 基于STM32F405 + Keil - RTT组件07 - J-Scope数据可视化,RTT方式 + DWT定时器时间戳

其他

STM32F407-学习STM32的SW与JTAG调试与下载电路的设计
STM32H743+CubeMX-移植ThreadX
STM32H743+Cube-Keil上移植RTX5实时系统
STM32CubeIDE教程-现场表达式切换数字进制表示
Keil | 解决Keil双击工程名无法打开.map的问题
Keil | 解决Keil与VScode配合使用时,代码与注释位置不一样的问题
Keil | 解决Keil与Source Insight4.0配合使用时,代码与注释位置(乱码)不一样的问题
Keil | 使用Register Windows测量函数的执行时间
STM32F407+CubeMX - 使用GPIO翻转+示波器测量函数的执行时间
bootloader | 基于STM32F407 - 使用STM32Cubeprogrammer的USB DFU进行固件烧写
bootloader | 基于STM32F407 - 使用STM32Cubeprogrammer的UART进行固件烧写
IAP-Bootloader | 基于STM32F407+STM32CubeMX - 通过按钮实现Bootloader程序与APP程序互相切换
STM32F407 | Embedded IDE01 - vscode搭建Embedded IDE开发环境(支持JLINK、STLINK、DAPLINK)
STM32F407 | Embedded IDE02 - 调试、断点、观察全局变量(支持JLINK、STLINK、DAPLINK)
STM32F103 | Embedded IDE03 - 使用OpenOCD在STM32F103项目时出现下载固件失败

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wallace Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值