个人课程学习笔记
b站up:铁头山羊
持续更新中......
前言
此笔记搭配原作者铁头山羊的视频一起食用最佳!!!
视频地址:[STM32 HAL库]
由于羊哥的视频太过详细,所以笔记多为截图形式,没有过多的文字叙述
安装开发环境
三种方式
- 方式1:STM32CubeIDE
- 方式2(推荐):CubeMX + Keil
- 方式3:STM32 VS插件 + VSCode
推荐方式的配置步骤
-
安装CubeMX
-
安装Keil5
-
为Keil安装许可证
-
安装DFP
-
安装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引脚具备多个不同的功能
复用功能重映射:将冲突的复用功能移动到备用引脚上
输出模式
推挽 | 开漏 | |
通用 | 通用推挽 | 通用开漏 |
复用 | 复用推挽 | 复用开漏 |
推挽
特点:一对MOS管交替导通,对外输出低电压或高电压
开漏
特点:PMOS保持关断,可以对外输出低电压或高阻抗
通用
复用
IO最大输出速度
LED接法
实例(点亮LED)
原理图
接线图
实物图
思路
代码
输入模式
输入悬空
特点:引脚随机接收到0和1
输入上拉
输入下拉
总结
按钮实验
原理图
接线图
实物图
思路
代码
串口
理论连接方式
串口的数据帧格式
校验位的使用方法
波特率
注意:收发双方应选择相同的波特率
UART与USART的区别
串口与电脑建立通讯
接线图
实物图
串口句柄
由CubeMX自动生成,在main.c文件中
单片机编程的数据类型
简单数据发送实验
代码
(uint8_t *)为数据类型强制转换
代码书写位置
注意事项:因为要使用strlen()函数计算字符串长度,因此要导入string.h头文件
串口软件接收数据
简单数据接收实验
配置
调试配置
串口配置
参数设置
板载LED配置
使用默认的高电压,低速
代码解释
串口初始化
代码
代码书写位置
串口软件发送数据
I2C
作用:连接更多的设备
基础介绍
逻辑线与
数据通信过程
阶段一:起始位
阶段二:寻址
阶段三:数据传输
数据四:停止位
完整过程
I2C总线模式
OLED显示屏
引脚介绍
模式选择
选择快速模式
接线图
实物图
数据手册
————链接预留位置————
从机地址
指令
代码(发送)
代码(读取)
根据屏幕状态点亮板载LED
时钟系统
手册
————链接预留位置————
简略图
组合逻辑电路与时序逻辑电路
单片机内部模块都含有记忆元件,属于时序逻辑电路,需要时钟信号,且频率不同
时钟树
分类
树根(高速与低速、内部与外部时钟)
树干
树枝与树叶
内核默认频率
验证实验
SPI
引脚介绍
MOSI
MISO
SCK
NSS
总览图
五个参数
波特率
比特位传输顺序
数据位长度
时钟的极性
时钟的相位
四种时钟模式
按钮实验
接线图
思路
pre = cur 状态没有改变
pre != cur 状态改变
①cur = 0 按键按下
②pre = 0 按键松开
代码
未消抖
切换LED亮灭的代码(为了与下文存储联系,采用下面这种写法)
为什么要消抖?
消抖代码
补充存储LED代码(看完FLASH看)
写入LED状态
读取LED状态
初始加载LED状态
FLASH模块
引脚介绍
接线图
实物图
注意事项
时钟模式支持模式0和模式3
容量分类
写入过程
写使能
扇区擦除
页编程
读取数据
手册
————链接————
SPI代码
主机向从机发送数据
因为是双向的,所以发出也会收到相同长度的数据,这里用不到,就没接收
主机从从机接收数据
因为双向,所以主机一开始会把接收缓冲区的数据发送给从机,为了避免意外,因此需要给接收缓冲区赋初值
主机发送并接收数据
中断
基本模型
定时器
自制延时函数实验
注意点:易变的值加上volatile关键字
例:volatile uint32_t nowTime = 0;
ADC
解决方案
未开启接口调试,重新烧录失败
使用bootloader清除程序