STM32智慧垃圾桶
课程目标:从零开始,纯手敲标准库代码,10天掌握嵌入式开发核心技能,完成具有传感器感知、PWM控制、串口通信的智能垃圾桶项目。

day01 环境安装
1.1 keil软件安装与破解
Keil MDK工具
是一款软件 MDK 嵌入式微控制器的集成开发环境
主要面向C,代码编辑、编译、调试debug、烧录的工具
ARM IP
小杨哥、东方甄选、交个朋友、与辉同心 IP,切片
ARM 提供所有手机芯片的 (内核+指令集) IP授权
ARM
A系列 手机、平板 多任务
R系列 实时性要求高、飞机、汽车
M系列 微控制器 能力比较均衡 几十MHZ到几百MHZ 芯片能力比较均衡 功耗不高
1.2 keil、pack
等一下说
软件 keil、pack

5090 4070
1.3 STM32F407ZET6
ST 意法半导体
M cortex-M(ARM)内核 微控制器
32 32位处理器
F 通用系列
407 高性能
Z 144引脚 pin
E 512Kb flash 硬盘
T 封装方式
6 工作温度

The STM32F4 family incorporates high-speed embedded memories and an extensive range of enhanced I/Os and peripherals connected to two APB buses, three AHB buses and a 32-bit multi-AHB bus matrix.
- 64-Kbyte of CCM (core coupled memory) data RAM
- LCD parallel interface, 8080/6800 modes
- Timer with quadrature (incremental) encoder input
- 5 V-tolerant I/Os
- Parallel camera interface
- True random number generator
- RTC: subsecond accuracy, hardware calendar
- 96-bit unique ID
1.4 快速点灯

day02 各种点灯
2.1 review
国内 温故而知新
国外 费曼学习法、刻意练习、第一性原理
1 什么是STM32?
是一系列 MCU的统称
ST 意法半导体公司
M 微控制器
32 32位的处理器
基于ARM cortex-M 高性能、低功耗
2 单片机51单片机 STM32单片机有什么区别**
51单片机 8位MCU为主 8051 主要做一些简单的控制设备 洗衣机、微波炉、小家电
STM32 以32位的MCU为主,相对复杂的应用场景,点击控制系统、物联网设备、智能家居设备
3 ARM提供什么东西给厂家
MCU 微控制器 微控制芯片
ARM IP公司
国内 IP 商标授权
服装 恒源祥、温兆伦、南极人、浪莎袜业
小家电 飞利浦、夏新、波导、爱国者
飞利浦个护和医疗 剃须刀、医疗
4 ARM提供的是芯片IP授权 IP指的是 技术授权
IP 里面有的内容
Cortex内核 【cortex是内核的架构体系】 【内部的核心电路】【精简指令集 RISC】 RISC-V
芯片设计公司 ST公司
购买ARMIP授权才能使用 Cortex内核+精简指令集 RISC 进行芯片设计 、流片、生产、销售
ST 意法、海思、高通、联发科
高性能手机 Soc 不让制造 和 显示芯片 GPU 英伟达 不让购买
GPU 训练芯片 推理芯片
ARM 产品线
A系列 apply应用 多任务 手机、平板 多任务的场景
R系统 realtime 实时通信 航空飞行器、飞机、汽车
M系列 microcontrallor 微控制器 白色家电、智慧家电、智能家居、物联网、工业互联、工业控制类、智能制造、低功耗、 性价比 意法 ST
5 有哪些厂家32位 的 单片机MCU CPU GPU
MCU芯片厂家 ST 意法半导体、TI德州仪器 、恩智浦、瑞芯微、乐鑫
CPU AMD、INTEL
GPU 英伟达、AMD、华为ascend
SOC 手机芯片 集成度更高 高通、联发科、小米、oppo、apple
6 什么是嵌入式设备
嵌入式设备 是一个硬件计算设备
所有非X86架构 【笔记本、台式机、服务器】的设备都是我们的嵌入式设备
2.2 快速点灯
1 查看原理图
查看引脚、led电路图
2 查看手册里面的example示例代码
3 KEIL编译和烧录
2.3 =>函数封装
代码功能====>函数封装
day03 从0到1实现点灯
1 review
手册快速点灯 代码功能
函数 封装 使用函数包装起来,实现代码的复用;delay
2 从0到1 手动搭建工程
2.1 创建工程模板
- 创建工程文件夹 新建文夹
- 创建工程目录 配置项目
- 配置工程 魔法棒

2.2 点灯
- 原理图
- 引脚 PG14 13 6 11
- 电路原理 MCU 输出 高电平小灯点亮
- 代码编辑
- 标准库 的外设 GPIO 去找芯片的驱动
- 函数 封装
- 把需要复用的代码 使用自定义函数包装起来
- 提高了代码的复用性
- 代码 封装
- 把函数剪出去
- 项目更模块化了
- 提高代码的可一移植性

