单片机笔记

目录

时钟

GPIO:

中断:

外部中断:

定时器:

模数转换(ADC):

DMA

 串口:

I2C

SPI


时钟

Stm32 有5个时钟源:HSI、 HSE、LSI、LSE、PLL

HSE:高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHZ~16MHz。

HSI:高速内部时钟,RC振荡器,频率为8MHZ,精度不高。

LSI:低速内部时钟,频率为40kHz。

LSE:低速外部时钟,接频率为32.768kHz的石英晶体。一般用于实时时钟(RTC)。

PLL:锁相环倍频,将时钟输入源先进行倍频再输出。

AFIO时钟:用到 外部中断 和 端口重映射 的时候要使能AFIO时钟。

GPIO

浮空输入:输入一个高电平时,会检测到高电平;输入低电平时,会检测到低电平;无信号输入时,该端口的电平是不确定的。

上拉输入:输入一个高电平时,会检测到高电平;输入低电平时,会检测到低电平;无信号输入时,会检测到高电平。

下拉输入:输入一个高电平时,会检测到高电平;输入低电平时,会检测到低电平;无信号输入时,会检测到低电平。

模拟输入:端口的模拟信号直接模拟输入到ADC模块。

开漏输出:当设置输出为高电平的时候,此时I/O端口的电平不一定为高电平,当有上拉电阻时可以输出高电平。当设置输出的值为低电平的时候,此时I/O端口的电平就是低电平。
同时,I/O端口的配置为开漏输出后,可以读取端口的高低电平;

开漏输出具有“线与”功能,一个为低,全部为低。

复用开漏输出:与开漏输出相同,只不过由外设控制高低电平。

推挽输出:当设置输出为高电平时,端口输出高电平。当设置输出为低电平时,端口输出低电平。
当输出低电平以后,端口可以进行输入。

复用推挽输出:与推挽输出相同,只不过由外设控制高低电平。

端口复用:IO口默认是用来做普通的输出输入引脚,而配置为外设需要用到IO口,就叫IO口的复用。

重映射:每个外设都有若干个输入输出引脚,一般这些引脚的输出端口都是固定不变的。但在实际使用中,为了可以更好地安排引脚的走向和功能,即一个外设的引脚除了具有默认的端口外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其它的端口。

列如:串口1除了用PA9PA10外,还可以重映射到PB6,PB7。

中断:

        对于CPU来说,当它在正常处理事件A时,突然发生了另一件事件B(中断发生)需要CPU去处理,这时CPU就会暂停处理事件A(中断响应),转而去处理事件B(中断服务)。当事件B处理完以后,再回到事件A原来中断的地方继续执行事件A(中断返回)。

系统异常 :8个

外部中断 :60个

抢占优先级:优先级高的能打断优先级低
响应优先级:当抢占优先级相同时,响应优先级高的先执行

优先级的值越小,优先级越高。

共有五级优先级。

外部中断:


STM32的每个IO都可以作为外部中断输入,可以独立的配置触发方式(上升沿,下降沿或者双边沿触发)。
线0~15:对应外部IO口的输入中断。

线16:连接到PVD输出。

线17:连接到RTC闹钟事件。

线18:连接到USB唤醒事件。

事件响应不会触发中断,而是触发别的外设操作,属于外设之间的联合工作

定时器:

基本定时器:TIM6 和 TIM7 是一个 16 位的只能向上计数的定时器,只能定时。
通用定时器:TIM2/3/4/5 是一个 16 位的可以向上/下计数的定时器,可以输入捕获、比较输出、PWM生成、单脉冲模式输出。有 4个外IO(TIM1_CH1 /2/3/4)。
高级定时器:TIM1/8是一个 16 位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,还可以有三相电机互补输出信号,有 8 个 IO。

TIM1_CH1/2/3N 与 TIM1_CH1/2/3(6个)TIM1_CH4,TIM1_BKIN是故障信号,关闭TIM1的输出。

