文章目录
- 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
芯片示例如下:
文章图片
1、使用软件
Keil5 MDK

文章图片
1.1、书签工具

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

文章图片
- 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设备

文章图片
4、芯片的系统结构

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

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

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

文章图片

文章图片
详细步骤如下:

文章图片
在本地新建一个文件夹STM32Project,打开Keil5软件新建工程于该文件夹下
![]()
文章图片
选择芯片型号,点击OK
![]()
文章图片
进入资料中的如下路径

文章图片

文章图片

文章图片

文章图片
将上述文件拷贝至新建Start文件夹下
![]()
文章图片

文章图片

文章图片

文章图片

文章图片

文章图片

文章图片

文章图片

文章图片
建好3、配置调试器main.c
文件后如图
![]()
文章图片

文章图片

文章图片

文章图片
4、配置寄存器
4.1、通过查阅文档进行配置

文章图片

文章图片
4.2、通过库函数进行配置

文章图片

文章图片
拷贝以上文件夹下的所有库函数到工程中新建Library文件夹下
![]()
文章图片

文章图片

文章图片
将如下文件拷贝至User文件夹下
![]()
文章图片
![]()
文章图片
![]()
文章图片

文章图片

文章图片

文章图片

文章图片
四、型号分类及缩写

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

文章图片
2、系统结构

文章图片
3、GPIO位结构

文章图片
4、GPIO模式
- 通过配置GPIO的端口配置寄存器,端口可以配置成以下8种模式
文章图片
- 浮空 / 上拉 / 下拉输入
文章图片
- 开漏 / 推娩输出
文章图片
- 复用开漏 / 推娩输出
文章图片
- LED:发光二极管,正向通电点亮,反向通电不亮
- 有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定【见下图】
- 无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音
文章图片

文章图片
7、GPIO输入的硬件电路

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

文章图片
9.2、宏定义

文章图片
9.3、typedef
- typedef会对命名进行检查,检查是否是变量类型的名字
文章图片

文章图片

文章图片
9.5、C语言枚举

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

文章图片
4、OLED驱动函数

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

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

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

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

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

文章图片
- 或门
文章图片
- 与门
文章图片
- 非门
- 数据选择器
文章图片
10.1、旋转编码器介绍

文章图片
10.2、旋转编码器的硬件电路

文章图片
- 左图为模块的电路图,图里的中间部分就是旋转编码器
- 旋转轴旋转时,这两个触点以相位相差90度的方式交替导通,要配合外围电路才能输出高低电平
文章图片
- 这个C1 是输出滤波电容,可以防止一些输出信号抖动

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

文章图片

文章图片

文章图片

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

文章图片
- 这六个函数对应的就是时基单元的时钟选择部分,即对时钟源选择要用这六个函数,可以选择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引脚的预分频器、极性、滤波器这些参数的
- OC(Output Compare) 输出比较
- 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形(PWM波形又是驱动电机的必要条件)
- 每个高级定时器和通用定时器都拥有4个输出比较通道
- 高级定时器的前3个通道额外拥有死区生成和互补输出的功能
2、PMW简介
- PMW(Pulse Width Modulation)脉冲宽度调制
- 在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,长应用于电机控速等领域
- PWM参数:
文章图片
文章图片

文章图片
4、输出比较通道(通用)

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

文章图片
6、PWM基本结构
- 蓝色线是CNT的值,蓝色线从0开始自增,一直增到ARR(即99),之后清0继续自增
- 黄色线是ARR的值
- 绿色线是输出的电平
文章图片

文章图片
8、直流电机及驱动简介
- 直流电机是一种将电能转换为机械能的装置,有两个电极,当电极正接时,电机正转,当电极反转时,电机反转
- 直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作
- TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制转速和方向
文章图片
文章图片
- 舵机是一种根据输入PWM信号占空比来控制输出角度的装置
- 输入域PWM信号要求:周期为20ms,高电平宽度为0.5ms~2.5ms
文章图片

文章图片
11、
注意:
本文编写参考源于江科大自化协的stm32的教程,视频链接如下: 视频详解:https://www.bilibili.com/video/BV1th411z7sn?p=1
视频汇中的资料下载:https://pan.baidu.com/s/1SqKyKr5Fsl_9gBJi8aVxTw,提取码:8kzh,链接里压缩包的解压密码:32
推荐阅读
- stm32|STM32学习笔记---电源管理
- 笔记|常用传感器讲解四--水位传感器(water sensor)
- 笔记|三年探索(一条自控、电信/科类学生的技术成长路线)
- 笔记|Docker 使用代理
- 笔记|智能家居主流的五种连接方式
- 笔记|嵌入式网络的基础知识
- STM32|STM32GPIO模式的理解
- backup|backup ram不稳定 stm32_STM32信息安全硬件特性
- stm32|stm32学习之路,方法很重要