文章目录
- 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.1.介绍旋转编码器
- 10.2.旋转编码器的硬件电路
- 八、定期中断
-
- 1.定期中断基本结构和使用步骤
- 2.需要使用的函数
- 九、TIM输出比较
-
- 1、输出比较简介
- 2、PMW简介
- 3.输出比较通道(高级)理解
- 4.输出比较通道(通用)
- 5.输出比较模式
- 6、PWM基本结构
- 7、参数计算
- 8.直流电机及驱动简介
- 9、舵机简介
- 10.舵机的硬件电路
- 11、
- 本文的编写参考来源于江科大自化协stm视频链接如下:
-
- 视频详解:[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:两种通信协议是常用的,STM它们的控制器内置在32页,可以用硬件输出时间波形,使用起来更有效。
- CAN和USB:都是通信协议,CAN一般用于汽车领域。用这个。STM32的USB外设,可以做模拟鼠标、模拟U盘等设备
- RTC:实时闹钟,在STM32内部完成年、月、时、秒的计时功能,可连接外部备用电池,即使断电也能正常运行
- CRC验证:用于判断数据正确性的数据验证方法
- PWR:电源控制可以使芯片进入睡眠模式,从而达到省点的目的
- BKP:备份寄存器是一个存储器。当系统断电时,备用电池仍然可以保持数据,特殊功能可以根据需要完成
- IWDG和WWDG:是独立看门狗和窗口看门狗。当单片机因电磁干扰或程序设计不合理而死亡时,看门狗可以及时复位芯片,以确保系统的稳定性
- DAC:它可以在数模转换器中IO口直接输出模拟电压ADC模数转换的逆过程
- SDIO:是SD读取卡接口SD卡
- FMC:可变静态存储控制器,可以用于扩展内存,或者配置成其他总线协议,用于某些硬件的操作
- SPI:用OTG功能,可以让STM32座位USB主机去读取其他USB设备
3、命名规则
4、芯片的系统结构
5、引脚定义
在得知芯片的引脚定义时就大概知道该芯片应该怎么使用。一般的都会在数据手册中给出相关使用。如STM32F103C86T芯片引脚如下所示,黑点位置为1号引脚,依次逆时针进行编号。大概有如下这么几类:
- 电源相关的引脚
- 最小系统相关的引脚
- IO口,功能口这些引脚
引脚类型如下:
- S代表电源
- I代表输入
- O代表输出
- IO代表输入输出
- IO口电平代表IO口所能容忍的电压,FT代表能容忍5V的电压,无FT的只能容忍3.3V电压,当没有FT但需要容忍5V电压 的时候就需要加装电平转换电路了
6、启动配置
启动配置其实就是BOTT0
和BOTT1
两根引脚的功能, 这个启动配置的作用就是指定程序开始运行的位置,一般情况下,程序都是在Flash程序存储器开始执行,但是在某些情况下,我们也可以让程序在别的地方开始执行,用以完成特殊的功能
- 0 表示接地
- X 表示无论接什么
- 1 表示接到3.3V电源正的位置
7、最小系统电路
在知道芯片的引脚功能之后,就需要为它连接最基本的电路,这些最基本的电路就是最小系统电路。如下图所示
三、软件安装及新建工程
1、软件安装
资料下载:https://pan.baidu.com/s/1SqKyKr5Fsl_9gBJi8aVxTw,提取码:
8kzh
,链接里压缩包的解压密码:32
安装步骤:https://blog.csdn.net/qq_53810245/article/details/123674836
- 安装器件支持包
- 软件注册
- 安装STLINK驱动
- 安装USB转串口驱动
2、建立STM32工程
详细步骤如下:
在本地新建一个文件夹STM32Project,打开Keil5软件新建工程于该文件夹下
选择芯片型号,点击OK
进入资料中的如下路径
将上述文件拷贝至新建Start文件夹下
建好
main.c
文件后如图
3、配置调试器
4、配置寄存器
4.1、通过查阅文档进行配置
4.2、通过库函数进行配置
拷贝以上文件夹下的所有库函数到工程中新建Library文件夹下
将如下文件拷贝至User文件夹下
四、型号分类及缩写
五、GPIO
- GPIO(General Purpose Input Output)通用输入输出口,俗称IO口
- 可配置为8种输入输出模式
- 引脚电平:0V~3.3V,部分引脚可容忍5V
- 输出模式下可控制端口输出高低电平,用以驱动LED】控制蜂鸣器、模拟通信协议输出时序等
- 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入(光敏电阻、热敏电阻)、ADC电压采集
- 模拟通信协议接收数据等
1、基本结构
2、系统结构
3、GPIO位结构
4、GPIO模式
-
通过配置GPIO的端口配置寄存器,端口可以配置成以下8种模式
-
浮空 / 上拉 / 下拉输入
-
开漏 / 推娩输出
-
复用开漏 / 推娩输出
5、LED 和 蜂鸣器介绍
- LED:发光二极管,正向通电点亮,反向通电不亮
- 有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定【见下图】
- 无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音
6、GPIO输出的硬件电路
7、GPIO输入的硬件电路
8、传感器模块
传感器模块:传感器元件(光敏电阻、热敏电阻、红外接收管等)的电阻会随外界模拟量的变化而变化,通过与定值电阻分压即可得到模拟电压输出,在通过电压比较器进行二值化即可得到数字电压输出
光敏电阻、热敏电阻、红外接收管均是随外界强度增大而阻值减小
9、C语言知识
9.1、数据类型
9.2、宏定义
9.3、typedef
- typedef会对命名进行检查,检查是否是变量类型的名字
9.4、C语言结构体
9.5、C语言枚举
六、OLED调试工具
1、调试方式
- 串口调试:通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息
- 显示屏调试:直接将显示屏连接到单片机,将调试信息打印在显示屏上
- Keil调试模式:借助Keil软件的调试模式,可使用单步运行、设置点、查看寄存器及变量等功能。
2、OLED简介
- OLED(Organic Light Emitting Diode):有机发光二极管
- OLED显示屏:性能优异的新型显示屏,具有功耗低、响应速度快、宽视角、轻薄柔韧等特点
- 0.96寸OLED模块:小巧玲珑、占用接口少、简单易用,是电子设计中非常常见的显示屏模块
- 供电:3~5.5V,通信协议:I2C/SPI,分辨率:128*64
3、硬件电路
4、OLED驱动函数
七、EXTI外部中断
1、中断系统
- 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续执行
- 中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源
- 中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回。
2、中断执行流程
3、STM32中断
- 68个可屏蔽中断通道,包含EXTI、TIM、ADCUSART、SPI、I2C、RTC等多个外设
- 使用NVIC(就是STM32中用来管理中断、分配优先级的)统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级。。
4、NVIC基本结构
NVIC是一个内核外设,是CPU的小助手
5、NVIC优先级分组
决定是不是可以中断嵌套的优先级,叫做抢占优先级
6、EXTI简介
- EXTI的基本功能。简单来说,就是引脚电平变化,申请中断
- 中断响应是正常的流程,引脚电平变化触发中断
- 事件响应不会触发中断,而是触发别的外设操作,属于外设之间的联合工作
7、EXTI基本结构
8、AFIO复用IO口
- AFIO主要用于引脚复用功能的选择和重定义
- 在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择
- 外部中断同意通用I/O映像如下图
9、EXTI框图
-
或门
-
与门
-
非门
-
数据选择器
10、旋转编码器
10.1、旋转编码器介绍
10.2、旋转编码器的硬件电路
- 左图为模块的电路图,图里的中间部分就是旋转编码器
- 旋转轴旋转时,这两个触点以相位相差90度的方式交替导通,要配合外围电路才能输出高低电平
- 这个C1 是输出滤波电容,可以防止一些输出信号抖动
八、定时中断
1、定时中断基本结构及使用步骤
- 第一步:RCC开启时钟,是每个代码的第一步
- 第二步:选择时基单元的时钟源,对于定时中断,我们选择内部时钟源
- 第三步:配置时基单元 ,包括预分频器、自动重装器、计数模式等等,可以用结构体进行配置
- 第四步:配置输出中断控制,允许更新中断输出到NVIC
- 第五步:配置NVIC,在NVIC中打开定时器中断的通道,并分配一个优先级
- 第六步:运行控制
- 整个模块配置完成后,我们还需要使能一下计数器,要不然计数器是不会运行的,当定时器使能后,计数器就会开始计数了,当计数器更新时,触发中断。这个时候我们再写一个中断函数,这样这个中断函数就能每隔一段时间自动执行一次
2、需要用到的函数
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引脚的预分频器、极性、滤波器这些参数的
九、TIM输出比较
1、输出比较简介
- OC(Output Compare) 输出比较
- 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形(PWM波形又是驱动电机的必要条件)
- 每个高级定时器和通用定时器都拥有4个输出比较通道
- 高级定时器的前3个通道额外拥有死区生成和互补输出的功能
如果想用STM32做一些有电机的项目,比如智能车、机器人等,就需要好好学习输出比较功能,在此处不做过多的阐述,大家可以在视频中找到这一节进行学习
2、PMW简介
- PMW(Pulse Width Modulation)脉冲宽度调制
- 在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,长应用于电机控速等领域
- PWM参数:
3、输出比较通道(高级)【了解】
4、输出比较通道(通用)
5、输出比较模式
此处的输出模式即为上图中的输出模式控制器的内容
6、PWM基本结构
- 蓝色线是CNT的值,蓝色线从0开始自增,一直增到ARR(即99),之后清0继续自增
- 黄色线是ARR的值
- 绿色线是输出的电平
7、参数计算
8、直流电机及驱动简介
- 直流电机是一种将电能转换为机械能的装置,有两个电极,当电极正接时,电机正转,当电极反转时,电机反转
- 直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作
- TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制转速和方向
9、舵机简介
- 舵机是一种根据输入PWM信号占空比来控制输出角度的装置
- 输入域PWM信号要求:周期为20ms,高电平宽度为0.5ms~2.5ms
10、舵机的硬件电路
11、
注意:
本文编写参考源于江科大自化协的stm32的教程,视频链接如下:
视频详解:https://www.bilibili.com/video/BV1th411z7sn?p=1
视频汇中的资料下载:https://pan.baidu.com/s/1SqKyKr5Fsl_9gBJi8aVxTw,提取码:8kzh,链接里压缩包的解压密码:32