嵌入式知识点(STM32、uart、spi、iic等总线)

很久之前学过stm32了,忘记了大部分基础知识了,最近找工作,总结回顾一下

STM32是意法半导体(STMicroelectronics)生产的一系列32位微控制器(MCU)的统称

我学习的这块开发板全称是stm32f103rct6

芯片认识

1 .内核和主频:Cortex-M3内核,主频72Mhz,区别于F4是基于Cortex-M4内核,主频180Mhz

2 .浮点运算:F1无浮点运算单位(fpu),F4有;(因为F1没有支持浮点运算的硬件条件)

f1在处理时间精度很高的场景就不行

2.1 此处扩展:FPU(硬件浮点单元),它是一个采用Verilog语言实现的符合IEEE 754标准的浮点运算单元

3功能性能:F4外设比F1丰富且功能更强大,比如GPIO翻转速率、上下拉电阻配置、ADC精度等;
4内存大小:F1内部SRAM最大64K,F4有192K(112+64+16)

后面再补充对stm32本身的认识扩展,认识芯片可以帮助我们在开发产品的时候,更快的定位到项目所合适的芯片

5 stm32系统架构

4个主动单元+4个被动单元

了解架构有什么用呢?

从底层出发:

计算机组成原理告诉我们 计算机硬件由5大部分构成:运算器,控制器,存储,输入/输出设备。

其中运算器和控制器构成中央处理器(CPU),可以是Intel的I3/I5/I7...,也可以是ARM的M3/M4/M7/A8/A9...等

存储器又分为内存与外存,可以是PC端的DDR和硬盘,也可以是单片机端的SRAM和Flash。

上图的系统架构体现出计算机组成原理的设计,各个模块之间通过总线进行通信。

扩展:

哈佛体系和冯诺依曼体系的区别就在于,前者的指令集和数据分别存储在不同的存储器,走不同的总线,而后者都存在同一个存储器中

stm32的启动过程(在线升级的时候要了解启动的细节)

复位后做2件事:1 找到栈顶位置,2 找到reset_handler的地址

上电->执行复位中断->运行(c库函数)__main->执行用户main

在startip.stm32文件查看代码

通过Boot引脚设定,寻找初始地址
初始化栈指针 __initial_sp
指向复位程序 Reset_Hander
设置异常中断 HardFault_Handler
设置系统时钟 SystemInit
调用C库函数 _main

stm32——gpio学习

GPIO 8种工作模式(gpio_init.GPIO_Mode):
(1) GPIO_Mode_AIN 模拟输入
(2) GPIO_Mode_IN_FLOATING 浮空输入
(3) GPIO_Mode_IPD 下拉输入
(4) GPIO_Mode_IPU 上拉输入
(5) GPIO_Mode_Out_OD 开漏输出
(6) GPIO_Mode_Out_PP 推挽输出
(7) GPIO_Mode_AF_OD 复用开漏输出
(8) GPIO_Mode_AF_PP 复用推挽输出

两条挂载的总线:

APB2负责 AD,I/O,高级TIM,串口1。
APB1负责 DA,USB,SPI,I2C,CAN,串口2345,普通TIM,PWR

stm32的时钟系统

1 介绍

时钟是一个稳定的电信号或者是一个震荡信号()

1 时钟系统可以使得stm32里面的各个外设保持良好的协调工作,

一个微控制器系统中的处理器、外设、其他功能模块都要相互配合来完成任务,时钟就是这个组织者,会在固定的时间发送信号,告诉每个模块何时开始执行操作。

作用:总线时钟、外设时钟、处理器时钟、一些需要时序控制的外设

2 stm32的时钟源有多少个

时钟源来源:内部时钟(来自于APB总线上的时钟)+外部时钟1来自通道1和通道2,外部时钟2:ETR引脚的(也就是IO口可以复用为这ETR引脚上))、内部触发输入(用于触发定时器级联的)

GPIO部分

重点部分:

GPIO有关实验:

跑马灯:使能时钟、调hal库里面的gpio的初始化函数(选择模式、外设寄存器的地址等参数、引脚号等)、写gpio的函数

中断

外部中断和内部中断的区别:

外部中断和内部中断是计算机系统中常见的两种中断类型,它们有以下区别:

  1. 触发条件不同:外部中断是由计算机系统外部的硬件设备或其他外部事件触发的中断,例如键盘输入、鼠标点击、定时器到达等;而内部中断是由CPU内部的某个事件或指令执行引起的中断,例如除法错误、越界访问等。
  2. 外部中断可以通过在中断控制器中设置优先级来决定处理顺序;而内部中断通常没有优先级,一般按照先来先服务的原则进行处理

        外部中断就是我们的一些外设需要用到的中断服务函数事件,达到了那个事件就出发外部中断