GPIO8种工作模式
输出 4
- 推挽输出
- 开漏输出
- 复用推挽
- 复用开漏
输入4
- 上拉输入
- 下拉输入
- 浮空输入
- 模拟输入
day04 按键
1 review

- 选择 MCU 进行keil 编译器 的 环境
- 【应用层】 开发出烟雾报警器,实现声光报警
- 【外设层、驱动层】 某个外设 LED、KEY、BEEP
- 【芯片层】 ST、NXP 厂家提供的片上的外设驱动 GPIO RCC MISC IIC
- 【架构层】 ARM接口 cortex芯片架构
- 代码功能
- 从0开始点灯
- 创建工程文件夹【Project工程、Drives外设驱动、Net网络 wifi 蓝牙、User工程的入口文件 main.c】
- 配置工程目录 工程左边的目录树 对应工程文件夹进行映射
- 配置工程 魔法棒 【编译器、预定义宏、头文件的引入路径、jlink下载器烧录】
- 通过ST标准库 GPIO.c RCC.c MISC.c 这些片上驱动 实现开发板上面硬件的驱动
- 实现功能、烧录、验证
- 函数 封装
- 就是将会重复用到的内容进行函数封装
- 函数
- 概念,实现一定功能的代码段
- 作用,可以重复被调用
- 三要素,功能、参数、返回值 自定义函数、使用函数、系统函数
- 自定义函数
- 【功能brief】
- 【参数param】
- 【返回值retval】
- 先定义后使用
- 代码 封装 【工程封装】
- 将实现固定功能或者特定外设的一系列代码放到一个.c文件中
- .c 放函数 写功能
- .h
- 解决和处理.c 问题
- // 1 引入头文件
- // 2 宏定义 提高代码的复用性
- // 3 函数声明 变量的声明
2 代码封装
3 实现按键的功能
3.1 外设
电路原理+引脚
按键按下,就是MCU检测到低电平
KEY1-KEY4 PG2 3 4 5
3.2 按键小灯亮
//按键按下 小灯亮起
//if(检测到按键是低电平){
// 让1灯亮起
//}
3.3 按键的消抖
机械按键 在按下 拨片接触触点 机械形变,所以会有一段时间的波动
1 硬件 物理 换一个按键 电容开关
2 软件

day05 中断
1 review
1 代码功能==》2 函数 封装 ==》3 代码封装
代码 封装
提高了代码的复用性
- 创建.c .h
- .c 放函数 实现功能
- .h 解决.c的报错
- 引入头文件
- 宏定义
- 函数、变量的声明
按键功能
1 查看对应的原理图
电路原理+引脚+外设\接口 GPIO、I2C
按键没有按下的时候 高电平
按键按下 低电平
引脚 PG2 3 4 5
2 实现代码功能=》 函数 封装 =》代码封装
厂家库文件 接口GPIO.c
1 引脚初始化
2 if 按键按下
小灯亮起、小灯切换高低电平
3 编译、烧录、测试
按键消抖
1 硬件消抖 换成电容开关
2 软件消抖 金属形变 会导致 抖动 ,所以我们处理抖动的方式 就是等一等
if 按下:
等一等 过滤按下的抖动
if 按下:
while 按下;
等一等 过滤松开的抖动
while 按下;
2 密码开锁
# 验证密码
while(1){
输入密码
使用数组 存4个数的密码
下标
验证密码
满4位 开启验证
密码正确
执行后面的内容
双闪
密码错误
继续执行密码验证
常量2秒
}
# 按键控制灯
按键3 ==》3灯
按键4 ==》4灯
3 中断
时钟
1 是不是就是来计数的,
2 4个时钟 系统时钟 MCU的频率 F407 168MHZ
3 HSE HSI LSE LSI
4 HSE ==>[锁相环] 系统时钟 168MHZ ==> [分频] APB1 42MHZ APB2 84MHZ
5 给那些外设提供时钟频率
因为这些外设的使用需要依靠时钟频率
中断概念
1 中断是一个过程
2 中断的过程有4部
2.1 中断请求
2.2 中断响应
2.3 中断处理
2.4 中断返回

3 中断是系统预定义好的
MCU写死到芯片的基因里面的
4 配置 函数 的时候
4.1 什么情况下触发中断
4.2 中断发生之后 我们要做什么 中断处理 函数
4.3 中断的处理函数 不需要声明、不需要传递参数、不需要调用
暂时无法在飞书文档外展示此内容

