STM32HAL库笔记

个人课程学习笔记

b站up:铁头山羊

持续更新中......

前言

此笔记搭配原作者铁头山羊的视频一起食用最佳!!!

视频地址:[STM32 HAL库]

由于羊哥的视频太过详细,所以笔记多为截图形式,没有过多的文字叙述

安装开发环境

三种方式

  1. 方式1:STM32CubeIDE
  2. 方式2(推荐):CubeMX + Keil
  3. 方式3:STM32 VS插件 + VSCode

推荐方式的配置步骤

  1. 安装CubeMX

  2. 安装Keil5

  3. 为Keil安装许可证

  4. 安装DFP

  5. 安装ARMCC并测试

安装视频 

[STM32 HAL库]安装开发环境,最佳教程,没有之一~

安装包下载地址

百度网盘


GPIO

General Purpose Input/Output(通用目的的输入/输出)

关键词

特殊功能引脚与普通IO引脚

电源正极(Vcc、Vdd)、地(GND、Vss)

备用电源(VBAT)

复位(NRST)

启动模式选择(BOOT0)

普通IO引脚分组:

GPIOA(16个)        PA0~15

GPIOB(16个)        PB0~15

GPIOC(3个)          PC13~15

GPIOD(2个)          PD0、PD1

IO复用:同一个IO引脚具备多个不同的功能

复用功能重映射:将冲突的复用功能移动到备用引脚上

输出模式

推挽开漏
通用通用推挽通用开漏
复用复用推挽复用开漏

推挽

36ed0470b99d44fd947f0c79dd044c41.pngc104362f8fd74dcc8ea53d993983165b.png

特点:一对MOS管交替导通,对外输出低电压或高电压 

开漏

5989819e38664871a1ed97f4a8369978.png4e9bd4f6976a42c381fcf5197a8326af.png

特点:PMOS保持关断,可以对外输出低电压或高阻抗

通用

ee5e24fc138a4f8e924931987ef02171.png

复用

89243eee3f8d4c469afe2fb199d68b45.png

IO最大输出速度

ee3a32ed7a374ff79ba61c8f5736f0f5.png

219189da0b88488e876de894de1dc86d.png

LED接法

1e8f4d8b66024e1bbaa9015df0a944d0.png

实例(点亮LED)

原理图

515dbaff481c4c87a9ccbcf4ef23635a.png

接线图

7e4b3dcb11bd4d7fbcf266ed0ac0be74.png

实物图

da668393a0234ed5bdef79872ab34379.png

思路

f8e4d496830d48afbe79fc0027e01d1b.png

代码

14fccd1597004d19829b559d49f02467.png

输入模式 

6e6fc71ccbfd4500a0a2abe36a029e5f.png

输入悬空 

特点:引脚随机接收到0和1

682982de722b45459aefbef044c5eceb.png

输入上拉 

94f07e44db9349b092b397347d0063f4.png

输入下拉 

636ae2f71e6b4ec8816faa3a3e33c106.png

总结

3ac767148619431bbf428ea97f9880cc.png

按钮实验

原理图

c867d39a98a24aa2a94dd5ecfb178701.png

接线图 

69030423d1044b3abed8067df905fc84.png

实物图 

f9d2fee9f7b147c3a0dd463b62c3366c.png

思路

e107fcb6b999440daa00915f32c4cf57.png

代码 

4adff8b2690d4e1290fd89e5724b751f.png


串口

理论连接方式

75d020161ac5491fb39f628a00c83247.png

串口的数据帧格式 

6730344f67f94a33b602ba822dcd20bd.png

校验位的使用方法 

bb1aa0c2f0fe4de1b47014f99514dc1b.png

波特率 

3d94745625794cecbd347f0fffe0f221.png注意:收发双方应选择相同的波特率 

 UART与USART的区别b6aa5293f89f4d0b90b71e16fc3a7210.png

串口与电脑建立通讯

3dfce292361f439fb3c7cc29ef3a54f3.png

接线图

d229fed27f234d90b32016b182be6119.png

实物图

9203c817d98a4f32abed331f0c29c165.png 串口句柄

