STM32学习之路-AIRCR寄存器PRIGROUP位的配置

发布者:HarmoniousDream最新更新时间:2022-10-19 来源: csdn关键字:STM32  配置 手机看文章 扫描二维码
随时随地手机看文章

AIRCR是NIVC配置中一个关键的寄存器.而PRIGROUP又是AIRCR中关键的位


让我们看看CM3技术手册中该为是怎么配置的

上面说得很清楚,PRIGROUP的值是代表一个从LSB左边开始的小数值.怎么理解呢?看看下面


CM3使用8bit位来设置这里, 也就是说从0-7位.在寄存器中是这样的


|7| 6| 5| 4| 3| 2 |1| 0|


当PRIGROUT[10:8]的值为111时,即为7时,就是说7位(第8位)为有效位的开始位,用数值代表就像这样 0.76543210


110(6)时,就是7.6543210 依次类推


而STM32原理和它一样,不过只是用了4bit来表示,看看下图

好,那现在来说说为什么要这样搞.


让我们时光倒流一下,谈谈中断优先级的问题,请看图

可以看到优先组别总用有5组, 0-4,分为占先式优先级和副优先级,为什么要搞成这样,原因在下面:


因为STM32有很多中断,要处理这些中断的时候总是需要先后顺序的,所以来给他们给级别了!


怎么设置组号呢?


在misc.h可以看到这些宏的定义


#define NVIC_PriorityGroup_0         ((uint32_t)0x700) /*!< 0 bits for pre-emption priority


                                                            4 bits for subpriority */

#define NVIC_PriorityGroup_1         ((uint32_t)0x600) /*!< 1 bits for pre-emption priority

                                                            3 bits for subpriority */

#define NVIC_PriorityGroup_2         ((uint32_t)0x500) /*!< 2 bits for pre-emption priority

                                                            2 bits for subpriority */

#define NVIC_PriorityGroup_3         ((uint32_t)0x400) /*!< 3 bits for pre-emption priority

                                                            1 bits for subpriority */

#define NVIC_PriorityGroup_4         ((uint32_t)0x300) /*!< 4 bits for pre-emption priority

                                                            0 bits for subpriority */

在看看,它的值是0x700, 在看看 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);这个函数,这就是配置AIRCR寄存器的函数


再看看它的内容


void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)

{

  /* Check the parameters */

  assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));

  

  /* Set the PRIGROUP[10:8] bits according to NVIC_PriorityGroup value */

  SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;

}

OK, AIRCR_VECTKEY的值为 #define AIRCR_VECTKEY_MASK    ((uint32_t)0x05FA0000)


再来看看这小坏蛋为什么要这样设置:

看到了吧31:16位要写0X05FA,然后与上0X700那就设置了[10:8]这里为111.再想想上面分析的,0组就是这么实现的呀!


已经晚了,今天就记录这么多吧.. 见下一篇.

关键字:STM32  配置 引用地址:STM32学习之路-AIRCR寄存器PRIGROUP位的配置

上一篇:在STM32如何在我需要的时候关闭或打开外部中断EXTI
下一篇:意法半导体在 GitHub网站上开设 STM32 Hotspot社区

推荐阅读最新更新时间:2024-11-17 15:52

