STM32基础笔记分享

什么是嵌入式?

以应用为中心,以计算机技术为基础,软硬件可以裁剪的计算机系统

ARM和STM32

ARM

1. ARM是基于ARM内核设计的芯片的统称,ARM是一家公司(专门生产内核,IP 核,依靠专利授权来盈利)

2. ARM内核的分类:

arm7 arm9 arm11

后面将内核分为以下三个大类

1. cortex-A 针对开放性的操作系统(运算量大,人机交互)手机,平板,电视机等等

2. cortex-R 针对实时性要求高的领域 航空航天,军工,汽车刹车等等

3. cortex-M 微控制领域(MCU), 空调,洗衣机,智能排查等等

3. cortex-M的分类

cortex-M0、cortex-M3、cortex-M4、cortex-M7

STM32

1. stm32f407igt6 mcu ARM内核 cortex-M M4

st:意法半导体

m:mcu

f:通用型

407:4代表高性能,07是子型号

i:引脚数 例:176pin(引脚)、V:100个引脚

g:flash大小 1MB;e:512k

t:封装 LQFP

6:温度 -40°~85°

单片机的最小系统:电源、芯片、晶振、下载、复位

2. stm32的开发方式

(1)寄存器(最难的开发方式)具有特殊功能的内存单元

(2)标准库 使用最广泛的开发方式

(3)HAL库 图形界面开发,简单易用(STM32CubeMX)

(4)LL库 目前不成熟

GPIO

作用

输入:检测电平的状态(高低电平)

输出:往外输出电平(高低电平)

划分

按组划分:GPIOA、GPIOB......

每组最多可以有16个引脚,例:GPIOA组,A0、A1、A2...A15

GPIOA组的第一个引脚可以简写为PA1

输入输出模式

4种输入

● 浮空输入

● 上拉输入

● 下拉输入

● 模拟功能

4种输出

● 具有上拉或下拉功能的推挽输出(由 P-MOS管和N-MOS交替工作输高低电平)

● 具有上拉或下拉功能的开漏输出(相当于将 P-MOS管去掉,永远只有 N-MOS管工作;不能输

出高电平,只能输出低电平;要想输出高电平需使能上拉电阻)

● 具有上拉或下拉功能的复用功能推挽

● 具有上拉或下拉功能的复用功能开漏

systick(滴答定时器)

本质

定时器的本质:计数

概念

1. systick是核内外设,在stm32f4xx中文参考手册中没有具体描述,需要内核手册《STM32F3与F4系列Cortex M4内核编程手册》中查询

2. 该处理器配备有一个24位的系统定时器——SysTick,它会从重载值开始依次递减至零,然后在下一个时钟脉冲到来时重新加载(循环到)STK_LOAD 寄存器中的值,之后会在后续的时钟脉冲中继续递减。

作用

1. 在裸机开发中做精确延时使用

2. 在操作系统中作为任务调度的时间基准

相关的寄存器

STK_CTRL:控制/状态寄存器

STK_LOAD:装载寄存器(装载数据到寄存器中)

STK_VAL:当前值寄存器

STK_CALIB:校准寄存器

复位和时钟

复位

当程序死机或者出现异常时能让程序回到初始状态重新开始运行

分为自动复位(上电复位)和手动复位。

单片机上电后,此时按键还没有被按下,与GND是断路,NRST引脚是高阻态状态,同时给并联的电容进行充电。

当复位按键被按下的时候,此时与GND连接起来,而NRST引脚并不会马上就变成低电平,而是会慢慢得从高电平逐渐变成低电平。因为有电容存储了电,与GND连接的瞬间,电容持续放电,直到放完,NRST引脚才真正变成低电平,单片机内部才正在识别到复位按键已被按下,内部进行复位寄存器等外设的操作。

所以这个的电容也可以起到一个防误触按键的作用,而串联的电阻则是为了保护芯片内部,保护不会有瞬间电流通过,起到限流,分压的作用。

