STM32单片机知识概要

  • 背景
  • 一、GPIO
  • GPIO介绍
  • 二、中断
  • stm32中断
  • NVIC
  • EXTI(Extern Interrupt)外部中断
  • AFIO复用引脚
  • 总结
  • TIM定时器
  • 基础定时器
  • 通用定时器
  • 时钟选择
  • OC(Output Compare)输出比较
  • IC(Input Capture)输入捕获
  • Encoder Interface 编码器接口
  • ADC(Analog-Digital Converter)模数转换器
  • DMA(Direct Memory Access)直接存储器存取
  • 存储器映像
  • DMA框图
  • DMA基本框图
  • 背景

    入职嵌入式这个行业已经两年了,项目做了已经有四五个了,做项目的时候用到什么技术就去学什么技术,倒不是没有系统的学过。而是学完之后可能很长一段时间不用,一些细节上的东西都忘的差不多了,接到一个项目知道大概需要用到哪些知识,但是一些细节的东西很难想起来。还需要去网上查资料,从新学一遍。写这篇文章的目的就是为了温故而知新。内容如有错误恳请指正。

    一、GPIO

    GPIO介绍

    GPIO(General Purpose Input Output)通用输入输出口,可配置为8种模式4种输入(上拉输入、下拉输入、浮空输入、模拟输入)4种输出(推挽输出、开漏输出、复用推挽输出、复用开漏输出)其中4种输入比较容易理解,推完输出和复用推完输出容易让迷糊,我理解的是推挽输出就是单片机对IO口的控制。而复用推挽输出即可以当做普通IO使用也可以、把引脚的控制权给到一些片上外设(IIC、SPI、UART、PWM等)。

    二、中断

  • 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行。
  • 中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源
  • 中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回
  • stm32中断

    stm32的中断最多有68个可屏蔽中断通道,包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等

    NVIC

    stm中断由NVIC进行管理,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级。

    抢占优先级和响应优先级,其实是一个中断所包含的两个优先级,其中前者是对抢占优先级的级别划分,后者是相同抢占优先级的优先级别的划分。
    比如:中断A抢占优先级比B高,那么A的中断可以在B里面触发,忽略响应优先级
    A和B抢占优先级相同,则A、B的响应优先级决定谁先响应。

    EXTI(Extern Interrupt)外部中断

    EXTI(Extern Interrupt)外部中断
    EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序
    支持的触发方式:上升沿/下降沿/双边沿/软件触发
    支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断
    通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒
    触发响应方式:中断响应/事件响应(触发别的外设,属于外设之间的联合工作)

    AFIO复用引脚

    AFIO主要用于引脚复用功能的选择和重定义
    在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择

    总结

    一般来说中断大多数都是处理突发事件,但是按键触发一版推荐使用定时器中断,即可以后台处理按键值也可以处理案件抖动和松手检测的问题。

    TIM定时器

    定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断。定时器不仅包含定时中断功能,还包含内外时钟源选着、输入捕获、输出比较、编码器接口、主从触发模式等多种功能。根据复杂度和场景的不同分为基础定时器、通用定时器、高级定时器三种。

    基础定时器

    ● 16位自动重装载累加计数器
    ● 16位可编程(可实时修改)预分频器,用于对输入的时钟按系数为1~65536之间的任意数值分频
    ● 触发DAC的同步电路
    ● 在更新事件(计数器溢出)时产生中断/DMA请求

    基础定时器主要有三个时基单元构成计数器寄存器(CNT)、预分频寄存器(PSC)、自动重装载寄存器(ARR)。

    通用定时器

    ● 16位向上、向下、向上/向下自动装载计数器
    ● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值
    ● 4个独立通道:
    ─ 输入捕获
    ─ 输出比较q
    ─ PWM生成(边缘或中间对齐模式)
    ─ 单脉冲模式输出
    ● 使用外部信号控制定时器和定时器互连的同步电路
    ● 如下事件发生时产生中断/DMA:
    ─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
    ─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
    ─ 输入捕获
    ─ 输出比较
    ● 支持针对定位的增量(正交)编码器和霍尔传感器电路
    ● 触发输入作为外部时钟或者按周期的电流管理

    通用定时器有向上计数、向下计数、中央对齐计数模式。

    时钟选择

    计数器时钟可由下列时钟源提供:
    ● 内部时钟(CK_INT):一般的定时器中断选择内部时钟。
    ● 外部时钟模式1:外部输入脚(TIx)
    ● 外部时钟模式2:外部触发输入(ETR)外部触发输入可以通过TIMx_CH1_ETR引脚输入的波形当作定时器的时钟。一般用来外部触发的计数。
    ● 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。

    OC(Output Compare)输出比较

  • 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形
  • 每个高级定时器和通用定时器都拥有4个输出比较通道
  • 高级定时器的前3个通道额外拥有死区生成和互补输出的功能
  • IC(Input Capture)输入捕获

  • 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数
  • 每个高级定时器和通用定时器都拥有4个输入捕获通道
  • 可配置为PWMI模式,同时测量频率和占空比
  • 可配合主从触发模式,实现硬件全自动测量


  • 总结
    Freq = CK_PSC / (PSC + 1) / (ARR + 1)
    15.25hz = 72000000 / 72 / 65535
    最小只能测15.25hz 最大1Mhz,如果小于15.25hz 计数器就会溢出。如果想测量1hz的的频率那么分频之后的数值不能大于65536。可以把PSC(预分频)的值设为1100,ARR(重装载)设为65536。

    Encoder Interface 编码器接口

  • 编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度
  • 每个高级定时器和通用定时器都拥有1个编码器接口
  • 两个输入引脚借用了输入捕获的通道1和通道2


    总结
    通过获取CNT的计数值可以可以得出当前的电机当前位置,通过设置一个闸门时间可以获取电机的速度,如果位置和速度都想获取,在闸门时间加上当前获取到CNT计数值然后把CNT计数器清零。
  • ADC(Analog-Digital Converter)模数转换器

  • ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁

  • 12位逐次逼近型ADC,1us转换时间

  • 输入电压范围:03.3V,转换结果范围:04095

  • 18个输入通道,可测量16个外部2个内部信号源

  • 规则组注入组两个转换单元

  • 模拟看门狗自动监测输入电压范围

  • stm32单片机ADC触发分为软件触发和硬件触发,硬件触发。软件触发由CPU发出指令进行触发。硬件一半由定时器或者外部引脚输出进行触发。

  • 规则组只有一个16位ADC数据寄存器,如果多个通道检测要及时的把数据转运出去不然数据就会被覆盖,多路数据检测最好配合DMA使用。

  • ADC的时钟是由RCC的APB2控制。

  • 转换模式分为单次转换、连续转换扫描模式和非扫描模式组合在一起有4种转换模式

  • 数据对齐方式一半分为左对齐或是右对齐

  • 转换时间公式 TCONV = 采样时间 + 12.5个ADC周期例如:当ADCCLK=14MHz,采样时间为1.5个ADC周期 TCONV = 1.5 + 12.5 = 14个ADC周期 = 1μs

  • 校准
    ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换中每个电容器上产生的误差
    建议在每次上电后执行一次校准
    启动校准前, ADC必须处于关电状态超过至少两个ADC时钟周期
    一般直接使用库函数依次调用就行。

  • DMA(Direct Memory Access)直接存储器存取

  • DMA可以提供外设到寄存器寄存器到寄存器之间的高速数据传输,无需CPU干预,节省了CPU资源。
  • 12个独立可配置的通道:DAM1(7个通道)、DMA2(5个通道),每个通道支持硬件触发和软件触发,一般外设到寄存器使用硬件触发,寄存器到寄存器使用软件触发。
  • DMA每个通道的外部请求信号都是不同的
  • 存储器映像

    DMA框图

    DMA基本框图


    自动重装器:是计数器计到0的时候是否从新开始计数。
    硬件触发:一般是外设请求进行触发。
    软件触发:DMA立即触发转运直到吧传输计数器清零。如果使用自动重装器使用软件进行触发那么数据就会一直转运,一直停不下来。

  • DMA转运开始有三个条件:
    1. 传输计数器大于0
    2. 触发源有触发信号
    3. DMA使能
      给传输计数器赋值的时候,传输要吧DMA失能,才能给传输计数器赋值。
  • 作者:豆瓣酱573

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【STM32知识回顾】

    发表回复