由CubeMX自动生成,在main.c文件中

032ac1fcfa74400fabdbbc548615e1c8.png

b3d3a80bccf14223a83461eb58d20ac2.png

 单片机编程的数据类型

df00648563ac43ebba9929c5a9561843.png

简单数据发送实验 

代码

5b309d081d084695b523f254afbfa176.png

(uint8_t *)为数据类型强制转换 

代码书写位置

3dc75499b7854f09b3f44c10dce3c02c.png

注意事项:因为要使用strlen()函数计算字符串长度,因此要导入string.h头文件

06c09e34c2be41f9bffc97b77c41823e.png 串口软件接收数据

5da7f102345e48629f5d5fb553da153d.png

简单数据接收实验 

配置

调试配置

4f73b4e26c904e12b1bf08dc96b693c0.png

串口配置

6cbcb0868ab24bc0903e7fe6c3582bfb.png 参数设置

fbab7725c221498e9561044d6c712c24.png

 板载LED配置

087357d1ace84e148d278ece297744c9.png

 使用默认的高电压,低速

011278a23ddb4fc2a6af1008c2066ee2.png 代码解释

串口初始化

e3fd3f3367a5469ca50df09e8e9c45e9.png

代码

8b739e5a33fb48a2b8ad9252392ad015.png

79e9a098453b46f7bec699cdd679a943.png 代码书写位置

733882cabc46427db68820635eb2bece.png

串口软件发送数据 

ab3f1094fc054217a4cd8e7da528914c.png


I2C

作用:连接更多的设备

基础介绍

a4df890663c64064a101692a3309c3c6.png

逻辑线与

c971262d1a354fc1aff6209fa8a1bbf2.png

数据通信过程

阶段一:起始位

14ca79e99b1d46e6bf9f33d4900895de.png


阶段二:寻址

ff6f8a7c824645b4a6d2233e3411a3ad.png

e8c32ad851564073b35375c73ce1b481.png

阶段三:数据传输

b4ec62d5cd7041908662bf6fb312914a.png

数据四:停止位 

909c39efe1f54b848dc823886b22262f.png

完整过程

56f89eca824c43c09598f3960bb7e9bb.png

I2C总线模式

c938b9bc72bb4b098a8ddf704e80ce5a.png

ac546710bb344fec9300802248fb046c.pngOLED显示屏 

引脚介绍 

 f486487e750442f5985c5391fabee71d.png

 模式选择

选择快速模式

6a28ee2ef38f42578e9bcfb8f0e025f1.png

接线图

78307cac926c4b16bcb31e463409969e.png实物图 

 c070f9b104c04950a1a317ee4e1e5962.png

数据手册

————链接预留位置————

从机地址

2501d3a91ebb4741abd6d61ac9160f7c.png

70e5e7ab8965435eb7519a386df80770.png

指令 

3b6683c5e22140af8126cbc2c95d8678.png

代码(发送)

3b16cb7dbd784d0f85a0bd7bbf9e4450.png

代码(读取) 

da6d59fa68194c54b720dd31f96f81f4.png

根据屏幕状态点亮板载LED 

fe26ccd6c2554a279bde9e8617ca11ca.png

时钟系统

手册

020df2809aa64ed0bdb35a9258c7b65d.png

7cd8c69c5357427fb18598fb44ac41fe.png————链接预留位置———— 

简略图

9a125851672c46c794f5c56e10dba895.png

组合逻辑电路与时序逻辑电路

5a5175af8f3b46de87529db55a8982bd.png 单片机内部模块都含有记忆元件,属于时序逻辑电路,需要时钟信号,且频率不同

86a90ff7c962473d9f5602cd3621a96e.png

时钟树

分类

0fa9f24d4e9b464dad13741d397662cc.png

树根(高速与低速、内部与外部时钟)

2e6ce81dff214d60a7a9fae8c3b7ae26.png

2e25cc7f6b42476b960d471874d69b8e.png

树干

3c87865f9b5346768b942aec725b9b5e.png

f8ba6576fa504e8b8575c41e1e080cff.png

树枝与树叶

e936f8b47b5b42bfa0b691e56f62dc2b.png

 内核默认频率