时钟

时钟的作用:时钟是一段有序的脉冲,给单片机提供做事的节奏,来一个脉冲处理一次数据,一次处理32个位的数据。

时钟的产生:

1、石英晶体振荡器(晶振)

(1)有源晶振 自启振 4个引脚 精度高 价格贵

(2)无源晶振 需要外围电路配合才能启振 2个引脚 精度稍差 价格便宜

2、stm32的时钟

只有内部高速和外部高速才能去决定SYSCLK的时钟频率,而内部低速决定看门狗,外部低速决定RTC实时时钟

(1)内部低速时钟(LSI)

(2)内部高速时钟

(3)外部低速时钟(LSE)(4)外部高速时钟

(5)PLL锁相

环(只有PLL锁相环通过备频、分频才能让SYSCLK(系统主频)达到168MHZ)

GPIO输入和按键检测

GPIO输入

1、上拉输入 默认高电平

2、下拉输入 默认低电平

3、浮空输入 电平不确定

4、模拟输入 模拟信号

按键检测

消除抖动的方式

1、硬件消抖 RC电路(R:电阻、C:电容)

2、软件消抖:延时消抖,定时器消抖

中断

概念

主程序在正常执行时,由中断源引发中断事件,向CPU发起中断请求,打断cpu的正常执行,让cpu先去执行中断事件,然后再回到主程序继续执行。

中断是用来处理紧急事件的。

中断的过程

1、中断源触发中断

2、保护现场

3、处理中断事件

4、恢复现场

5、继续运行中断之前的程序

现场保护和现场恢复是由CPU自动完成,不用程序员去处理

中断嵌套

在中断事件处理的过程中,有其它优先级更高的中断源产生中断,打断本次事件的处理,cpu去执行优先级更高的中断事件

stm32管理中断(NVIC中断异常管理器)

1、提供5组中断管理方式,每个组由4个bit来表示抢占优先级和响应优先级

This parameter can be one of the following values:

* @arg NVIC_PriorityGroup_0: 0 bits for pre-emption priority 抢占

* 4 bits for subpriority 响应

* @arg NVIC_PriorityGroup_1: 1 bits for pre-emption priority

* 3 bits for subpriority

* @arg NVIC_PriorityGroup_2: 2 bits for pre-emption priority

* 2 bits for subpriority

* @arg NVIC_PriorityGroup_3: 3 bits for pre-emption priority

* 1 bits for subpriority

* @arg NVIC_PriorityGroup_4: 4 bits for pre-emption priority

* 0 bits for subpriority

2、给每个中断都备两个优先级 (数字越大优先级越小)

抢占优先级(主优先级):具备抢占功能,高优先级的可以抢占低优先级的资源来处理自己的事情

响应优先级(次优先级):不具备有抢占功能,两个同主优先级的中断同时发生,高优先级的先运行

外部中断

配置一个外部中断的步骤

1、分析原理图

2、开时钟

3、gpio的初始化

4、配置GPIO的外部中断

5、中断的配置

(1)中断的通道号

(2)中断的优先级

(3)开启中断

(4)使中断配置生效

6、编写中断服务函数(处理中断事件)

注意事项:只要开启了中断必须要去实现对应中断的服务函数,否则程序会“跑飞”

串口通信

同步通信和异步通信

1、同步通信:在时钟线的作用下,收发双方使用同一时钟信号进行数据的收发

2、异步通信:发送器只管发送数据,接收器只管接收数据,收发数据互不影响

全双工、半双工、单工通信

1、全双工:同一时刻,既可以发送数据也可以接收数据

2、半双工:同一时刻,只能接收或者发送数据

3、单工:数据只能往一个方向,只能发或者只能收

串行通信和并行通信

1、串行通信:数据以bit为单位,一位接一位发送或者接收数据 LSB(低位先行) MSB(高位先行)

2、并行通信:数据以字节为单位收发数据