定时器的时钟来源有4个:内部时钟(CK_INT),外部时钟模式1(TIx),外部时钟模式2(ETR),内部触发模式(ITRx,这个用来定时器的同步)

向上计数模式:从0向上自增,计数到重装值,清零并申请中断。基本定时器仅支持该模式。

向下计数模式:从重装值开始,向下自减直到0,回到重装值同时申请中断。

中央计数模式:从0开始,先向上自增到重装值,申请中断;再向下自减,减到0,申请中断;继续下一轮,依次循环。

使用场景:

1:基本定时,定时器每隔这个时间产生一个中断,来实现每隔一个固定时间执行一段程序。

2:输出比较,最常见的用途就是产生PWM波形,用于驱动电机等设备。

3:输入捕获,来实现测量波形频率占空比

4:编码器接口,读取正交编码器的输出波形
 

基本定时:

(1) 开定时器时钟 

(2) 初始化时基初始化结构体;

(3) 使能中断;

(4) 打开定时器;

(5) 编写中断服务程序

定时器中断更新时间:T=((arr+1)*(psc+1))/Tclk,ARR为自动装载寄存器(1~65535)、PSC为分频系数,TCLK为输入时钟频率(Mhz)

输出比较:

PWM频率(HZ):Freq = CK_PSC(默认72MHZ) / (PSC + 1) / (ARR + 1)

PWM占空比(%):Duty = CCR / (ARR + 1)

PWM分辨率(%):R = 1 / (ARR + 1),ARR值越大,分辨率越好。

配置:

配置推挽输出GPIO

配置时基单元,

配置输出比较单元(CCR值,模式,极性选择,使能输出)

启动计数器

输入捕获:

1、RCC开启时钟,把GPIO和TIM的时钟打开

2、GPIO初始化,把GPIO配置成输入模式,一般选择上拉或浮空

3、配置时基单元,让CNT计数器在内部时钟的驱动下自增运行

4、配置输入捕获单元,包括滤波器、极性、直连通道还是交叉通道、分频器

5、选择从模式的触发源,触发源选择为TI1FP1(一个库函数给个参数即可)

6、选择触发之后执行的操作,执行Reset操作(一个库函数即可)

7、配置完成,TIM_Cmd函数开启定时器

PWMI模式:第一个捕获通道使用上升沿触发,用来捕获周期,第二个通道使用下降沿触发用来捕获占空比,两个通道同时对一个引脚进行捕获就可同时测量频率和占空比。

1、RCC开启时钟,把GPIO和TIM的时钟打开

2、GPIO初始化,把GPIO配置成输入模式,一般选择上拉或浮空

3、配置时基单元,让CNT计数器在内部时钟的驱动下自增运行

4、初始化输入捕获

5、配置TRGI触发源为TI1FP1

6、配置从模式为Reset

7、开启定时器

编码器接口:编码器测速一般应用在电机上,使用PWM波驱动电机,再使用编码器测量电机速度,然后再用PID算法进行闭环控制。它将角位移或者角速度转换成一连串电数字脉冲,可以用来测量位置和速度。每转过单位的角度就发出一个脉冲信号,通常为A相、B相输出。A相、B相为相互延迟1/4周期的脉冲输出(即正交信号),根据延迟关系可以区别正反转,而且通过取A相、B相的上升或下降沿可以进行1、2、4倍频。

模数转换(ADC):

规则组:用于常规使用。
注入组:用于突发情况使用ADC功能。

ADC的规则组可以自定义转换通道顺序和转换的通道个数。在实际应用中,有时候希望有一些特别的通道具有很高的优先权,需要在规则组进行转换的时候强制打断,进行另一个通道的转换,这样一组通道,叫做注入组。

扫描模式:会根据ADC通道数量按顺序进行N次转换,全部转换完成设置 EOC(规则组转换结束) 标志位(播放歌单的全部歌曲)。

非扫描模式:仅会对规则组位置一的通道进行1次转换,转换完成设置 EOC 标志位(播放歌单的第一首歌曲)。

