
IBM® FlashSystem 9100系统是全闪存阵列平台。与 SAS 连接的闪存驱动器相比,该存储平台在控制机柜中使用 NVMe 连接的驱动器来提供显着的性能改进。该系统 支持添加两个全闪存 SAS 连接。
FlashSystem 9100控制外壳含有 至多24 NVMe 附着IBMFlashCore®模块或其它自加密NVMe连接的固态硬盘驱动器。可以从控制机柜的前面访问驱动器, 如图 1 所示。
每个FlashSystem 9100控制机柜都包含两个相同的节点控制器。正如 图2 所示,上方控制器为的底部一个反转; 每个节点控制器的每一侧都以电源单元为界。
FlashSystem 9100 、FlashSystem 9150布局一致。
每个型号都有以下功能和特点:
IBM Spectrum Virtualize 软件,具有基于机箱的全包软件功能许可
每个 CPU 有 6 个缓存通道,带有 1 - 12 个 DIMM,支持 16 GB - 384 GB,即每个节点 32 GB - 768 GB,以及每个控制机柜 128 GB - 1536 GB
用于 25 英寸 (SFF) NVMe 附加闪存驱动器的高性能的 NVMe 传输协议:
支持自压缩、自加密的 25 英寸 NVMe 附加 IBM FlashCore 模块,具有以下存储容量:48 TB、96 TB 和 192 TB。
支持具有以下存储容量的行业标准 25 英寸 NVMe SSD 驱动器选项:192 TB、384 TB、768 TB 和 1536 TB。
板载端口:
四个 10 Gb 以太网端口
两个 USB 端口
1 个 1 Gb 以太网技术人员端口
三个可选支持的 PCIe HBA 插槽:
4 端口 16 Gbps 光纤通道 (FC) 适配器(每个容器 0 到 3 个适配器)。添加控制机柜时需要,每个系统最多四个。
2 端口 25 Gbps 以太网 (iWARP) 适配器,支持 iSCSI 或 iSER 主机连接(每个容器 0 到 3 个适配器)。
2 端口 25 Gbps 以太网 (RoCE) 适配器,支持 iSCSI 或 iSER 主机连接(每个容器 0 到 3 个适配器)。
4 端口(2 个活动端口)12 Gbps SAS 适配器(每个容器 0 或 1 个适配器)。需要连接到 IBM FlashSystem® 9100 扩展机柜:
支持FlashSystem 9100 SAS 扩展柜中的25 英寸 12 Gbps SAS 行业标准闪存驱动器,具有以下容量:192 TB、384 TB、768 TB 和 1536 TB。
支持 IBM FlashSystem 9100 2U 和 5U 扩展柜的混合,两个 SAS 链中的每一个链的总重量为 10
在两个 SAS 链中最多支持 20 个全闪存 2U FlashSystem 9100 9846/9848-AFF 扩展机柜(每个 24 个 SFF 闪存驱动器,或最多 480 个驱动器),每个机柜的链重量为 1。
在两个 SAS 链中最多支持 8 个全闪存 5U FlashSystem 9100 9846/9848-A9F 扩展柜(每个 92 个 SFF 闪存驱动器,或最多 736 个驱动器),每个机箱的链重为 25。
此文以更换电池举例:详细要点疑问可留言
二、更换部件前需要了解的几个要点:
1通过 LED 了解系统状态,必须确定 *** 作的节点/部件状态。如磁盘柜本身状态,控制器状态,电源状态……。[也就是需要确定关机或者节点完全停止了方可 *** 作,否则会造成节点/部件损坏]
LED状态说明 以下都是绿色状态下说明,LED表示状态异常
控制器LED:缓慢闪烁 状态说明:已关闭 快速闪烁 状态说明:启动中
电池LED:快速闪烁 状态说明:电池正在充电无法进行单次 *** 作; 闪烁 状态说明:电池有一定电,足够完成一次紧急关机 *** 作。常亮:状态说明:电池有电,可以完成 两次紧急关闭 *** 作。
1 电源 2 状态 3 故障
2确定 *** 作部件[需要更换的硬盘、控制器、电源],完全确定后方可 *** 作。这里举例确定控制器
To prevent loss of access to data or loss of data when you service your system, it is important to be able to identify the correct enclosure or canister when you complete a service action
- The enclosure model and serial number are indicated by labels on the enclosure front and rear
- The node canister can be identified by the enclosure it is in, and the serial number of the node canister The serial number is displayed on a label on the release handles of the canister
A canister can also be located by the enclosure that it is in and its slot location This ID is shown as E-C or E|C, where E is the enclosure ID and C is the canister slot location On the service assistant, the ID is known as the Panel The canister slot number within the enclosure is helpful for locating the node canister but should not be used to identify a node canister
为防止在维修系统时无法访问数据或丢失数据,在完成维修 *** 作时能够识别正确的机柜或容器非常重要。
- 机柜型号和序列号由机柜正面和背面的标签指示。
- 控制器可以通过它所在的机柜和控制器的序列号来识别。序列号显示在罐释放手柄上的标签上。
也可以通过容器所在的机柜及其插槽位置来定位容器。此 ID 显示为EC或E|C,其中E是机柜 ID,C是容器插槽位置。在服务助手上,该 ID 称为面板。机柜内的容器插槽编号有助于定位控制器,但不应用于识别控制器。
To control the identify LED of an enclosure or online canister, use the management GUI:
21Select Monitoring > System
22On the System - Overview page, select the directional arrow next to the enclosure that contains the node canister that you want to identify
23On the Enclosure Details page, right-click the node canister in the graphic and select Identify from the Actions menu
Alternatively, if a node canister is not online to the system, use the service assistant to control the identify LED
211Log in to the service assistant of the node canister to be identified
212Click Identify at the upper left of the page to control the identify LEDs
要控制机柜或在线容器的识别 LED,请使用管理 GUI:
21选择 监控>系统。
22在系统 - 概览页面上,选择包含要标识的控制器的机柜旁边的方向箭头。
23在机箱详细信息页面上,右键单击图形中的控制器并从 *** 作 菜单中选择识别。
或者,如果控制器未与系统联机,请使用服务助手来控制识别 LED。
211登录待识别控制器的服务助手。
212点击 页面左上角的Identify,控制识别LED。
3更换控制器时 确定好步骤后再进行 *** 作 ,并且确定 *** 作时有足够的空间。比如更换控制器,需要磁盘柜后方有足够的空间才能将控制器完全抽出,且控制器本身30多千克,要注意。更换控制器及抽出控制器更换其中的部件时,控制好更换时间不能抽出控制器超过16分钟。以免硬盘柜过热,造成不良后果。
4抽出控制器前确定原先连线,线标以免恢复错误。
三、关闭控制器,取下控制器
1确定要更换电池的控制器后,亮起标识LED;
2在主页上,选择要关闭的控制器。如不清楚,或者未点亮标识LED,可转到服务助手中的节点详细信息面板。点击识别[]
3点击关闭电源, *** 作关闭容器的电源。等待控制器完全关闭。
4记录并移除所有此控制器的连线,拉住蓝色部分,将控制器两个扳手向外掰出,水平方向向后缓缓取下控制器。放置至平坦的位置。[如取下的为上控制器,需要将控制器上下翻转,下控制器则不需要]
四、更换电池
1取下上盖,如下图所示,控住两个蓝色按钮,将上盖取下。
2取下电池
21 向上松开电池闩锁
22 滑出电池
23 取出电池
24 拿着新电池,找到电池插槽
25 插入新电池,注意不要损坏到红框标识的风扇连接线
26 向下旋转节点电池闩锁,以便将电池固定到位。
27 盖上 上盖,[如果是上控制器需要翻转]插入控制器,连上电缆。
注意:事件日志中的新节点错误或事件 ID 可能表明新电池正在运行,但需要一些时间才能达到最小变化。监视事件日志,直到电池充满电以使节点启动。
如无错误日志出现,就完成控制器的电池更换。
另:查看电池信息
To access information about the battery in the management GUI, select Monitoring > System On the System - Overview page, click the directional arrow next to the enclosure that contains the battery module Select Battery Module under Internal Components to display information about the battery module To display information about the battery in the command-line interface, use the lsenclosurebattery command
要在管理 GUI 中访问有关电池的信息,请选择Monitoring > System。在系统 - 概览页面上,单击包含电池模块的机柜旁边的方向箭头。 在Internal Components下选择Battery Module以显示有关电池模块的信息。 要在命令行界面中显示有关电池的信息,请使用lsenclosurebattery命令。
访问服务助手界面
1启动受支持的 Web 浏览器并将 Web 浏览器指向要serviceaddress/service处理的节点容器。
例如,如果您11223344为节点容器设置服务地址 ,请将浏览器指向 11223344/service。
2使用超级用户密码登录服务助手。
如果您正在访问新的节点容器,则默认密码为passw0rd。如果节点容器是系统成员或曾经是系统成员,请使用密码作为超级用户密码。
如果您不知道当前的超级用户密码,请尝试查找。如果您无法找出密码是什么,请重置密码。个人建议选择国外的联盟,国内的单价差不多,不扣量的基本没有
国外的当然就不同啦
美元换成人民币的话,当然就很高的单价啦1
外国的联盟信誉都很不错
Chitika算是比较知名的国外广告联盟,单价比AdSense要低些,因为毕竟谷歌的广告用户多,所以提供的优势也比较多,知名度高选择的余地就多。该联盟审核比较严格,千万不要用假站来做,否则被K的可能性几乎为百分之九十九。其实如果有AdSense我觉得就没必要申请这个了!
不过Chitika几乎都是英文广告,但是很可惜如果你的页面内容是中文的应该难通过,如果要申请的话建议Chitika建议写英文博客,因为Chitika是英文博客联盟中的NO1,实力不容小觑,这样比较起来我们做的中文网站单价就高多了。当然了,你也可以申请多个博客,不过每天限量在3到5个,不然被K了不要怪我。
很多朋友会说俺不会写英文博客怎么办呢没关系,我们可以去搜索英文博客,但是不要只复制一个人的博客,否则被关闭的可能性很大,还有一点值得提醒的是,最好的方法是去blogger去申请博客,然后写上英文内容,但是千万不要到网上随便搜点内容就放上去,确保没有涉及政治、黑客、武器、亵渎等词语(可以通过谷歌翻译连规避风险),而且还要注意最好使用美国代理的IP来申请,这样安全而且成功的几率也高!blogger前段时间有IP限制在国内无法访问,但可以使用国外IP登录,不过最近好像可以访问了,但是为了安全起见还是使用美国代理的IP来申请,更加安全!
其实说到国外的优秀广告联盟bidvertiser也算是一个不折不扣的强者,不过这个站的单价依然不能够和谷歌相提并论,而且比较繁琐的是需要接收中国IP通过代理服务器,不然的话点击之后不给钱!但是bidvertiser有他自己独特的魅力和优点,他类似于AdSense,但是如果你觉得AdSense支付期太长的话,选择它吧,非常不错的说,10美元月底paypal自动支付,爽!所以它一直很受国内少数站长的追捧,可惜知道的人并不是很多!强烈推荐各位去试一试!
如果你有英文站,建议去投放,最少的一次点击至少在005美金以上,还有一种方式是推荐会员加入的方式,每当你推广的会员获得了50美元的收入,你就会自动获得60美元的收入,也就是说如果A推荐了B,B推荐了C,C推荐了D,那么D会获得多少钱的收入呢,呵呵,这点不用我多说了,这和曾经的AdSense是一样的,AdSense以前也是因为这样而被迫取消了这个业务的!
Zanox是全球领先的Affiliate网络营销运营商、网络广告联盟,总部位于德国柏林,企业网络遍及30个国家。通过与网站站长的合作,授权其以网站、搜索引擎、电子邮件的形式发布广告,从而为站长带来不菲的收入。Zanox现在在全球范围内拥有1000个广告主,良好的信誉使得超过一百万名站长作为其广告发布者。而且它已经入驻中国,办事处在上海,广告形式多种多样,但是知名度在国内很小,很少有人知道,丰富的产品,能够针对不同的站长设计,使其获得佣金更为快捷方便。Zanox支持多币种支付,CPC(点击)、CPL(引导)、CPA(销售)等多种广告形式,广告模式多样。网站站长在自己的网站上投放其广告;博客作者为自己的博客上增加网上商店(产品丰富、种类齐全、自动更新),从而获得丰厚佣金。目前已经支持中文地区,最低的起付金额为25欧元。Zanox明确的在中国建立了办事处,佣金结算时会更加快捷!
登录它的首页,我们可以看到这样一段话:“Zanox是以效果为基础的全球在线营销市场领导者。我们为您提供一站式的服务,全球范围的联盟,领先的技术支持和行业的专业知识。现在就加入,成为我们全球联盟合作伙伴。不过他们的主页真的是有些慢,我好久才打开哦,但是值得一提的是他们的注册方式是中文哦,所以大家还不赶快去申请啊!
payoneer亚洲交友联盟就不用多说了,地球人都知道,名气也仅次于AdSense。很多人问我亚洲交友联盟有几种帐户,亚交联盟帐户共有两种——高费率和低费率。
高费率帐户是,注册一个男性会员$100美金的佣金,女性会员$200美元的佣金。
低费率帐户是:注册一个男性会员$010美元的佣金,女性会员$015美元的佣金。
要注意一定要想办法转为高费率账户,否则真的不如去做AdSense了,还有一点,最近改版之后好多人找不到在哪里申请支付了,郁闷!很多到了100美金的也经常发问!至于如何转为高费率账户这的确要多动动脑筋才行哦。这一点就不多说了!
CJ广告:呵呵,这个比较有意思了,你能不能申请到那可不是取决于联盟,而是取决于广告主,和国内的CPA运作差不多,不过不建议稍有英文基础的朋友就去申请该联盟的广告,我觉得至少你的英文水平要能够在金山毒霸里面读懂英文说明,否则建议不要做了。
目前通过AdSense投放广告在英文站点上投放CJ广告比较盛行,当然了,你要对CJ和Google AdSense都比较了解,否则可能会造成亏本,这需要您的智慧!STM32的EXTI控制器支持19 个外部中断/ 事件请求。每个中断设有状态位,每个中断/ 事件都有独立的触发和屏蔽设置。
STM32的19个外部中断对应着19路中断线,分别是EXTI_Line0-EXTI_Line18:
线0~15:对应外部 IO口的输入中断。
线16:连接到 PVD 输出。
线17:连接到 RTC 闹钟事件。
线18:连接到 USB 唤醒事件。
触发方式:STM32 的外部中断是通过边沿来触发的,不支持电平触发。
外部中断分组:STM32 的每一个GPIO都能配置成一个外部中断触发源,STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16 组,STM32 规定,每一组中同时只能有一个中断触发源工作,那么,最多工作的也就是16个外部中断。
寄存器组
EXTICR寄存器组,总共有4 个,因为编译器的寄存器组都是从0 开始编号的,所以EXTICR[0]~ EXTICR[3],对应《STM32参考手册》里的 EXTICR1~ EXTICR 4(查了好久才搞明白这个数组的含义!!)。每个 EXTICR只用了其低16 位。
EXTICR[0] ~EXTICR[3]的分配如下:
EXTI寄存器的结构体:
typedef struct
{
vu32 IMR;
vu32 EMR;
vu32 RTSR;
vu32 FTSR;
vu32 SWIER;
vu32 PR;
} EXTI_TypeDef;
IMR:中断屏蔽寄存器
这是一个 32 寄存器。但是只有前 19 位有效。当位 x 设置为1 时,则开启这个线上的中断,否则关闭该线上的中断。
EMR:事件屏蔽寄存器
同IMR ,只是该寄存器是针对事件的屏蔽和开启。
RTSR:上升沿触发选择寄存器
该寄存器同IMR ,也是一个32为的寄存器,只有前 19位有效。位 x 对应线x 上的上升沿触发,如果设置为 1 ,则是允许上升沿触发中断/ 事件。否则,不允许。
FTSR:下降沿触发选择寄存器
同 PTSR,不过这个寄存器是设置下降沿的。下降沿和上升沿可以被同时设置,这样就变成了任意电平触发了。
SWIER:软件中断事件寄存器
通过向该寄存器的位x 写入 1 ,在未设置 IMR 和EMR的时候,将设置PR中相应位挂起。如果设置了IMR 和EMR时将产生一次中断。被设置的SWIER位,将会在PR中的对应位清除后清除。
PR:挂起寄存器
0 ,表示对应线上没有发生触发请求。
1,表示外部中断线上发生了选择的边沿事件。通过向该寄存器的对应位写入 1 可以清除该位。
在中断服务函数里面经常会要向该寄存器的对应位写1 来清除中断请求。
Ex_NVIC_Config基本是按照这个结构来编写的
中断配置步骤
STM32的每个IO口都可以作为中断输入,这点很好用。要把IO口作为外部中断输入,有以下几个步骤:
1)初始化IO口为输入。
这一步设置你要作为外部中断输入的IO口的状态,可以设置为上拉/下拉输入,也可以设置为浮空输入,但浮空的时候外部一定要带上拉,或者下拉电阻。否则可能导致中断不停的触发。在干扰较大的地方,就算使用了上拉/下拉,也建议使用外部上拉/下拉电阻,这样可以一定程度防止外部干扰带来的影响。
2)开启IO口复用时钟,设置IO口与中断线的映射关系。
STM32的IO口与中断线的对应关系需要配置外部中断配置寄存器EXTICR,这样我们要先开启复用时钟,然后配置IO口与中断线的对应关系。才能把外部中断与中断线连接起来。
3)开启与该IO口相对的线上中断/事件,设置触发条件。
这一步,我们要配置中断产生的条件,STM32可以配置成上升沿触发,下降沿触发,或者任意电平变化触发,但是不能配置成高电平触发和低电平触发。这里根据自己的实际情况来配置。同时要开启中断线上的中断,这里需要注意的是:如果使用外部中断,并设置该中断的EMR位的话,会引起软件仿真不能跳到中断,而硬件上是可以的。而不设置EMR,软件仿真就可以进入中断服务函数,并且硬件上也是可以的。建议不要配置EMR位。
4)配置中断分组(NVIC),并使能中断。
这一步,我们就是配置中断的分组,以及使能,对STM32的中断来说,只有配置了NVIC的设置,并开启才能被执行,否则是不会执行到中断服务函数里面去的。关于NVIC的详细介绍,请参考前面章节。
5)编写中断服务函数。
这是中断设置的最后一步,中断服务函数,是必不可少的,如果在代码里面开启了中断,但是没编写中断服务函数,就可能引起硬件错误,从而导致程序崩溃!所以在开启了某个中断后,一定要记得为该中断编写服务函数。在中断服务函数里面编写你要执行的中断后的 *** 作。
实验4--外部中断实验exitc函数如下:
[cpp] view plaincopy
#include "extih"
#include "ledh"
#include "keyh"
#include "delayh"
#include "usarth"
//外部中断0服务程序
void EXTI0_IRQHandler(void)
{
delay_ms(10);//消抖
if(KEY2==1) //按键2
{
LED0=!LED0;
LED1=!LED1;
}
EXTI->PR=1<<0; //清除LINE0上的中断标志位
}
//外部中断15~10服务程序
void EXTI15_10_IRQHandler(void)
{
delay_ms(10); //消抖
if(KEY0==0) //按键0
{
LED0=!LED0;
}else if(KEY1==0)//按键1
{
LED1=!LED1;
}
EXTI->PR=1<<13; //清除LINE13上的中断标志位
EXTI->PR=1<<15; //清除LINE15上的中断标志位
}
//外部中断初始化程序
//初始化PA0,PA13,PA15为中断输入
void EXTIX_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA时钟
JTAG_Set(JTAG_SWD_DISABLE);//关闭JTAG和SWD
GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入
GPIOA->CRL|=0X00000008;
GPIOA->CRH&=0X0F0FFFFF;//PA13,15设置成输入
GPIOA->CRH|=0X80800000;
GPIOA->ODR|=1<<13; //PA13上拉,PA0默认下拉
GPIOA->ODR|=1<<15; //PA15上拉
Ex_NVIC_Config(GPIO_A,0,RTIR); //上升沿触发
Ex_NVIC_Config(GPIO_A,13,FTIR);//下降沿触发
Ex_NVIC_Config(GPIO_A,15,FTIR);//下降沿触发
MY_NVIC_Init(2,2,EXTI0_IRQChannel,2); //抢占2,子优先级2,组2
MY_NVIC_Init(2,1,EXTI15_10_IRQChannel,2);//抢占2,子优先级1,组2
}
其中的两个函数:Ex_NVIC_Config(GPIO_A,0,RTIR);和MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);这两个函数都是在sysc里定义,分别完成了步骤2、3、4函数原型如下:
[cpp] view plaincopy
//外部中断配置函数
//只针对GPIOA~G;不包括PVD,RTC和USB唤醒这三个
//参数:GPIOx:0~6,代表GPIOA~G;BITx:需要使能的位;TRIM:触发模式,1,下升沿;2,上降沿;3,任意电平触发
//该函数一次只能配置1个IO口,多个IO口,需多次调用
//该函数会自动开启对应中断,以及屏蔽线
//待测试
void Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM)
{
u8 EXTADDR;
u8 EXTOFFSET;
EXTADDR=BITx/4;//得到中断寄存器组的编号
EXTOFFSET=(BITx%4)4;
RCC->APB2ENR|=0x01;//使能io复用时钟
AFIO->EXTICR[EXTADDR]&=~(0x000F<<EXTOFFSET);//清除原来设置!!!
AFIO->EXTICR[EXTADDR]|=GPIOx<<EXTOFFSET;//EXTIBITx映射到GPIOxBITx
//自动设置
EXTI->IMR|=1<<BITx;// 开启line BITx上的中断
//EXTI->EMR|=1<<BITx;//不屏蔽line BITx上的事件 (如果不屏蔽这句,在硬件上是可以的,但是在软件仿真的时候无法进入中断!)
if(TRIM&0x01)EXTI->FTSR|=1<<BITx;//line BITx上事件下降沿触发
if(TRIM&0x02)EXTI->RTSR|=1<<BITx;//line BITx上事件上升降沿触发
}
这个函数完成了两个步骤:
2、开启IO口复用时钟,设置IO口与中断线的映射关系
3、开启与该IO口相对的线上的中断/时间,设置触发条件
[cpp] view plaincopy
//设置NVIC
//NVIC_PreemptionPriority:抢占优先级
//NVIC_SubPriority :响应优先级
//NVIC_Channel :中断编号
//NVIC_Group :中断分组 0~4
//注意优先级不能超过设定的组的范围!否则会有意想不到的错误
//组划分:
//组0:0位抢占优先级,4位响应优先级
//组1:1位抢占优先级,3位响应优先级
//组2:2位抢占优先级,2位响应优先级
//组3:3位抢占优先级,1位响应优先级
//组4:4位抢占优先级,0位响应优先级
//NVIC_SubPriority和NVIC_PreemptionPriority的原则是,数值越小,越优先
//CHECK OK
//100329
void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group)
{
u32 temp;
u8 IPRADDR=NVIC_Channel/4; //每组只能存4个,得到组地址
u8 IPROFFSET=NVIC_Channel%4;//在组内的偏移
IPROFFSET=IPROFFSET8+4; //得到偏移的确切位置
MY_NVIC_PriorityGroupConfig(NVIC_Group);//设置分组
temp=NVIC_PreemptionPriority<<(4-NVIC_Group);
temp|=NVIC_SubPriority&(0x0f>>NVIC_Group);
temp&=0xf;//取低四位
if(NVIC_Channel<32)NVIC->ISER[0]|=1<<NVIC_Channel;//使能中断位(要清除的话,相反 *** 作就OK)
else NVIC->ISER[1]|=1<<(NVIC_Channel-32);
NVIC->IPR[IPRADDR]|=temp<<IPROFFSET;//设置响应优先级和抢断优先级
这个函数完成了:
4、配置中断分组(NVIC),并使能中断
补充
在实验18--触摸屏实验中,中断初始化没有调用这个函数,它是这样配置的:
[cpp] view plaincopy
MY_NVIC_Init(2,0,EXTI1_IRQChannel,2);
RCC->APB2ENR|=0x01; //使能io复用时钟
AFIO->EXTICR[0]|=0X0020; //EXTI1映射到PC1(这句原子的程序里注释错了搞成了EXTI13)
EXTI->IMR|=1<<1; //开启line1上的中断
EXTI->EMR|=1<<1; //不屏蔽line1上的事件
EXTI->FTSR|=1<<1; //line1上事件下降沿触发
RCC->APB2ENR|=0x01; 这一句是开启复用时钟,什么时候需要开启复用时钟?手册有这样一段:
也就是说只要 *** 作EVCR、EXTICRX、MAPR的时候,就必须开启复用功能时钟,即当你要配置stm32的事件输出、外部中断、重映射的时候就必须开启复用时钟。
AFIO->EXTICR[0]|=0X0020; //EXTI1映射到PC1
这一句设置中断映射,如上文所说EXTICR[0]~ EXTICR[3] 对应 EXTICR1~ EXTICR4,举例:
AFIO->EXTICR[3] &= 0xFFFFFF0F;
AFIO->EXTICR[3] |= 0xFFFFFF0F; //EXTI13映射到PA13,0(即0x00)代表A口,1(即0x01)代表B口,依次类推,6(即0x0110)代表G口
AFIO->EXTICR[3] &= 0xFFFFFF0F;
AFIO->EXTICR[3] |= 0xFFFFFF2F; //EXIT13映射到PC13,2(0x0010)代表C口
外部中断函数不能进入的原因分析分析,可能为以下几个方面:
1)GPIO或者AFIO的时钟没有开启;
2)GPIO和配置的中断线路不匹配;
3)中断触发方式和实际不相符合;
4)中断处理函数用库函数时,写错,经常可能出现数字和字母之间没有下划线;
5)外部中断是沿触发,有可能检测不到沿,比如中断线是低电平(浮空输入),触发是下降沿触发,可能会出现一直是低电平,高电平的时候是一样的情况,电平持续 为高电平;
6)没有用软件中断来触发外部中断,调用函数EXTI_GenerateSWInterrupt;,因为软件中断先于边沿中断处理。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)