50ed96bdc462461f9338e599a3491b99.png

验证实验

b620ef964b284eeb91cb3d71c5aafd0b.png


SPI

1263d7f52557443ab7c461cffe6a64bb.png

引脚介绍 

MOSI

783ec6c7bf7249f3bb488c5ef92f43a4.png

MISO

ec349d85f0414229beb84fead0a3676d.pngSCK

ef72d02047fc40f592140ab36de67fe1.pngNSS

badbdf0dcd3646bf80b1a9aa2de09861.png 总览图

 931e9656ccfb4307b156f79a4fd311d4.png

 五个参数

波特率

fb0b8d62020549ada62d75d70c54badd.png

9fac50b13f304bc4be311ba49898bfef.png

比特位传输顺序

8e40f58008414be69eadfa85c496fcb4.png

数据位长度

f534f253470140faaf7bd36bf42014b8.png

时钟的极性

7ee2eb29734742d9b14d8c7013f0c4d0.png

时钟的相位

c48e8ef565fc4c7b8f63063e84d741b7.png

3f9daedc00294af1b7a435f931fafb96.png四种时钟模式

ba87a74e95e34fb4a6d207268e2497a5.png

按钮实验 

接线图

6a877ec65392457a9376ad8adeedc6ff.png

思路

pre = cur 状态没有改变

104ec3e6f5034349a87fc156324d9a19.png pre != cur 状态改变

 ①cur = 0 按键按下2ae47097316c4433b33285464c71d33f.png

②pre = 0 按键松开

7f407683e3954045a606dc904e2468ef.png代码

未消抖

896d89ed4bc3491583a000e2b8866a59.png

 切换LED亮灭的代码(为了与下文存储联系,采用下面这种写法)

44c750c59a57435589d81a8dc55cd53b.png

为什么要消抖?

ec09af0685c24b72ae56d67cbbb5bb62.png

消抖代码

54d39b306226456bac8d424c3b548904.png

补充存储LED代码(看完FLASH看)

写入LED状态

23e7b1bbbe3e4bf28cdb111cb9d5f49f.png

b8319903e9e547a1840ad0a764232a1a.png

读取LED状态 

ac4e2c58dfc64474bd13fb52ba799e71.png

 858eb2f857c54e6e87a77b761702496d.png

初始加载LED状态 

3e955bcc7f6c48ad81604108418d31a7.png283c7830aff34d409cb0f787e29bc90d.png 

 FLASH模块

引脚介绍

15b7b4bc8f4444e1b3da33f08b2c25cb.png 接线图

d6eccd2f0c4a44d283cea038bf857b74.png

实物图 

c9c2ec9388e847a0b2ee1e1be936c3ac.png注意事项

时钟模式支持模式0和模式3 

1b0e30cb606f420682e71a7a6f0b9525.png a249bf5b8fe64781ab3b17e7fd4494f2.png

 容量分类

c32358c586a14b4e85c949130231ec43.png

写入过程

cc21f4aa10a84287a04c6d27a4383196.png0d3dad91d1e04a188a9d04a9bf1409b1.pngbedc52ed0a4a4dfd8493b18b0facc41e.png

写使能 

4ea72e0490804d51935112ea252d935e.png

ccb85d00ad124ba78f06b774bc6a0cf7.png

扇区擦除 

85c5d2a6ace44c3ea985098815a881e8.png

7970154e32554f1f88bbf1d3cb0848e6.png

页编程 

0e7c2a1325c5409eb15ed58bb2ab54f8.png

cc7a5f6bd52b4f499276e34a0e1d4d5a.png

读取数据

9f32993d7ab94cae84c165f722cbf2f7.png 7936f5ed67b94595a20470a06216a5b3.png

手册

————链接————

SPI代码

主机向从机发送数据

因为是双向的,所以发出也会收到相同长度的数据,这里用不到,就没接收

59ce47e01f4944299d0b64fe6ae63fda.png

 主机从从机接收数据

因为双向,所以主机一开始会把接收缓冲区的数据发送给从机,为了避免意外,因此需要给接收缓冲区赋初值

