文章目录
- 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学习之路,方法很重要