1 时钟 配置时钟
2 中断的配置
2.1 什么情况下触发中断呢
KEY1 按下触发中断 PG2
2.2 4步
day06 中断和串口
1 review
嵌入式开发
芯片之外的 我们都叫片上外设
基于这些外设驱动做出来的功能 比如 做一个 烟雾的声光报警器 采集烟雾==》蜂鸣器响+小灯双闪
外设的驱动 需要我们去开发 LED灯、温湿度传感器、光敏传感器 设备的驱动
芯片驱动层 ST意法 NXP恩智浦 TI德州仪器 ESP乐鑫
架构层 CMSIS软件
STM32开发
STM32 意法半导体公司基于Cortex-M系列内核架构研发出来的32位的嵌入式设备【微控制器】的芯片
ST 意法
M Cortex-M
32 32位
F 基础款
407 高性能
Z 144引脚
E flash 512Kb
32开发和51开发的区别
32我们有多套库,STD 、HAL、LL库
32开发,是基于一套库 STD去操作寄存器
51开发,是直接操作寄存器
ARM 公司
1 当今世界 96%以上的移动端的芯片都是ARM提供的
2 提供所有移动端芯片设计的内核【内部核心电路】,RISV精简指令集
3 ARM的产品系列 A R M
快手上手
1 开发工具和开发的 环境
开发工具MDK KEIL
MDK 微控制器开发套件
KEIL 代码编辑、编译、调试、烧录
开发 环境 芯片支持包
2 配置工程模板
快手搭建工程和main.c
1 配置运行 环境
2 引入 开发板 的 头文件
3 配置工程
添加预定义宏
设置编译器 armv5
4 关于烧录
Jlink
STlink
DAP-link
所有含有芯片的设备都需要驱动

快手点灯
1 查看原理图 引脚、工作原理
2 编写代码
手动编写
官方手册
3 代码的编译和固件的烧录
可执行文件 一定是在开发板上可以执行的文件
.axf .hex文件
从0到1点灯
1 配置运行 环境
2 搭建项目框架
3 魔法棒 配置项目
4 完全根据芯片驱动层的驱动文件
GPIO.c 去写片上外设驱动 LED、KEY
1 代码功能 ==》2 函数 封装 ==》3 代码【工程】封装

1 代码功能
从0到1点灯的过程
2 函数 封装
实现的代码复用
1 函数是实现一定功能的代码段
2 函数的作用 是提高代码的复用性
3 函数三个要素 功能、参数、返回值
3 代码【工程】 封装
提高代码的可移植性
创建.c .h
.c 实现功能 其实就是写函数
.h 处理.c的问题
1 引入头文件
2 宏定义
3 声明 函数和变量
工程目录
工程文件夹
GPIO8种工作模式
4种输出
推挽 MCU决定输出的高低电平
开漏 MCU决定输出的低电平,高电平由外部的上拉电阻决定
复用推挽
复用开漏
4种输入
上拉 初始状态有一个上拉电阻
下拉 初始状态有一个下拉电阻
浮空 初始状态有一个没有上下拉电阻
模拟
按键
小灯 芯片对外输出
按键 芯片获取外部的高低电平
按键的抖动
1 硬件消抖 电容开关
2 软件消抖 按下和松开都会有抖动 ,等一等
一次完整按键操作包含 按下和松开
中断
1 中断特性 是一种 芯片MCU刻在骨子里 就是基因里面的特性
2 中断是什么 MCU在执行任务的时候,被打断任务执行,然后返回的一个过程
中断是有优先级的
中断可以嵌套
3 中断包含
中断请求
中断响应
中断处理
中断返回
4 中断分类
外部中断和事件中断
中断的图