单次转换:在开始转换后,仅仅对规则组整组进行一次转换(音乐只播放一次)。

连续转换:在开始转换后,会循环对规则组整组进行转换(音乐一直播放)。

DMA

数据复制方向支持:存储器到存储器、存储器到外设、外设到存储器。需注意,有的存储器或寄存器不支持写入操作。

数据宽度:支持字节(Byte,8位)、半字(HalfWord,16位)、字(Word,32位),复制对齐为低位对齐。

模式:正常模式(复制完就停下)、循环模式(复制完重新开始)(存储器到存储器只能用正常模式)

 串口:

由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口。

由起始位、数据位、校验位以及停止位,以及波特率组成,通讯双方的数据包格式要约定一致才能正常收发数据。

波特率:规定每单位时间内,传输的码元,用于异步通讯。

起始和停止信号:起始信号由一个单位时间低电平 的数据位表示,而数据包的停止信号可由 0.5、1、 1.5或 2 个逻辑 1的数据位表示。

I2C

软件模拟I2C优点:可以用在任何GPIO口;不会发生卡死(最多出错)

起始信号:SCL为高电平,SDA拉低

停止信号:SCL为高电平,SDA拉高

数据传输:在SCL为高电平期间,SDA数据有效,SCL为低电平期间,SDA决数据变化。

硬件I2C优点:速度比软件模拟快;容易出现卡死的问题。

        起始信号,其具体步骤如下:

  1. 把SDA置为高电平。
  2. 把SCL置为高电平,等待一个I2C时钟周期的时间,确保I2C总线空闲。
  3. 把SDA置为低电平,表示发出起始信号。
  4. 把SCL置为低电平,为发送第一个字节做准备。

        结束信号的步骤如下:

  1. 把SDA置为低电平,表示发出结束信号。
  2. 把SCL置为高电平,待半个I2C时钟周期后,把SDA设置为高电平,表示结束传输。
  3. 软件I2C的读操作

        写操作的主体部分,具体步骤如下:

  1. 发送开始信号
  2. 发送设备地址和读写控制位,根据具体设备的地址和I2C协议可知道读写控制位在设备地址的最后一位。通常读操作控制位为1,写操作控制位为0。
  3. 响应设备给出的应答信号。
  4. 将要写入的数据发送给设备。
  5. 响应设备给出的应答信号。
  6. 重复步骤,直到写入所有要发送的数据。
  7. 发送结束信号。

        读操作的主体部分,具体步骤如下:

  1. 发送开始信号
  2. 发送设备地址和读写控制位,并响应从设备的应答信号。
  3. 发送要读取的寄存器地址,并响应从设备的应答信号。
  4. 发送开始信号
  5. 发送读取命令,并等待从设备的应答信号。
  6. 读取从设备发送的数据,并给出应答信号或非应答信号。
  7. 重复步骤,直到读取到所有所需的数据。
  8. 发送结束信号。

SPI

NSS:片选设备线,主机选择对应的从机进行传输数据。SPI中规定通信以NSS信号线拉低为开始,拉高为结束。
SCK:时钟信号线,因为是同步通信,所以需要一根时钟信号线来统一主机和从机之间的数据传输。
MOSI:(Master Output, Slave Input),主机输出/从机输入,
MISO:(Master Input,, Slave Output),负责从机向主机传输数据。
 

CPOL决定SCLK在没有数据传输的时候的电平状态。

CPOL=0:空闲状态时,SCLK保持低电平

CPOL=1:空闲状态时,SCLK保持高电平

CPHA决定数据位传输是从第一个时钟边沿开始,还是从第二个时钟(SCLK)边沿开始。

CPHA=0:数据从第一个时钟(SLCK)边沿开始采集

CPHA=1:数据从第二个时钟(SLCK)边沿开始采集

起始信号:NSS(CS片选线)拉低电平

停止信号:NSS(CS片选线)拉高电平

数据有效性:(采样)当SCK上升沿触发时,下降沿采样的(MISO或MOSI)为有效信号。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值