基于ZigBee和STM32的室内智能照明系统的设计
随着生活水平的不断提高,人们对日常生活的无线化、网络化、智能化、节能化的需求越来越强烈,传统的照明控制系统已经无法满足人们对日常生活品质的需求。基于上述原因提出了一种基于ZigBee和STM32的室内智能照明系统的设计。 更多资讯,敬请关注大比特资讯http://www.big-bit.com/ 更多技术方案和互动,请访问大比特论坛http://bbs.big-bit.com 在人们的传统意识中,照明系统仅以照明为目的。传统的照明系统中主要的控制方式有手动控制方式和自动控制方式。其中手动控制方式简单、有效,但是过于依赖人工操作,并且控制相对分散,不能有效管理;自动控制方式主要是由时钟元件、光电元件或两者组合的方式来实现对照明设备的
[单片机]
基于ZigBee和<font color='red'>STM32</font>的室内智能照明系统的设计
STM32学习笔记】USART 新特性
支持RXD和TXD管脚互换 很多时候,我们在外接RS232芯片时,很容易将RXD和TXD两根线接反。这类低级错误,一般是老司机才会犯。如果大家知道USART的TXD和RXD管脚可以互换,那么在连接外设RS232芯片时,如果发生错误,就不必再修改硬件,只需直接在软件中将RXD和TXD的管脚反转过来即可修正错误。 参考上图,设置SWAP位,即可将RXD和TXD管脚互换。 支持接收和发送的电平极性反转 第二个特性是,接收和发送的电平极性是可以反转的。通常默认串口电平是高电平为逻辑1,低电平为逻辑0;而在ST的USART中是可以将高电平设置为逻辑0,低电平设置为逻辑1的。这一特性,让我们在一些特殊的场景下灵活使用,举
[单片机]
STM32 域与联合体结合优化操作
1、位域 详细介绍参考文章:位域 位域可以实现在信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。 例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。 为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。 所谓“位域”是把一个字节中的二进位划分为几 个不同的区域, 并说明每个区域的位数。 每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。 2、联合体 在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。 也就是使用覆盖技术,几个变量互相覆盖
[单片机]
变频器在陶瓷压砖机的配置操作
众所周知,陶瓷压砖机是当代世界陶瓷墙地砖生产线上的高科技产品。压机一停,全线停工。由此可知,压砖机在建筑陶瓷行业的重要地位,它直接关乎产品的质量问题。压砖机在我国的发展经历了比较漫长的时期,从使用大国正逐步成为生产大国,对行业的发展做出了不可估量的贡献。 陶瓷压砖机简介 压砖机主要是用于将粉煤灰、砂子、石粉、矿渣等原料和水泥按合理的比例配比,压制成砖的设备。多功能液压制砖机是集机、电、油和自动控制为一体的高科技设备,液压制砖机打破了传统压机从上往下的压制方式,改为从下往上压制。 ①液压制砖机容易实现压砖机的大型化和系列化。通过提高油压或增大油缸有效面积,即可得到大吨位的系列压机。 ②容易实现压制力、压制速度、动作时间、动作转换
[嵌入式]
变频器在陶瓷压砖机的<font color='red'>配置</font>操作
全新荣耀30青春版配置解密:90Hz水滴屏+天玑800
荣耀手机此前已发布了包括荣耀30S在内的荣耀30系列手机,今日博主 @数码闲聊站 也曝光了新款荣耀30青春版的详细配置信息。 从截图来看,荣耀30青春版将采用90Hz 6.5英寸 LCD水滴屏,搭载天玑800+4800万像素后置三摄,电池容量为4000mAh并支持22.5W快充,拥有幻夜黑、绿野仙踪、夏日彩虹、幻境银四种配色。目前官方尚未官宣这款手机。   IT之家此前报道,有爆料称荣耀30青春版将同荣耀X10 Max一起在7月份发布。而截图中的信息来看似乎也是确认了相关的发布日期等信息。
[手机便携]
全新荣耀30青春版<font color='red'>配置</font>解密:90Hz水滴屏+天玑800
STM32时钟问题(重点)
STM32上电默认时钟内部8MHZ,经过库函数SystemInit的初始化,设置成启用外部晶振模式,并设为系统时钟为PLL倍频后的时钟:72MHZ. * SYSCLK 72MHz * AHB 72MHz * PCLK1 36MHz * PCLK2 72MHz * PLL 72MHz 但是用户可以自己选择使用不同时钟,下面给出了几个函数。 可以配置成内部时钟或者外部时钟。 /* * 寄存器的方式设置系统时钟: * 输入PLL倍频因子,输入PLL的倍频值2—16倍频(注意:不同的芯片有不同的倍频因子) * HCLK = PLLCLK=SYSCLK=P2CLK=P1CLK*2=ADCCLK*2=TIMCLK=U
[单片机]
STM32 大小端模式 与 堆栈及其增长方向分析
栈增长和大端/小端问题是和CPU相关的两个问题. 1,首先来看:栈(STACK)的问题. 函数的局部变量,都是存放在 栈 里面,栈的英文是:STACK.STACK的大小,我们可以在stm32的启动文件里面设置,以 战舰 stm32 开发板 为例,在startup_stm32f10x_hd.s里面,开头就有: Stack_Size EQU 0x00000800 表示栈大小是0X800,也就是2048字节.这样,CPU处理任务的时候,函数局部变量做多可占用的大小就是:2048字节,注意:是所有在处理的函数,包括函数嵌套,递归,等等,都是从这个 栈 里面,来分配的. 所以,如果一个函数的局部变量过多,比如在函数里面定义一个u8
[单片机]
<font color='red'>STM32</font> 大小端模式 与 堆栈及其增长方向分析
STM32学习笔记-点亮第一个led
点亮第一个led灯之前要先大概了解一下单片机的工作方式并且有一定的编程基础,能看懂程序 单片机上有很多引脚,被称作io口,io口是通过总线(信号传输的通路)与内部处理系统(执行程序的硬件的总称)相连接,内部处理系统执行c语言程序可以直接控制io口,硬件机器只能识别机器码,但是已经有人一层一层的从底层封装,封装好了stm32 c语言库函数.因此,我们只需调用库函数即可. 点亮第一个io口的核心问题就是io口的配置(初始化) void GPIOC13(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved