• STM32笔记记录


     串口记录:

        STM32有好几个串口。比如说STM32F103ZET6有5个串口,串口1的引脚对应的IO为PA9,PA10.PA9,PA10默认功能是GPIO,所以当PA9,PA10引脚作为串口1的TX,RX引脚使用的时候,那就是端口复用。

       复用端口初始化有几个步骤:
    1) GPIO端口时钟使能。要使用到端口复用,当然要使能端口的时钟了。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    2) 复用的外设时钟使能。比如你要将端口PA9,PA10复用为串口,所以要使能串口时钟。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
    3) 端口模式配置。 在IO复用位内置外设功能引脚的时候,必须设置GPIO端口的模式,至于在复用功能下GPIO的模式是怎么对应的,这个可以查看手册。

      所以,我们在使用复用功能的是时候,最少要使能2个时钟: 
            1) GPIO时钟使能 ;2) 复用的外设时钟使能   同时要初始化GPIO以及复用外设功能 

    串口设置的一般步骤可以总结为如下几个步骤:
           1)  串口时钟使能,GPIO时钟使能
           2)  串口复位
           3)  GPIO端口模式设置
           4)  串口参数初始化 
           5)  开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
           6)  使能串口
           7)  编写中断处理函数

       端口重映射:(暂略)

    中断量控制:

         STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。而我们常用的就是这68个可屏蔽中断,但是STM32的68个可屏蔽中断,在STM32F103系列上面,又只有60个(在107系列才有68个)。

         ISER[2]:ISER全称是:Interrupt Set-Enable Registers,这是一个中断使能寄存器组。

         ICER[2]:全称是:Interrupt Clear-Enable Registers,是一个中断除能寄存器组。

         ISPR[2]:全称是:Interrupt Set-Pending Registers,是一个中断挂起控制寄存器组。

         ICPR[2]:全称是:Interrupt Clear-Pending Registers,是一个中断解挂控制寄存器组。

         IABR[2]:全称是:Active  Bit  Registers,是一个中断激活标志位寄存器组。

         IPR[15]:全称是:Interrupt Priority Registers,是一个中断优先级控制的寄存器组。

         简单介绍一下STM32的中断分组:STM32将中断分为5个组,组0~4。该分组的设置是由SCB->AIRCR寄存器的bit10~8来定义的。

        

     通过这个表,我们就可以清楚的看到组0~4对应的配置关系,例如组设置为3,那么此时所有的60个中断,每个中断的中断优先寄存器的高四位中的最高3位是抢占优先级,低1位是响应优先级。每个中断,你可以设置抢占优先级为0~7,响应优先级为1或0。抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。

      STM32的中断如此之多,配置起来并不容易,因此,我们需要一个强大而方便的中断控制器NVIC (Nested Vectored Interrupt Controller)。NVIC是属于
    Cortex内核的器件,不可屏蔽中断 (NMI)和外部中断都由它来处理,而SYSTICK不是由NVIC来控制的。

        使用NVIC来配置中断时,自然想到ST库肯定也已经把它封装成库函数了。对NVIC初始化NVIC_Init() 函数,首先要定义并填充一个NVIC_InitTypeDef 类型的结构体。

        这个结构体有四个成员:
          NVIC_IRQChannel  需要配置的中断向量;
          NVIC_IRQChannelCmd  使能或关闭相应中断向量的中断响应;
          NVIC_IRQChannelPreemptionPriority  配置相应中断向量抢占优先级;
          NVIC_IRQChannelSubPriority  配置相应中断向量的响应优先级;

        首先要用NVIC_IRQChannel参数来选择将要配置的中断向量,用NVIC_IRQChannelCmd参数来进行使能(ENABLE)或关闭(DISABLE)该中断。在NVIC_IRQChannelPreemptionPriority成员要配置中断向量的抢占优先级,在NVIC_IRQChannelSubPriority需要配置中断向量的响应优先级。

       抢占优先级和响应优先级
       STM32的中断向量具有两个属性,一个为抢占属性,另一个为响应属性,其属性编号越小,表明它的优先级别越高。

       抢占,是指打断其它中断的属性,即因为具有这个属性,会出现嵌套中断(在执行中断服务函数A的过程中被中断B打断,执行完中断服务函数B再继续执行中断服务函数A),抢占属性由NVIC_IRQChannelPreemptionPriority的参数配置。
       而响应属性则应用在抢占属性相同的情况下,当两个中断向量的抢占优先级相同时,如果两个中断同时到达,则先处理响应优先级高的中断,响应属性由NVIC_IRQChannelSubPriority的参数配置。

       例如:现在有三个中断向量:
    中断向量  抢占优先级  响应优先级
      A     0      0
      B      1       0
      C    1              1

     若内核正在执行C的中断服务函数,则它能被抢占优先级更高的中断A打断,由于B和C的抢占优先级相同,所以C不能被B打断。但如果B和C中断是同时到达的,内核就会首先响应响应优先级别更高的B中断。

      NVIC只可以配置16种 中断向量的优先级,也就是说,抢占优先级和响应优先级的数量由一个4位的数字来决定,把这个4位数字的位数 分配成抢占优先级部分和响应优先级部分。有5组分配方式。

     要配置这些优先级组,可以采用库函数NVIC_PriorityGroupConfig(),可输入的参数为NVIC_PriorityGroup_0   ~  NVIC_PriorityGroup_4,分别为以上介
    绍的5种分配组。

      中断优先级设置的步骤:
      1.  系统运行开始的时候设置中断分组。确定组号,也就是确定抢占优先级和子优先级的分配位数。调用函数为NVIC_PriorityGroupConfig();
      2.  设置所用到的中断的中断优先级别。对每个中断调用函数为NVIC_Init();

  • 相关阅读:
    CSS截取字符串
    mysql数据库中列转行
    Html页面操作json串
    mysql批量上传数据
    常见的表单元素选中
    关于Connection must be valid and open.
    百度editor调用【图片上传阿里云】
    百度apistore第三方登陆
    如何提高网页运行性能
    Html页面加回滚
  • 原文地址:https://www.cnblogs.com/wangh0802PositiveANDupward/p/2832638.html
Copyright © 2020-2023  润新知