6ef8e757485c4dcdaf265340584c8d3b.png

 主机发送并接收数据

cc0de69d34d140b2b1f188c2a4d984aa.png


中断

基本模型

d5dc7d849250490e9ee881df3161d485.png


定时器

自制延时函数实验 

 注意点:易变的值加上volatile关键字

例:volatile uint32_t nowTime = 0;


ADC


解决方案

未开启接口调试,重新烧录失败

使用bootloader清除程序


注意事项

代码书写

f857f7ca8568481ab693e7cb94fcca2f.png

<think>好的,我需要帮用户找到铁头山羊STM32笔记相关的代码示例或下载资源。首先,我应该回忆一下用户提供的引用内容,看看是否有相关的线索。 用户提到的引用[1]是关于STM32CubeMX教程和IIC读取AT24C02的HAL代码,这可能与铁头山羊的内容相关,因为很多STM32教程会覆盖类似的外设操作。引用[2]是正点原子的HAL开发视频,引用[3]和[4]涉及错误处理和FLASH地址定义,但没直接提到铁头山羊铁头山羊可能是一个比较小众的昵称或特定作者的笔记,我需要确认是否有公开的资源。常见的平台如优快云、GitHub、B站或者电子论坛可能会有相关的内容。用户提到的杨桃电子笔记在引用[4]中出现,可能与铁头山羊有关联,或者是同一作者的不同命名? 接下来,我应该建议用户搜索优快云、GitHub、B站等平台,使用准确的关键词组合,比如“铁头山羊 STM32 笔记 代码”。同时,检查是否有官方提供的下载链接,或者联系作者获取资源。另外,参考已有的STM32代码示例,如引用[1]中的I2C代码,也能帮助用户进行开发。 需要提醒用户注意代码的兼容性和验证,确保与他们的硬件匹配。如果找不到具体资源,建议他们参考其他可靠的STM32教程,如正点原子或野火的资料,这些通常有详细的代码示例和文档支持。</think>关于寻找“铁头山羊STM32笔记”相关的代码示例或下载资源,以下是分步解答和建议: --- ### **步骤1:确认资源名称和来源** - **名称核对**:请确认“铁头山羊”是否为特定作者或教程的昵称。例如,引用[4]中提到的“杨桃电子笔记”可能与“铁头山羊”相关,或是同一作者的不同命名。 - **来源平台**:STM32学习资料常见于以下平台: - **优快云博客**(如引用[1]中的HAL教程)[^1] - **Bilibili视频教程**(如引用[2]中正点原子的视频)[^2] - **GitHub/Gitee代码仓** - **电子论坛**(如电子工程世界、STM32中文社区) --- ### **步骤2:针对性搜索方法** 1. **平台搜索**: - 在优快云中搜索:`site:youkuaiyun.com 铁头山羊 STM32 笔记 代码` - 在B站搜索:`铁头山羊 STM32 教程` - 在GitHub搜索:`TieTouShanYang STM32` 或 `铁头山羊 STM32` 2. **验证作者身份**: - 如果“铁头山羊”是个人博主,检查其是否在多个平台同步更新(如个人博客、GitHub)。 --- ### **步骤3:替代方案与参考代码** 若无法找到直接资源,可参考以下相似教程的代码实现: 1. **I2C读写AT24C02**(引用[1]的代码片段): ```c // HALI2C读取AT24C02示例 HAL_I2C_Mem_Read(&hi2c1, 0xA0, 0x00, I2C_MEMADD_SIZE_8BIT, buffer, 1, 100); ``` 2. **FLASH操作**(引用[4]的地址定义): ```c #define FLASH_START_ADDR 0x0801f000 // STM32 FLASH写入地址定义 HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr, data); ``` [^4] --- ### **步骤4:注意事项** 1. **代码兼容性**:确保代码与你的STM32型号(如F1/F4系列)及HAL版本匹配。 2. **报错处理**:若遇到类似`Error:C9555E`的编译错误,检查工程配置和芯片型号是否一致[^3]。 --- ### **步骤5:主动联系作者** - 若在优快云/B站等平台找到相关文章或视频,可通过私信或评论区联系作者索取代码。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值