笔记|STM32学习


文章目录

  • STM32学习笔记
    • 一、STM32简介
    • 二、开发
      • 1、使用软件
        • 1.1、书签工具
      • 2、片上资源 / 外设
      • 3、命名规则
      • 4、芯片的系统结构
      • 5、引脚定义
      • 6、启动配置
      • 7、最小系统电路
    • 三、软件安装及新建工程
      • 1、软件安装
      • 2、建立STM32工程
      • 3、配置调试器
      • 4、配置寄存器
        • 4.1、通过查阅文档进行配置
        • 4.2、通过库函数进行配置
    • 四、型号分类及缩写
    • 五、GPIO
      • 1、基本结构
      • 2、系统结构
      • 3、GPIO位结构
      • 4、GPIO模式
      • 5、LED 和 蜂鸣器介绍
      • 6、GPIO输出的硬件电路
      • 7、GPIO输入的硬件电路
      • 8、传感器模块
      • 9、C语言知识
        • 9.1、数据类型
        • 9.2、宏定义
        • 9.3、typedef
        • 9.4、C语言结构体
        • 9.5、C语言枚举
    • 六、OLED调试工具
      • 1、调试方式
      • 2、OLED简介
      • 3、硬件电路
      • 4、OLED驱动函数
    • 七、EXTI外部中断
      • 1、中断系统
      • 2、中断执行流程
      • 3、STM32中断
      • 4、NVIC基本结构
      • 5、NVIC优先级分组
      • 6、EXTI简介
      • 7、EXTI基本结构
      • 8、AFIO复用IO口
      • 9、EXTI框图
      • 10、旋转编码器
        • 10.1、旋转编码器介绍
        • 10.2、旋转编码器的硬件电路
    • 八、定时中断
      • 1、定时中断基本结构及使用步骤
      • 2、需要用到的函数
    • 九、TIM输出比较
      • 1、输出比较简介
      • 2、PMW简介
      • 3、输出比较通道(高级)【了解】
      • 4、输出比较通道(通用)
      • 5、输出比较模式
      • 6、PWM基本结构
      • 7、参数计算
      • 8、直流电机及驱动简介
      • 9、舵机简介
      • 10、舵机的硬件电路
      • 11、
    • 本文编写参考源于江科大自化协的stm32的教程,视频链接如下:
      • 视频详解:[https://www.bilibili.com/video/BV1th411z7sn?p=1](https://www.bilibili.com/video/BV1th411z7sn?p=1)
      • 视频汇中的资料下载:[https://pan.baidu.com/s/1SqKyKr5Fsl_9gBJi8aVxTw](https://pan.baidu.com/s/1SqKyKr5Fsl_9gBJi8aVxTw),提取码:8kzh,链接里压缩包的解压密码:32

STM32学习笔记 一、STM32简介
  • STM32 是ST公司基于ARM Cortex-M 内核开发的32位微控制器(Microcontroller)
  • STM32 常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等
  • STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器
  • 51单片机是8位,而STM32是32位的,性能更优
  • STM32F103C8T6芯片示例如下:
    笔记|STM32学习
    文章图片
二、开发 软件包已上传至博主下载资源中
1、使用软件
Keil5 MDK
笔记|STM32学习
文章图片

1.1、书签工具 笔记|STM32学习
文章图片

2、片上资源 / 外设
通过程序配置外设,来完成我们想要的功能
笔记|STM32学习
文章图片

  • NVIC:永不管理中断的设备,比如配置中断优先级
  • SysTick:系统滴答定时器,是系统内核里的一个定时器,只要用来给操作系统提供定时服务,完成任务切换的功能、Delay函数的功能
  • RCC:复位和时钟控制,对系统的时钟进行控制,完成各模块的功能
  • GPIO:通用的IO口,可以用来点灯,读取按键等
  • AFIO:复用IO口,完成复用功能端口的重定义、中断的端口配置
  • EXIT:外部中断,当引脚有电平变化时,就可以触发中断,让CPU来处理任务
  • TIM:定时器,是外设中用到的最多的设备,,TIM分为高级定时器、通用定时器(常用)、基本定时器三种类型。通用定时器是最常用的定时器,它不仅可以完成定时中断的任务还可以完成测频率、生成PWM波形(电机驱动、舵机驱动最基本的要求)、配置成专用的编码器接口等功能
  • ADC:模数转换器,STM32内置了12位的AD转换器,可以直接读取IO口的模拟电压值,无需外部链接AD芯片,使用方便
  • DMA:直接内存访问,帮助CPU搬用大量数据这样的繁杂任务
  • USART:同步或异步串口,平常使用的UART是异步串口的意思,这里的USARTF是既支持异步串口,也支持同步串口,实际生活中异步串口比较多
  • IC2和SPI:是常用的两种通信协议,STM32页内置了他们的控制器,可以用硬件来输出时序波形,使用起来更高效。
  • CAN和USB:都是通信协议,CAN一般用于汽车领域。利用这个STM32的USB外设,可以做模拟鼠标、模拟U盘等设备
  • RTC:是实时闹钟,在STM32内部完成年月日、时分秒的计时功能,而且可以接外部备用电池,即使掉电也能正常运行
  • CRC校验:是一种数据的校验方式,用于判断数据的正确性
  • PWR:电源控制,可以让芯片进入睡眠模式等状态,来达到省点的目的
  • BKP:备份寄存器,这是一段存储器,当系统掉电时,仍可由备用电池保持数据,根据需要可以完成特殊功能
  • IWDG和WWDG:是独立看门狗和窗口看门狗,当单片机因为电磁干扰死机或者程序设计不合理出现死循环时,看门狗可以及时复位芯片,保证系统的稳定
  • DAC:数模转换器,它可以在IO口直接输出模拟电压,是ADC模数转换的逆过程
  • SDIO:是SD卡接口,用来读取SD卡
  • FSMC:可变静态存储控制器,可以用于扩展内存,或者配置成其他总线协议,用于某些硬件的操作
  • SPI:用OTG功能,可以让STM32座位USB主机去读取其他USB设备
3、命名规则
笔记|STM32学习
文章图片

4、芯片的系统结构
笔记|STM32学习
文章图片

5、引脚定义
在得知芯片的引脚定义时就大概知道该芯片应该怎么使用。一般的都会在数据手册中给出相关使用。如STM32F103C86T芯片引脚如下所示,黑点位置为1号引脚,依次逆时针进行编号。大概有如下这么几类:
  • 电源相关的引脚
  • 最小系统相关的引脚
  • IO口,功能口这些引脚
引脚类型如下:
  • S代表电源
  • I代表输入
  • O代表输出
  • IO代表输入输出
  • IO口电平代表IO口所能容忍的电压,FT代表能容忍5V的电压,无FT的只能容忍3.3V电压,当没有FT但需要容忍5V电压 的时候就需要加装电平转换电路了
    笔记|STM32学习
    文章图片
6、启动配置
启动配置其实就是BOTT0BOTT1 两根引脚的功能,
这个启动配置的作用就是指定程序开始运行的位置,一般情况下,程序都是在Flash程序存储器开始执行,但是在某些情况下,我们也可以让程序在别的地方开始执行,用以完成特殊的功能
笔记|STM32学习
文章图片

  • 0 表示接地
  • X 表示无论接什么
  • 1 表示接到3.3V电源正的位置
7、最小系统电路
在知道芯片的引脚功能之后,就需要为它连接最基本的电路,这些最基本的电路就是最小系统电路。如下图所示
笔记|STM32学习
文章图片

三、软件安装及新建工程 1、软件安装
【笔记|STM32学习】资料下载:https://pan.baidu.com/s/1SqKyKr5Fsl_9gBJi8aVxTw,提取码:8kzh,链接里压缩包的解压密码:32
安装步骤:https://blog.csdn.net/qq_53810245/article/details/123674836
  • 安装器件支持包
  • 软件注册
  • 安装STLINK驱动
  • 安装USB转串口驱动
2、建立STM32工程
笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

详细步骤如下:
笔记|STM32学习
文章图片

在本地新建一个文件夹STM32Project,打开Keil5软件新建工程于该文件夹下
笔记|STM32学习
文章图片

选择芯片型号,点击OK
笔记|STM32学习
文章图片

进入资料中的如下路径
笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

将上述文件拷贝至新建Start文件夹下
笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

建好main.c文件后如图
笔记|STM32学习
文章图片

3、配置调试器
笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

4、配置寄存器
4.1、通过查阅文档进行配置 笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

4.2、通过库函数进行配置 笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

拷贝以上文件夹下的所有库函数到工程中新建Library文件夹下
笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

将如下文件拷贝至User文件夹下
笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

四、型号分类及缩写 笔记|STM32学习
文章图片

五、GPIO
  • GPIO(General Purpose Input Output)通用输入输出口,俗称IO口
  • 可配置为8种输入输出模式
  • 引脚电平:0V~3.3V,部分引脚可容忍5V
  • 输出模式下可控制端口输出高低电平,用以驱动LED】控制蜂鸣器、模拟通信协议输出时序等
  • 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入(光敏电阻、热敏电阻)、ADC电压采集
  • 模拟通信协议接收数据等
1、基本结构
笔记|STM32学习
文章图片

2、系统结构
笔记|STM32学习
文章图片

3、GPIO位结构
笔记|STM32学习
文章图片

4、GPIO模式
  • 通过配置GPIO的端口配置寄存器,端口可以配置成以下8种模式
    笔记|STM32学习
    文章图片

  • 浮空 / 上拉 / 下拉输入
    笔记|STM32学习
    文章图片

  • 开漏 / 推娩输出
    笔记|STM32学习
    文章图片

  • 复用开漏 / 推娩输出笔记|STM32学习
    文章图片

5、LED 和 蜂鸣器介绍
  • LED:发光二极管,正向通电点亮,反向通电不亮
  • 有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定【见下图】
  • 无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音
    笔记|STM32学习
    文章图片
6、GPIO输出的硬件电路
笔记|STM32学习
文章图片

7、GPIO输入的硬件电路
笔记|STM32学习
文章图片

8、传感器模块
传感器模块:传感器元件(光敏电阻、热敏电阻、红外接收管等)的电阻会随外界模拟量的变化而变化,通过与定值电阻分压即可得到模拟电压输出,在通过电压比较器进行二值化即可得到数字电压输出
光敏电阻、热敏电阻、红外接收管均是随外界强度增大而阻值减小

9、C语言知识
9.1、数据类型 笔记|STM32学习
文章图片

9.2、宏定义 笔记|STM32学习
文章图片

9.3、typedef
  • typedef会对命名进行检查,检查是否是变量类型的名字
    笔记|STM32学习
    文章图片
9.4、C语言结构体 笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

9.5、C语言枚举 笔记|STM32学习
文章图片

六、OLED调试工具 1、调试方式
  • 串口调试:通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息
  • 显示屏调试:直接将显示屏连接到单片机,将调试信息打印在显示屏上
  • Keil调试模式:借助Keil软件的调试模式,可使用单步运行、设置点、查看寄存器及变量等功能。
2、OLED简介
  • OLED(Organic Light Emitting Diode):有机发光二极管
  • OLED显示屏:性能优异的新型显示屏,具有功耗低、响应速度快、宽视角、轻薄柔韧等特点
  • 0.96寸OLED模块:小巧玲珑、占用接口少、简单易用,是电子设计中非常常见的显示屏模块
  • 供电:3~5.5V,通信协议:I2C/SPI,分辨率:128*64
    笔记|STM32学习
    文章图片
3、硬件电路
笔记|STM32学习
文章图片

4、OLED驱动函数
笔记|STM32学习
文章图片

七、EXTI外部中断 1、中断系统
  • 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续执行
  • 中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源
  • 中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回。
2、中断执行流程
笔记|STM32学习
文章图片

3、STM32中断
  • 68个可屏蔽中断通道,包含EXTI、TIM、ADCUSART、SPI、I2C、RTC等多个外设
  • 使用NVIC(就是STM32中用来管理中断、分配优先级的)统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级。。
4、NVIC基本结构
NVIC是一个内核外设,是CPU的小助手
笔记|STM32学习
文章图片

5、NVIC优先级分组
决定是不是可以中断嵌套的优先级,叫做抢占优先级
笔记|STM32学习
文章图片

6、EXTI简介
  • EXTI的基本功能。简单来说,就是引脚电平变化,申请中断
  • 中断响应是正常的流程,引脚电平变化触发中断
  • 事件响应不会触发中断,而是触发别的外设操作,属于外设之间的联合工作
    笔记|STM32学习
    文章图片
7、EXTI基本结构
笔记|STM32学习
文章图片

8、AFIO复用IO口
  • AFIO主要用于引脚复用功能的选择和重定义
  • 在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择
  • 外部中断同意通用I/O映像如下图笔记|STM32学习
    文章图片
9、EXTI框图
笔记|STM32学习
文章图片

  • 或门
    笔记|STM32学习
    文章图片

  • 与门
    笔记|STM32学习
    文章图片

  • 非门
  • 数据选择器
    笔记|STM32学习
    文章图片

10、旋转编码器
10.1、旋转编码器介绍 笔记|STM32学习
文章图片

10.2、旋转编码器的硬件电路 笔记|STM32学习
文章图片

  • 左图为模块的电路图,图里的中间部分就是旋转编码器
  • 旋转轴旋转时,这两个触点以相位相差90度的方式交替导通,要配合外围电路才能输出高低电平
    笔记|STM32学习
    文章图片
  • 这个C1 是输出滤波电容,可以防止一些输出信号抖动
八、定时中断 1、定时中断基本结构及使用步骤
笔记|STM32学习
文章图片

  • 第一步:RCC开启时钟,是每个代码的第一步
  • 第二步:选择时基单元的时钟源,对于定时中断,我们选择内部时钟源
  • 第三步:配置时基单元 ,包括预分频器、自动重装器、计数模式等等,可以用结构体进行配置
  • 第四步:配置输出中断控制,允许更新中断输出到NVIC
  • 第五步:配置NVIC,在NVIC中打开定时器中断的通道,并分配一个优先级
  • 第六步:运行控制
  • 整个模块配置完成后,我们还需要使能一下计数器,要不然计数器是不会运行的,当定时器使能后,计数器就会开始计数了,当计数器更新时,触发中断。这个时候我们再写一个中断函数,这样这个中断函数就能每隔一段时间自动执行一次
2、需要用到的函数
笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

笔记|STM32学习
文章图片

  • TIM_Delnit,恢复缺省配置
  • TIM_TimeBaselnit,时基单元初始化,用来配置时基单元,函数内部有两个参数,一个是TIMx选择某个定时器,第二个是结构体,里面包含了配置时基单元的一些参数
  • TIM TimeBaseStructInit,可以把结构体变量赋一个默认值
  • TIM Cmd,这个是用来使能计数器的,它有两个参数,第一个TIMx选择定时器,第二个NewState新的状态,也就是使能还是失能,使能,计数器就可以运行,失能,计数器就不运行
  • TIM_ITConfig,这个是用来使能中断输出信号的,负责中断输出控制,它有两个参数。第一个TIMx,选择定时器。第二个TIM_IT,选择要配置哪个中断输出,第三个NewState,表示新的状态,是使能还是失能
笔记|STM32学习
文章图片

  • 这六个函数对应的就是时基单元的时钟选择部分,即对时钟源选择要用这六个函数,可以选择RCC内部时钟、ETR外部时钟、ITRx其他定时器、TIx捕获通道这些
  • TIM_InternalaockConfig。选择肉部时钟,参数只有一个ITMx
  • TIM_ITRxExternalClockConfig,选择ITRx其他定时器的时钟,参数是TIMx,选择要配置的定时器和InputT日哥rSource,选择要接入哪个其他的定时器,调用一下即可
  • TIM_TIxExternalClockConfig,选择TIx捕获通道的时钟,参数有个,第一个是TIMx,第二个是具体的某个引脚,第三个ICPolarity和ICFilter,是输入的极性和滤波器。对于外部引脚的波形,一般都会有极性选择和滤波器,这样会使得更加灵活
  • TIM_ETRClockMode1Config,选择ETR通过外部时钟模式1输入的时钟,参数ExtTRGPrescaler,外部触发预分频器,可以对ETR的外部时钟再提前做一个分频。Polarity和Filter,是极性和滤波器
  • TIM_ETRClockMode2Config,是选择ETR通过外部时钟模式2输入的时钟,参数的功能同上
  • TIM_ETRConfig,是单独用来配置ETR引脚的预分频器、极性、滤波器这些参数的
九、TIM输出比较 1、输出比较简介
  • OC(Output Compare) 输出比较
  • 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形(PWM波形又是驱动电机的必要条件)
  • 每个高级定时器和通用定时器都拥有4个输出比较通道
  • 高级定时器的前3个通道额外拥有死区生成和互补输出的功能
如果想用STM32做一些有电机的项目,比如智能车、机器人等,就需要好好学习输出比较功能,在此处不做过多的阐述,大家可以在视频中找到这一节进行学习
2、PMW简介
  • PMW(Pulse Width Modulation)脉冲宽度调制
  • 在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,长应用于电机控速等领域
  • PWM参数:
    笔记|STM32学习
    文章图片

    笔记|STM32学习
    文章图片
3、输出比较通道(高级)【了解】
笔记|STM32学习
文章图片

4、输出比较通道(通用)
笔记|STM32学习
文章图片

5、输出比较模式
此处的输出模式即为上图中的输出模式控制器的内容
笔记|STM32学习
文章图片

6、PWM基本结构
  • 蓝色线是CNT的值,蓝色线从0开始自增,一直增到ARR(即99),之后清0继续自增
  • 黄色线是ARR的值
  • 绿色线是输出的电平
    笔记|STM32学习
    文章图片
7、参数计算
笔记|STM32学习
文章图片

8、直流电机及驱动简介
  • 直流电机是一种将电能转换为机械能的装置,有两个电极,当电极正接时,电机正转,当电极反转时,电机反转
  • 直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作
  • TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制转速和方向
    笔记|STM32学习
    文章图片

    笔记|STM32学习
    文章图片
9、舵机简介
  • 舵机是一种根据输入PWM信号占空比来控制输出角度的装置
  • 输入域PWM信号要求:周期为20ms,高电平宽度为0.5ms~2.5ms
    笔记|STM32学习
    文章图片
10、舵机的硬件电路
笔记|STM32学习
文章图片

11、
注意:
本文编写参考源于江科大自化协的stm32的教程,视频链接如下: 视频详解:https://www.bilibili.com/video/BV1th411z7sn?p=1
视频汇中的资料下载:https://pan.baidu.com/s/1SqKyKr5Fsl_9gBJi8aVxTw,提取码:8kzh,链接里压缩包的解压密码:32

    推荐阅读