stm32的串口是一种两线串行、全双工半双工可选、一对一、低位先行的异步通信方式(也可以是同步通信,需要额外的时钟线同步数据传输)

波特率

波特率决定数据的传输速度

1、每秒钟传输数据的位(bit)数

2、常见的波特率:2400、9600、115200

115200发送多少字节:115200/10(1个起始位+1个停止位+8个数据位)

奇偶校验(可有可无)

作用:检测数据的准确性

奇校验:如果数据域中1的个数是一个偶数,奇校验位为1

如果数据域中1的个数是一个奇数,奇校验位为0

偶校验:如果数据域中1的个数是一个偶数,偶校验位为0

如果数据域中1的个数是一个奇数,偶校验位为1

串口通信发送数据的格式

1位起始位 固定低电平

8位数据位 电平状态不确定,取决要发送的数据

1位可能的奇偶校验位

1位停止位 固定的高电平

串口的作用

1、用于设备之间的通信(TX发送、RX接收)

2、输出调试信息(printf)

编写串口的步骤(printf)

串口的空闲中断

可以利用空闲中断去判断 一帧数据是否传输完成

编写一个串口的编程步骤(printf)

1、分析原理图 PG9->USART6_RX PG14->USART6_TX

2、开时钟

3、gpio的初始化

4、串口的初始化

5、重构C库的fputc函数

6、在keil中进行魔术棒的配置 魔术棒》target》勾选 微库

定时器

1、定时器的分类

2、基本定时器的框图分析

PWM(脉冲宽度调制)

概念

PWM:调节占空比

占空比:在一个周期内,高电平占整个周期的比值

如何产生PWM

1、延时函数

2、定时器产生(比较输出)

作用

调节输出功率:条件灯光的亮度,电机的转速,声音的大小等等

影子寄存器

当需要改变参数时,修改参数后不会立即生效,需要等到下一个周期到时才会生效

IIC通信

硬件层

1、IIC是一种两线串行(MSB高位先行)、半双工、多对多的同步通信:SCL(时钟线)、SDA(数据线)。

2、由飞利浦公司研发,高位先行的通信方式。

3、IIC的接线方式:SCL接SCL、SDA接SDA,IIC总线上必须接两个上拉电阻,用于总线空闲时将总线的电平拉高;IO需要设置为开漏输出(1. 防止设备烧坏;2. 软件层面是多个主机时,用来判断谁先开始)。

4、支持多主机多从机模式,每个设备都有一个唯一的设备ID。

5、当多个主机同时发起通信请求时,会进行总线仲裁;仲裁的原则:线与(低电平优先)。

6、通信只能由主机发起,时钟线始终由主机控制。

7、通信速率:标准速率➡️100kb/s 快速➡️400kb/s 高速➡️3.4mb/s 极高速➡️5mb/s

8、通信由起始信号开始,停止信号结束。

9、时钟线的作用:用于控制数据线上的数据有效性。

时钟线为低电平时,数据无效;为高电平时,数据有效,此时进行采样保证数据的有效性。

10、IIC是具有应答机制的通信。

协议层

1、起始信号

