跳到主要内容

STM32智慧垃圾桶

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


img

day01 环境安装

1.1 keil软件安装与破解

Keil MDK工具

是一款软件 MDK 嵌入式微控制器的集成开发环境

主要面向C,代码编辑、编译、调试debug、烧录的工具

ARM IP

小杨哥、东方甄选、交个朋友、与辉同心 IP,切片

ARM 提供所有手机芯片的 (内核+指令集) IP授权

ARM

A系列 手机、平板 多任务

R系列 实时性要求高、飞机、汽车

M系列 微控制器 能力比较均衡 几十MHZ到几百MHZ 芯片能力比较均衡 功耗不高

1.2 keilpack

等一下说

软件 keilpack

img

5090 4070

1.3 STM32F407ZET6

ST 意法半导体

M cortex-M(ARM)内核 微控制器

32 32位处理器

F 通用系列

407 高性能

Z 144引脚 pin

E 512Kb flash 硬盘

T 封装方式

6 工作温度

STM32命名规则

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 快速点灯

img

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 创建工程模板

  1. 创建工程文件夹 新建文夹
  2. 创建工程目录 配置项目
  3. 配置工程 魔法棒

img

2.2 点灯

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

img

GPIO8种工作模式

输出 4

  1. 推挽输出
  2. 开漏输出
  3. 复用推挽
  4. 复用开漏

输入4

  1. 上拉输入
  2. 下拉输入
  3. 浮空输入
  4. 模拟输入

day04 按键

1 review

img

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

2 代码封装

3 实现按键的功能

3.1 外设

电路原理+引脚

按键按下,就是MCU检测到低电平

KEY1-KEY4 PG2 3 4 5

3.2 按键小灯亮

//按键按下 小灯亮起 
//if(检测到按键是低电平){
// 让1灯亮起
//}

3.3 按键的消抖

机械按键 在按下 拨片接触触点 机械形变,所以会有一段时间的波动

1 硬件 物理 换一个按键 电容开关

2 软件

img

day05 中断

1 review

1 代码功能==》2 函数 封装 ==》3 代码封装

代码 封装

提高了代码的复用性

  1. 创建.c .h
  2. .c 放函数 实现功能
  3. .h 解决.c的报错
    1. 引入头文件
    2. 宏定义
    3. 函数、变量的声明

按键功能

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 中断返回

img

3 中断是系统预定义好的

MCU写死到芯片的基因里面的

4 配置 函数 的时候

4.1 什么情况下触发中断

4.2 中断发生之后 我们要做什么 中断处理 函数

4.3 中断的处理函数 不需要声明、不需要传递参数、不需要调用

暂时无法在飞书文档外展示此内容

img

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

所有含有芯片的设备都需要驱动

img

快手点灯

1 查看原理图 引脚、工作原理

2 编写代码

手动编写

官方手册

3 代码的编译和固件的烧录

可执行文件 一定是在开发板上可以执行的文件

.axf .hex文件

从0到1点灯

1 配置运行 环境

2 搭建项目框架

3 魔法棒 配置项目

4 完全根据芯片驱动层的驱动文件

GPIO.c 去写片上外设驱动 LED、KEY

1 代码功能 ==》2 函数 封装 ==》3 代码【工程】封装

img

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 中断分类

外部中断和事件中断

中断的图

img

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

  1. 串行 通讯和 并行 通讯的主要区别是什么?

串行 通信一位一位按位传输只开了一个窗口,排队

并行通信一次可以传多位数据,机场里面的多个安检通道

而我们的串口 通信就属于串行 通信

  1. 半双工、全双工通信的典型例子是什么?

全双工 同时接收和发送数据 电话

半双工 一个时间只能有一个信号传输 发送或者是接收 对讲机

单工 只能单一方向进行信号的传输 广播,一对一 BB机

串口 通信 属于全双工的

  1. 异步通信通过什么方式实现同步?

同步 需要共用相同的时钟

异步 不需要共用相同的时钟

1 串口 通信 属于异步通信

2 通信 发送方和接收方需要按一定的传输速率进行数据传输,这个传输速率就是波特率115200

3 数据传输的形式

前置条件

起始位 + 数据位 + 奇偶校验位 + 停止位

​ 8b 不校验 1位

  1. STM32开发中 串口 的作用

串口 单片机32 数据调试、数据显示 都可以数据通过串口传递给PC

2 需求:通过串口去收发数据

2.1 32给PC发送消息 串口配置成功

img

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

img

2.3 配置说明

img

3 定时器

img

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 整体小结

设备连线

img

img

img

img

技术小结

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 怎么做,做一个什么产品

智慧垃圾桶 、智慧门锁

人在传感器、舵机、超声波

项目需求 功能 ;用户 、产品经理

项目分析 确定外设、技术参数、性能 产品经理、研发经理

明确的项目功能清单 开发人员,配置外设、编写业务逻辑、实现功能

📲 扫码联系
微信二维码微信咨询
关注公众号关注公众号