NVIC:嵌套向量中断控制器

管理和控制中断请求

中断向量表

存放各个中断服务函数的首地址

优先级的基本概念

抢占、响应、自然(逐层的进行判断)

抢占高的先执行,抢占相同,判断响应优先级高的先执行、响应优先级相同的,判断自然优先级(自然优先级数值越小优先级越高)

按键中断实验(gpio控制输入)

GPIO初始化(使能时钟、设置工作模式、输入输出状态(可选))、led初始化、key初始化

在while{1}中调用 gpio的翻转函数,同时接收到gpio的电平变化

串口通信

1 波特率:每秒传输的bit数(数字信号中每秒钟能够传输的二进制位数

比特率=波特率*log2 M( 二进制系统中,波特率=比特率)

扩展知识点(串行、并行、全双工/半双工、同步/异步)

串行:串行通信是指利用一条传输线将数据一位位地顺序传送。(点对点)

并行:并行通信是指利用多条传输线将一个数据的各位同时传送。

同步和异步的区别就是通信过程中是否有时钟信号(同步使用到了时钟)

例如串口,将所有数据规定起始位、数据为、校验位等方式保证数据通信良好

同步通信,收发设备双方会使用一根信号线表示时钟信号,在时钟信号的驱动下双方进行协调,同步数据。通讯中通常双方会统一规定在时钟信号的上升沿或下降沿数据线进行采样

全双工、半双工、单双工:

根据数据传输方向、以及数据是否可同时传输的强度递增

单双: 只允许数据按照一个固定的方向传送

半双工:两个设备之间可以收发数据,但是不能在同一时刻进行

全双工:在同一时刻,两个设备之间可以同时进行发送和接收数据。

IWDG独立看门狗(独立在于他的时钟由RC震荡器题干,主时钟发生故障还可以工作)

LSI时钟F1的是40MHZ,

作用:监控系统是否死机等问题,出现问题就不会喂狗了,一段时间没喂狗就会产生系统复位信号,将单片机系统复位。

配置实验流程:

HAL库初始化、时钟使能、看门狗初始化(设置溢出时间、预分频系数)、main函数中执行喂狗函数以及延时多久喂狗

WWDG窗口看门狗

WWDG本质:能产生系统复位信号提前唤醒中断的计数器

作用:

  1. 监测系统状态:通过周期性地重置计数器,WWDG可以持续监测系统的运行状态,确保系统正常工作。

2 防止系统死锁:当系统出现死锁或其他异常情况时,WWDG会触发复位或中断信号,从而使系统进入安全状态。

I2C(飞利浦公司开发的   同步、串行、半双工)

常用的串行通信接口

用于连接微控制器与其他外部设备,如传感器、存储器和外围设备等

一根数据线(双向传输数据)、一根时钟线(同步数据传输),可以实习多个设备的串行通信

2、IIC总线上可以挂很多设备:多个主设备,多个从设备(外围 设备)。上图中主设备是两个单片机,剩下的都是从设备(前提:地址为1,可以通过时钟复用来访问不同从设备)

3 总线裁决:当多个主机想要占用主线的时候,I2C通过总线仲裁,以决定哪台主机控制总线

4、上拉电阻一般在4.7k~10k之间  ,让总线空闲的时候i,维持总线为高电平

       

IIC协议

三个信号(起始SCL高电平,SDA下降沿跳变(主机发出)、停止SCL高电平,SDA上升沿跳变(主)、应答(从))

两个注意(数据有效性、数据传输速率)

一个状态(空闲状态)

速度:从标准模式(100 kbps)到高速模式(3.4 Mbps)。

缺点:挂载的从设备多了的时候,电容负载增多,影响通信质量

传输流程:

挂载一个上拉电阻,保证空闲时期sda和scl都是高电平,总线状态是休闲状态

当sda在scl为高电平的时候,从上升沿变成下降沿,就是起始信号发送完成。接下来是7位设备地址码,用来区别和哪个从设备通信。然后就是读写数据位,写数据是0,读数据是1.然后就是应答信号,这是从机发送给主机的,收到就是0,没收到就是1。然后的8位就是设备寄存器的地址。如果这个从机是一个存储器,可能就是往该存储器的该位置出写入数据。然后单片机再获取一个应答信号,接下来8位是给该存储器的寄存器要写入的数据。然后发送完数据,从机给主机发送应答信号,最后是停止位

数据传输过程中IIC协议规定,为了避免传输过程中出现起始/停止信号,只有在时钟线SCL为低电平的时候,SDA可以翻转电平,而在SCL为高电平的时候,必须维持不变。

主从设备也只有在SCL为高电平的时候读取SDA的数据

传输格式

应答机制:

问题二:I2C配置主机模式端口该怎么配置?
硬件模式:复用开漏输出、既不上拉也不下拉。(快速模式:400 Kbit/s)
软件模拟:推挽输出、配置上拉电阻。
问题三:I2C仲裁机制?

简单说,它遵循“低电平优先”的原则,即谁先发送低电平谁就会掌握对总线的控制权。

SPI(芯片和芯片间通信  全双工、同步 、串行)

问题一:SPI需要几根线?

MISO 主设备数据输入,从设备数据输出。
MOSI 主设备数据输出,从设备数据输入。
SCLK 时钟信号,由主设备产生。
CS 从设备片选信号,由主设备控制。

问题二:SPI通信的四种模式?

各个工作模式的不同在于 SCLK 不同, 具体工作由 CPOL时钟极性,CPHA(时钟相位) 决定

问题三:该如何确定使用哪种模式?

1 看从机的SCLK的极性需求,不工作的时候是在高还是低,来确定CPOL位0还是1

2 看从机芯片手册,从机芯片是在SCLK的下降沿采集数据还是上升沿采集数据

CAN(stm  can)

问题一:CAN总结介绍一下?
CAN控制器根据 CAN_L 和 CAN_H上 的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者比居其一。发送方通过使总线电平发生变化,将消息发送给接收方。
问题二:CAN初始化配置步骤?
(1)配置相关引脚的复用功能,使能CAN时钟
(2)设置CAN工作模式及波特率等(CAN初始化环回模式,波特率500Kbps )
(3)设置滤波器
问题三:CAN发送数据格式?
CanTxMsg TxMessage;
TxMessage.StdId=0x12; // 标准标识符
TxMessage.ExtId=0x12; // 设置扩展标示符
TxMessage.IDE=CAN_Id_Standard; // 标准帧
TxMessage.RTR=CAN_RTR_Data; // 数据帧
TxMessage.DLC=len; // 要发送的数据长度 发送8个字节
for(i=0;i<len;i++)
TxMessage.Data[i]=msg[i]; //数据

汽车通信CAN

一文读懂CAN总线协议 (超详细配34张高清图)_can总线通信协议-CSDN博客

CAN总线网络的结构有闭环、开环两种形式

闭环(由ISO 11898):总线两端各连接一个120欧的电阻,两根信号线形成回路

开环(ISO 11519-2标准):两根信号线独立,各自串联一个2.2k欧的电阻

八、DMA
问题:
问题一:DMA介绍?
直接存储器存取(DMA) 用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。
问题一:DMA传输模式有几种?
DMA_Mode_Circular 循环模式
DMA_Mode_Normal 正常缓存模式
应用场景:GPS、蓝牙,都是用的循环采集,DMA_Mode_Circular模式。
解答:
参看:STM32开发 – DMA详解

一个比较重要的函数,获取当前剩余数据量大小,根据设置的接收buff大小减去当前剩余数据量 ,得到当前接收数据大小。

九、中断


问题:
问题一:描述一下中断的处理流程?
(1)初始化中断,设置触发方式是上升沿/下降沿/双沿触发。
(2)触发中断,进入中断服务函数
问题二:STM32的中断控制器支持多少个外部中断?
STM32的中断控制器支持19个外部中断/事件请求:
从图上来看,GPIO 的管脚 GPIOx.0~GPIOx.15(x=A,B,C,D,E,F,G)分别对应中断线 0 ~ 15。
另外四个EXTI线的连接方式如下:
● EXTI线16连接到PVD输出
● EXTI线17连接到RTC闹钟事件
● EXTI线18连接到USB唤醒事件
● EXTI线19连接到以太网唤醒事件(只适用于互联型产品)
中断服务函数列表:
IO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数。
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
EXTI9_5_IRQHandler
EXTI15_10_IRQHandler
解答:
参看:STM32开发 – 外部中断详解

十、时钟系统
问题:
问题一:STM32有几个时钟源?
STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。
①、HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。
②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
③、LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。 
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。

TIMER通用定时器(PWM的输出)

STM32F103 有众多的定时器,其中包括 2 个基本定时器(TIM6 和 TIM7)、4 个通用定时 器(TIM2~TIM5)、2 个高级控制定时器(TIM1 和 TIM8)(高级定时器可以产生7路PWM输出)

利用STM32的    除了TIM6 和TIM7这两个定时器其他都可以产生PWM输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值