当前位置: 首页 > news >正文

铁头山羊视stm32-HAL库

目录

一、所有干货

1.CubeMX 在 System Core → SYS → Debug 里给你几个模式:

2.当没有选SWD,即选择了NO debug该怎么烧录程序

3.debug的时候,关掉代码优化

4.cubeMX自动生成的代码里面的注释

二、GPIO

1.GPIO编程接口

2.GPIO两灯交替点亮实验

3.GPIO按钮按下实现板载灯亮

三、UART

1.USART和UART

2.串口的选择

3.串口的重要参数

4.串口的编程接口

5.串口的简单发送数据实验

6.串口的简单接收数据实验

四、I2C

1.I2C的cubeMX配置

2.I2C的编程接口

3.OLED的芯片-SSD1306

(1)芯片手册

(2)芯片(OLED)的地址

(3)根据手册得到的使得OLED常亮的指令

4.I2C实验:点亮OLED屏幕

五、时钟

1.时钟树的介绍

2.时钟树属于时序逻辑电路

(1)时序逻辑电路

(2)因为都是时序电路,所以需要时钟信号

3.怎么给每个外设分配不同的时钟

4.时钟树呈上启下关键节点:SYS CLK

5.时钟树在cubeMX的配置

(1)首先开启SYS调试模式

(2)其他额外的值得注意的时钟传输的节点

6.开启默认情况下的8MHz

(1)默认情况下,内核的执行频率是8MHz

(2)测试8MHz

7.开启每个片上外设的时钟的最大频率

(1)首先配置时钟

(2)之后配置时钟参数

(3)配置最大时钟频率

六、SPI

1.SPI的波特率选取的原则

2.SPI的HAL的编程接口

  3.HAL库实现寄存器的点灯实验

(1)先实现按下松开的时候实现亮灯/灭灯

(2)注意按钮的消抖

(3)在cubeMX配置SPI控制flash

》首先在cubeMX配置SPI

(4)向Falsh写数据,和读取数据(本质都是给Flash发  指令)

》1.写数据

》写使能

》扇区擦除

》页面编程

》2.读数据

(5)在程序最开始判断Flash的状态

七、中断

1.中断的注意点

2.中断的HAL编程接口

3.中断HAL实验:实现边闪灯边读取值

(1)首先使用cubeMX配置PC13实现灯的闪烁

(2)之后使用cubeMX配置USART,注意配置中断的开关,因为就一个中断所以不要配置优先级,默认的就行

(3)使用编程接口实现中断

八、定时器

1.定时器的类型

2.HAL编程接口

(1)时基单元编程接口

(2)输出比较编程接口

(3)输入捕获编程接口

(4)从模式控制器编程接口

3.定时器的cubeMX配置

4.使用定时器的时基单元实现:自制延迟函数以及获取当前时间函数

(1)首先自制延迟函数

(2)配置时基单元

(3)使用cubeMX配置TIM的时基单元和中断

(4)main方法调用中断和延迟函数

(5)验证延迟函数

5.使用定时器的输出比较实现:呼吸灯

(1)首先使用cubeMX配置时基单元

(2)使用cubeMX配置输出比较

(3)呼吸灯实现

6.使用定时器的输入捕获实现:HC-SR04传感器的超声波测距实验

(1)超声波测距原理

(2)cubeMX配置

(3)对生成的代码进行完善

(4)注意HC-SR04声波传达最长时间和分辨率选择

7.定时器的从模式控制器实现:测试输入的PWM信号参数

(1)cubeMX配置

(2)实验的原理和实现

(3)格式化输出

8.【新增】定时器实验:从模式控制器的编码器模式的输入输出

(1)AB编码器

》旋转这个编码器,AB的触点会接触 / 断触 金属片。

》也可以充当按钮

》当金属片旋转,

》三种编码器模式

(2)AB编码器的核心

(3)实验原理

(4)值得关键注意的地方:

(5)实验执行

九、ADC

1.最理想情况下,ADC每秒最多执行多少次转换

2.ADC编程接口

3.ADC标志位

4.ADC实验:使用光敏传感器实现强弱光导致的板载灯的亮灭

(1)实验思路

(2)采样时间计算

(3)cubeMX配置 

(4)实现

5.ADC实验:使用光敏传感器和VOFA实现连续电压的显示

(1)使用定时器设置采样的时间间隔,然后VOFA实现将多点连起来

(2)配置cubeMX

》定时器的ccx事件来源:

》定时器的TRGO

(3)实现


一、所有干货

1.CubeMX 在 System Core → SYS → Debug 里给你几个模式:

1. No Debug

  • 意思是:关闭调试功能,调试引脚都释放出来当普通 GPIO 用。

  • 缺点:你就不能用 SWD/JTAG 进行调试或下载程序了,只能通过串口/ISP/Bootloader 烧录。

  • 一般只有在 引脚紧张、产品量产 且不再调试时才会这样配置。

2. Serial Wire (SWD) ⭐常用

  • 2 根信号线(SWDIO + SWCLK)+ GND + VCC 进行调试。

  • 占用引脚少,但功能齐全(下载、调试、寄存器查看、单步运行等)。

  • 这是 STM32 默认最推荐的调试方式,大部分开发板(比如 STM32F4/F1/F7/Nucleo/Discovery)都走 SWD。

  • 为什么推荐?

    • 节省引脚(只要 2 根),GPIO 更宽裕

    • 支持全速调试

    • Keil、CubeIDE、ST-Link、J-Link 都支持

3. JTAG (4 pins / 5 pins)

  • JTAG 4 pins:TCK、TMS、TDI、TDO

  • JTAG 5 pins:TCK、TMS、TDI、TDO、nTRST

  • JTAG 协议历史更久,功能比 SWD多一些(比如支持级联多个芯片调试)。

  • 缺点是:要占用 至少 4 个 GPIO,对小封装芯片来说太浪费。

  • 现在一般只在需要链路调试、多核/多器件调试时才用。

4. Trace Asynchronous Sw (SWO Trace)

  • 在 SWD 的基础上,额外开一个 单根 SWO 引脚,用来输出调试追踪信息。

  • 主要用途:实时 printf、事件跟踪、性能分析(ITM / SWV Trace)。

  • 如果你想在 Keil 或 CubeIDE 里看到 实时调试打印、周期性变量值,就可以选这个。

  • 占用引脚比 SWD 多 1 根。

📌 总结对比表

选项

占用引脚

功能

使用场景

No Debug

0

不能调试

量产或引脚极度紧张

Serial Wire (SWD)

2

下载 + 调试,主流方式

默认推荐,开发调试

JTAG (4/5 pins)

4 / 5

下载 + 调试,多芯片调试

需要 JTAG 链路时

Trace Asynchronous Sw

3

SWD + Trace 实时打印

需要在线性能分析/调试时

2.当没有选SWD,即选择了NO debug该怎么烧录程序

方法:使用bootloader

地址:[STM32 HAL库]使用bootloader清除程序_哔哩哔哩_bilibili

3.debug的时候,关掉代码优化

Keil5 里用 debug 调试代码 时,通常建议把 代码优化关掉,主要原因是:


🔹1. 优化会改变代码结构

编译器优化(O1/O2/O3 等)会:

  • 删除“看似无用”的代码;

  • 把变量放到寄存器里,不再分配内存;

  • 合并/重排代码逻辑,甚至把多行代码压缩成一条指令。

结果就是:
👉 你在 源码单步调试 时,代码执行顺序和你看到的 C 语言顺序对不上,断点可能跳来跳去。

🔹2. 变量可能“消失”或不可见

在开启优化后:

  • 一些局部变量可能被优化掉,调试窗口里看不到;

  • 或者同一个变量值随时在寄存器和内存间切换,导致 观察到的值不稳定

🔹3. 单步调试不准确

当你在 逐行 F11/F10 单步时:

  • 编译器可能把多行合并成一条汇编指令 → 你点一次却跳过几行;

  • 或者某些 if/for 的代码块被优化展开,导致调试时 源代码与汇编不同步

🔹4. 便于学习和排错

关掉优化后:

  • 每一行 C 代码几乎都会对应到一条或几条汇编,源码和执行流一致

  • 变量会完整保留在内存里,方便 观察/修改变量值

  • 更容易定位问题,尤其是新手学习或者调试硬件外设时。

✅总结

开发和调试阶段:建议关闭优化,保证调试行为与源码一致。
正式发布/下载固件阶段:再开启合适的优化等级(比如 O2/O3),以减小代码体积、提高运行效率。

4.cubeMX自动生成的代码里面的注释

首先:注意在写代码的时候是要写在这些注释里面的(CubeMX 再次生成代码时,不会覆盖里面的内容),写在外面下次生成代码的时候会覆盖消失。

二、GPIO

1.GPIO编程接口

2.GPIO两灯交替点亮实验

3.GPIO按钮按下实现板载灯亮

核心:读取输入引脚的值  因为输入引脚的值表示按钮的状态(是按下还是断开的)

输入引脚设置为输入上拉,按钮没按默认山上拉的高电压,按钮按下表示低电压

三、UART

1.USART和UART

2.串口的选择

3.串口的重要参数