5 配置中断
5.1 容许中断发生
1 配置引脚
2 引脚连接中断线
3 配置中断
4 配置NVIC 中断优先级
5.2 中断发生之后做什么呢
中断的服务函数 中断的处理函数
1 不需要声明
2 不需要传递参数
3 不需要调用,自动触发
4 里面一般不做耗时操作
5 中断有阻塞的效果
检查中断的状态 !=reset
处理
清空寄存器标志位
2 中断
1 EXTI.c 添加到工程
3 串口
串行通信总线USART
USART 同步异步 串行 ,全双工通信方式
通信的分类
按收发设备的数量
串行,只有一个发一个收
并行,多个发多个收
按传输的方向分类
单工,只有一个方向 bb机、 广播
半双工,一次只有一个方向,对讲机
全双工,一次可以多个方向,打电话、视频会议
同步和异步
同步 我现在说话 你必须要实时在线 并且互动 ,需要同时在线 ;需要有相同的时钟信号
异步 我跟你写信、或者发送语音消息 ,不需要时钟信号,
串口 传输
波特率 115200
数据位 8、9
奇偶校验 不做
停止位 1位
为什么的 串口 为什么重要呢
因为我们后面去调式 开发板的功能都需要用到串口
串口是PC和单片机进行信号传输的通道
PC和单片机 沟通的桥梁
通过配置串口
单片机给PC发送消息 32给PC发送消息
day07 定时器
1 review
- 串行 通讯和 并行 通讯的主要区别是什么?
串行 通信是一位一位按位传输,只开了一个窗口,排队
并行通信一次可以传多位数据,机场里面的多个安检通道
而我们的串口 通信就属于串行 通信
- 半双工、全双工通信的典型例子是什么?
全双工 同时接收和发送数据 电话
半双工 一个时间只能有一个信号传输 发送或者是接收 对讲机
单工 只能单一方向进行信号的传输 广播,一对一 BB机
串口 通信 属于全双工的
- 异步通信通过什么方式实现同步?
同步 需要共用相同的时钟
异步 不需要共用相同的时钟
1 串口 通信 属于异步通信
2 通信 发送方和接收方需要按一定的传输速率进行数据传输,这个传输速率就是波特率115200
3 数据传输的形式
前置条件
起始位 + 数据位 + 奇偶校验位 + 停止位
8b 不校验 1位
- STM32开发中 串口 的作用
串口 单片机32 数据调试、数据显示 都可以数据通过串口传递给PC
2 需求:通过串口去收发数据
2.1 32给PC发送消息 串口配置成功

2.2 PC给32发送消息 并且回显

2.3 配置说明

3 定时器

day08 PWM
1 review
1 定时器
可以发出**方波信号,**这个方波信号就是我们的时钟频率
通过晶振 **【4个晶振2个外部,2个内部】**来发出方波信号,
发出信号就会数数(周期) 说到固定的数 这次计数就结束
2 滴答定时器的特点
叫 系统定时器
频率固定 21 MHZ 1秒2100000个周期 1us 21周期
只能进行倒数 41-0 代表2us
作用 计时、计数、延迟
3 STM32F4x中有17个定时器
基础定时器 2个TIM6 TIM7
通用定时器 10个 TIM2 3 4 5 9 10 11 12 13 14 =》PWM
高级定时器 5 系统滴答定时器 、看门狗定时器 、实时时钟定时器 TIM1 TIM8
4 基础定时器
1 APB1 42MHZ 倍频x2 频率 84MHZ 84 x1000 000 /1秒
2 PSC 可以进行分频/2 倍频 x2 数的快慢 84MHZ /1000000 /8400 100000
3 ARR 83 0-83 83-0 数多少个数,触发中断
4 向上计数、向下计数,计数完成后都会产生中断
作用 计时、计数、延迟
1 秒 84 000 000 HZ
1/(8399+1) 1秒 10000周期 8399 PSC
一个周期 0.1毫秒
那么我们现在想得到多少毫秒 是不是就是去数多少个周期就可以了 ARR
如果 ARR =9 每完成一次数数 消耗 1ms
数数完成之后 通过通用定时器 就可以触发事件中断
1 中断请求
2 中断响应
3 中断处理
4 中断返回
固定周期的任务 都可以通过我们定时器 来去实现和处理
day09 整体小结
设备连线




技术小结
1 是什么,用什么做开发
硬件 STM32 MCU
知识储备 接口和协议
2 为什么,怎么做开发
用什么工具 MDK
开发环境搭建 开发环境、芯片支持包、搭建项目框架
项目开发步骤 原理图、功能实现、函数封装、代码封装
接口和协议
点灯 LED GPIO输出 输出高低电平
按键 KEY GPIO输入 读取高低电平
处理抖动 延时
中断 系统处理紧急事件 中断请求、中断响应、中断的处理函数、中断返回,复杂的业务逻辑和耗时操作不要放在中断里面去处理
系统定时器 滴答定时器 频率固定的84MHZ 21MHZ **固定高电平占空比50%的方波 ,**计时、延时
串口 USART 触发中断 **引脚复用 一帧一帧 双向 异步的数据参数,**两个设备之间数据通信、调试
基础定时器 频率固定的84MHZ ,固定占空比50% PSC 分频 ARR 计数 计时、延时
通用定时器 频率固定的84MHZ,占空比可以调整 ,通过输出比较 CCR调节占空比 计时、延时、PWM
定时器STM32F4 17个
基础 2个 TIM6 TIM7
通用 10个 TIM2 3 4 5 9 10 11 12 13 14
5 滴答定时器 、看门狗、RTC定时器
3 怎么做,做一个什么产品
智慧垃圾桶 、智慧门锁
人在传感器、舵机、超声波
项目需求 功能 ;用户 、产品经理
项目分析 确定外设、技术参数、性能 产品经理、研发经理
明确的项目功能清单 开发人员,配置外设、编写业务逻辑、实现功能