当时钟线为高电平时,数据线由高电平变低电平产生一个有效(高电平的持续时间>4.7us,低电平。

2、停止信号

当时钟线为高电平时,数据线由低电平变高电平产生一个有效的上升沿。

3、应答信号

当时钟线为高电平时,数据线产生一个有效的低电平。

4、非应答信号(回的信号是高是低的区别)

当时钟线为高电平时,数据线产生一个有效的高电平。

5、等待应答

拉高时钟线,读取数据线上的数据;高电平(非应答)低电平(应答)。

6、发送数据

当时钟线为高电平时,数据线上的数据不允许发生改变(稳定不变);

当时钟线为低电平时,可以改变。

7、接收数据

把时钟线拉高,即可获取数据线上的数据;接收完数据后,要将时钟线拉低,从机才能发送下一位数据。

如何产生IIC

1、硬件产生IIC(片上外设的方式)

2、软件模拟IIC

五种经典通信的区别

UART、IIC、SPI、RS232、RS485五种嵌入式经典通信总线协议的主要区别:

SPI

硬件层

1、SPI是一种4线串行、全双工半双工可选择、一主多从的同步通信方式。

MOSI:主机输出从机输入

MISO:主机输入从机输出

MSCK:时钟线

NSS:片选

2、高位先行(MSB)还是低位先行(LSB)是可以配置的,数据位也是可以配置的。

3、时钟线始终由主机控制。

4、支持一主多从,主机通过拉低片选来选择与哪个从机通信。

协议层

1、CPOL(时钟极性)

用于控制时钟线在空闲时的输出电平状态。

2、CPHA(时钟相位)

用于决定数据的采样和输出在哪个时钟边沿进行。

3、SPI的工作模式

工作模式

CPOL

CPHA

0

0

0

时钟线空闲时为低电平,数据前沿采样、后沿输出

1

0

1

时钟线空闲时为低电平,数据前沿输出、后沿采样

2

1

0

时钟线空闲时为高电平,数据前沿采样、后沿输出

3

1

1

时钟线空闲时为高电平,数据前沿输出、后沿采样

如何产生SPI

1、硬件产生(片上外设)

2、软件模拟

DMA--直接存储器访问

1、DMA---直接存储器访问,数据的搬运工,不需要CPU的干预,节省CPU的资源。

作用:给CPU减负,提高CPU的运行效率。

2、两个DMA控制器总共有16个数据流(每个控制器8个),每个数据流总共可以有多达8个通道(或称请求)

3、优先级:DMA数据流请求之间的优先级可用软件编程(4个级别:非常高、高、中、低)

在软件优先级相同的情况下可以通过硬件决定优先级(例如,请求 0 的优先级高于请求 1)

4、DMA的传输方向

(1)外设到存储器的传输

(2)存储器到外设的传输

(3)存储器到存储器的传输

5、独立的源和目标传输宽度(字节、半字、字):源和目标的数据宽度不相等时,DMA自动封装解封必要的传输数据来优化带宽。这个特性仅在FIFO模式下可用。

字节:8bit

半字:16bit

字(全字):32bit

ADC(模数转换)

1、ADC的作用:将模拟信号转换为数字信号。

2、12位ADC是逐次趋近型模数转换器。

3、stm32f407的ADC分辨率可配置 12 位、10 位、8 位或 6 位分辨率。

4、转换规则:

(1)规则转换:按照预先设定的规则进行转换。

(2)注入转换:类似中断,当规则组在进行转换时,如果注入转换被触发,此时ADC会强行进入注入转换。

5、总转换时间计算公式:转换时间 = 采样时间+12个周期

6、编程步骤:

(1)分析原理图

(2)开始时钟

(3)gpio初始化

(4)adc_common初始化

(5)ADC初始化

(6)dma初始化后

(7)采样通道的规则设置

(8)设置DMA的触发条件

(9)使能DMA ADC ADC_DMA

(10)软件触发开启ADC的转换

(11)算平均值

7、四个核心步骤:采样、保持、量化、输出

8、三个核心指标:分辨率、转换速率、信噪比

FREERTOS

RTOS

1、real time operation system 实时操作系统

2、RTOS并不是指一个操作系统,而是指一类系统,比如在MCU上可以运行的操作系统:freertos、ucos、RTthread等等都叫RTOS。

FREERTOS

1、是一种免费的实时操作系统。占用内存资源小,可以在很多资源有限的芯片上运行。

2、为什么选择FREERTOS?

(1)免费,企业开发考虑成本。

(2)使用者多、资料多、解决问题方便。

(3)简单、文件数量少,方便移植。

(4)可以在很多资源有限的芯片上运行。

(5)很多产品的二次开发也是用的FREERTOS。

3、特点:

(1)任务调度:支持抢占式调度、时间片轮转、合作式调度。

(2)任务的创建支持动态和静态创建。

(3)C语言编写,可移植性强。

(4)提供有低功耗的tickless模式。

(5)支持高效的软件定时器。

(6)提供强大的调试跟踪能力。

(7)有堆栈溢出检测功能。

(8)任务数量和任务优先级不限。

4、在单片机开发中,裸机开发和系统开发的区别:

裸机开发:可以直接控制硬件,资源利用更灵活,无操作系统的额外开销。但是裸机开发只能执行单一任务,开发设计的难度也更大。

系统开发:RTOS提供了任务调度器,可以方便的支持多任务并发;提供了对底层硬件的抽象,使得开发者可以更关注应用程序的逻辑;RTOS还提供了同步和通信机制,使得任务之间的同步和通信更容易实现。但RTOS会占用一些资源,且学习难度较大。

5、任务:被运行起来的函数

任务是一个函数(代码),被保存在flash(闪存)中。

6、CPU和内存的关系

(1)F407内部:

CPU:中央处理器

flash:存放代码,需要借用特殊工具或手段才能把程序写进flash(保证安全性)

ram:存放数据

外设:外围设备

内核:ARM公司提供,F407是M4内核

(2)在用户模式下,ARM可见的寄存器有16个32位的寄存器(r0~r15),还有一个当前状态寄存器。

r0~r12用于计算

r13:用于存储栈的栈顶(SP:栈顶指针)

r14:用于存储程序的返回地址(LR链接寄存器)

r15:指向下一条需要运行指令的地址(PC程序计数器)

(3)ARMV7架构,采用三级流水结构

取指(fetch):从内存中读取下一条要执行的指令,存入指令寄存器。

译码(decode):对取指阶段获取的指令进行解析,确定指令的操作类型(如算术运算、数据传输、分支跳转等),并识别操作数(寄存器编号、立即数等)。

执行(execue):根据译码结果,由算术逻辑单元(ALU)、乘法器等功能模块完成运算,同时处理数据的读写(如访问寄存器或内存)。

当系统稳定运行时,三条不同的指令会同时处于不同的处理阶段:

第一条指令正在执行阶段(由 ALU 等部件处理实际运算)

第二条指令处于译码阶段(解析指令含义和操作数)

第三条指令正在取指阶段(从内存读取指令)

7、堆栈的作用

(1)栈(stack)

函数的形参、局部变量这些参数都是保存在栈中;

现场保护,寄存器r0~r15当中的值保存在栈中;

栈的增长方向从高地址往地地址增;

操作系统重的任务的栈大小需要指定,并且每个任务的栈相互独立、互不影响。

(2)堆

使用malloc函数动态分配的内存来自堆

(3)静态空间

全局变量、静态变量存储在静态存储区

(4)栈的大小怎么分

没有具体的数值大小,只能根据定义的局部变量大小进行估算

(5)堆的空间怎么分

heap4.c中有一个大数组,从这个数组中去分

8、任务的状态

(1)就绪态:等待被调度到运行的状态,任务被创建时就是就绪态;

(2)运行态:正在运行的状态;

(3)阻塞态:任务当前正在等待某个事件,比如信号量或外部中断,事件结束就是就绪态;

(4)挂起态:被执行了挂起程序后的状态,此时这个任务对任务调度器是不可见的。

9、任务的优先级

数字越大,优先级越高(与中断优先级相反)

10、任务的调度

(1)抢占式调度:高优先级可抢占低优先级的任务,假如高优先级的任务一直不释放CPU资源,低优先级的任务永远无法运行。

(2)时间片轮转:优先级相同时,按时间片(systick),轮流运行任务。

(3)合作式调度

(4)空闲任务礼让:在没有任务运行时,会有一个空闲任务,可用来统计CPU的使用率,还给“自杀”后的任务进行资源的回收。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值