串口的句柄,可以由代码生成的时候自动生成的

4.串口的编程接口

5.串口的简单发送数据实验

6.串口的简单接收数据实验

四、I2C

1.I2C的cubeMX配置

注意。标准模式没有占空比

》为什么 STM32的I2C 设计了新的占空比的模式?

因为 I²C 标准并不是直接规定“占空比”,而是规定 tLOW ≥ 某值,tHIGH ≥ 某值
在硬件里实现的时候,更方便用 低/高时间的比例去配置。

所以 CubeMX 的写法只是“工程实现上的习惯”,并不是新的占空比定义。


总结一句话

  • 常规定义:占空比 = 高电平时间 ÷ 周期

  • STM32 CubeMX:用 Ratio = 低/高 表示,本质上只是另一种写法,两者可以互相转换。

这里的占空比有点特殊。是直接使用低电压/高电压来得到占空比的

2.I2C的编程接口

3.OLED的芯片-SSD1306

(1)芯片手册

(2)芯片(OLED)的地址

(3)根据手册得到的使得OLED常亮的指令

指令依次是:命令流、使能电荷泵、打开屏幕开关、屏幕全亮

4.I2C实验:点亮OLED屏幕

五、时钟

1.时钟树的介绍

》而此图主要一个功能就是让你知道各个总线的最大频率

2.时钟树属于时序逻辑电路

(1)时序逻辑电路

特性 组合逻辑电路 时序逻辑电路
输出依赖 当前输入 当前输入 + 历史状态
记忆功能
时钟信号 不需要 需要(大多数情况)
示例 加法器、解码器 触发器、计数器、寄存器
电路 功能 逻辑类别 原因
加法器 二进制相加 组合逻辑 输出只依赖输入
解码器 二进制转独热码 组合逻辑 输出只依赖输入
触发器 存储1 bit 时序逻辑 有记忆,需要时钟
寄存器 存储多位 时序逻辑 由触发器构成,有记忆
计数器 自动计数 时序逻辑 当前状态依赖历史

(2)因为都是时序电路,所以需要时钟信号

3.怎么给每个外设分配不同的时钟

时钟树来分配,左边大树为大部分外设分配时钟

4.时钟树呈上启下关键节点:SYS CLK

5.时钟树在cubeMX的配置

(1)首先开启SYS调试模式

(2)其他额外的值得注意的时钟传输的节点

最右边上面的是单片机的CoreTex内核,他直接控制单片机的频率或代码执行速度。

其频率是由AHB直接传给他的

http://www.dtcms.com/a/389281.html

相关文章:

  • iOS 26 帧率检测实战攻略 如何监控FPS、GPU渲染、Core Anima
  • AWS Lightsail vs 阿里云轻量:企业上云服务器选型深度对比
  • stm32中的位带操作的使用意义
  • Qt QStackedBarSeries详解
  • WebSocket Secure(WSS)在Django项目中的使用
  • RocketMQ 部署;与Golang服务交互
  • 南京某高校校园外卖点餐系统_django
  • 类的基础语法(笔记补充)
  • pycharm 连git 传文件到GitHub
  • 11 简答题-伪码转为NS图 PAD图
  • Java 中如何利用 CAS 实现原子操作?以AtomicInteger 为例
  • Custom SRP - Point And Spot Shadows
  • 无障碍前端组件实践(上):基础交互组件与色彩无障碍
  • 矩阵的导数运算
  • 微算法科技(NASDAQ:MLGO)多注意力循环网络:MARN技术如何让机器理解语言、手势与语音的微妙交互
  • 混合架构(SpringCloud+Dubbo)的整合方案与适用场景(二)
  • centos的hadoop的允许hdfs命令覆盖linux系统目录文件或生成副本
  • 跨平台开发框架全景分析:Flutter、RN、KMM 与腾讯 Kuikly 谁更值得选择?
  • 燃料电池负载均衡测试:解锁高效供能密码
  • ip地址在哪里查看?怎样查询自己电脑ip?如何找到使用内网ip,判断看本地有无公网ip?内网ip怎么给外网访问?
  • 设计模式-模板方法模式详解
  • Red Hat 8.5.0-18 部署ceph文件系统
  • 将ceph文件存储挂载给k8s使用
  • ENVI系列教程(七)——自定义 RPC 文件图像正射校正
  • 「Java EE开发指南」如何用MyEclipse开发Java EE企业应用程序?(二)
  • Linux -- 传输层协议UDP
  • 使用Android Studio中自带的手机投屏功能
  • LeetCode:19.螺旋矩阵
  • Windows 命令行:在 cd 命令中使用绝对路径与相对路径
  • 图片修改尺寸