历史上的今天
返回首页

历史上的今天

今天是:2024年10月11日(星期五)

正在发生

2021年10月11日 | stm32中断服务函数c语言,STM32中断使用总结——不使用固件库

2021-10-11 来源:eefocus

ST提供的固件库给我们很大的方面,但我十分不喜欢使用固件库因为它不简洁等一些原因,所以自己不断琢磨怎么用汇编和C语言编写自己想要的程序。以定时器TMI1上溢中断的产生为例总结一下这种方法。硬件条件是:外部晶振使用HIE=6MHz;目标是:定时器每10S进中断一次使LED闪烁。


首先要知道这个中断(TIM1上溢事件)的中断向量地址在哪?汇编部分就是编写一个跳转程序,用来保证在产生中断时会跳入自己写的C程序中,这个可以参考启动代码STM32F10X.S中的复位函数的编写,但要注意地址的对准,这里不在赘述。


然后根据需要编写一个中断处理程序,这个里面必须将TIM1的上溢中断标志清零(TIM1_SR中第0位),否则时间没到程序一直在这个中断函数里面出不去,接下来就是编写应用代码了,我编写了LED跳动的程序,来验证中断的就是LED闪烁一次间隔(1S)。


当然这个程序没经过NVIC,RCC,TIM1的初始化是跑不起来的。


接下来就是编写上面提到的初始化函数了。


RCC模块有很多寄存器,对这些寄存器的初始化可以灵活地自己写个函数。主要目的就是时钟的选择和设置,外围模块时钟的开关(相当于外围模块的开关)。


TIM1模块的初始化,包括设置周期,计数模式,使能更新中断和打开计数器。


要使用中断必须在NVIC的ISER中打开相应的中断位,当有多个中断时有必要设置中断的优先级别。


这样TIM1上溢中断程序就能跑起来了,其他中断的使用大同小异。


补充:

NVIC是矢量嵌入中断控制,包括:1) ISER;2)

ICER; 3) ISPR; 4) ICPR; 5) IABR; 6)IPR 这几个寄存器。

typedef

struct

{

vu32 ISER[2];

u32 RESERVED0[30];

vu32 ICER[2];

u32 RSERVED1[30];

vu32 ISPR[2];

u32 RESERVED2[30];

vu32 ICPR[2];

u32 RESERVED3[30];

vu32 IABR[2];

u32 RESERVED4[62];

vu32 IPR[15];

} NVIC_TypeDef;


首先分析为什么定义。这是因为ISER的地址是从E000E100开始的,ICER是从E000E180开始的,依次类推;可见从0xE000E100到0xE000E180间隔128个8位,也就是32个32位的数据;这就是vu32

XXX[2]+u32 RESERVED0[30]总的位数。


1)

ISER包括ISER[0]和ISER[1],它们的每位值依次对应一个中断的开启和关闭。例如ISER[0]中的第0位对应

WWDG 窗口定时器中断;第25位对应TIM1_UP TIM1更新中断。---用来开中断

ICER写响应的位为1则对应的中断禁止,默认全0,读如果该位为1则相应的中断允许--用来关中断。


2)

ISPR中某位为1则挂起相应中断;

ICPR中某位为1则清除挂起的中断;


3)

IABR只读用来指示是否有中断发生或要处理;


4)

IPR用来设置优先级别


推荐阅读

史海拾趣

上海双岭电子(Double-peak)公司的发展小趣事

上海双岭电子自成立以来,一直致力于场效应半导体器件的研发和生产。在成立初期,公司面临着技术瓶颈和市场竞争的双重压力。然而,双岭电子的创始人团队凭借对技术的执着追求和对市场的敏锐洞察,成功研发出具有自主知识产权的结型场效应晶体管,并迅速在航空、通讯等领域打开了市场。这一创新不仅为公司带来了丰厚的利润,也奠定了双岭电子在电子行业中的领先地位。

启珑(CHIPLON)公司的发展小趣事

上海双岭电子自成立以来,一直致力于场效应半导体器件的研发和生产。在成立初期,公司面临着技术瓶颈和市场竞争的双重压力。然而,双岭电子的创始人团队凭借对技术的执着追求和对市场的敏锐洞察,成功研发出具有自主知识产权的结型场效应晶体管,并迅速在航空、通讯等领域打开了市场。这一创新不仅为公司带来了丰厚的利润,也奠定了双岭电子在电子行业中的领先地位。

CONEC公司的发展小趣事

为了进一步提升公司的竞争力和市场影响力,CONEC开始了国际化布局。1990年,康耐加拿大公司的成立,标志着公司迈出了国际化的重要一步。随后,CONEC在德国、捷克共和国、美国和波兰等地设立分公司或生产基地,形成了全球性的生产和销售网络。同时,公司还积极寻求与全球领先的电子企业和技术机构的战略合作,共同推动电子行业的发展。

风华邦科(FH-BK)公司的发展小趣事

近年来,随着国家对电子信息和无人机行业的政策支持力度不断加大,FlyWin集团迎来了快速发展的机遇。公司充分利用政策红利,加大在技术创新、市场拓展和人才培养等方面的投入。同时,公司还积极参与地方政府组织的各类科技创新活动和产业论坛,与同行企业、科研机构及政府部门建立了良好的合作关系。在多方努力下,FlyWin集团的业务规模不断扩大,品牌影响力显著提升,成为了电子行业中一颗璀璨的新星。

CUI公司的发展小趣事

随着电子行业的发展,CUI技术逐渐融入到整个电子产业链的各个环节中。一些企业通过整合上下游资源,形成了从CUI材料研发、生产到电子产品制造的完整产业链。这种产业链整合不仅提高了企业的运营效率,还降低了生产成本,为企业赢得了更多的市场份额。

台湾固锝(GD)公司的发展小趣事
确保电源稳定可靠,满足放大器芯片的供电要求。

问答坊 | AI 解惑

汽车电子的涉及问题

随着汽车电子系统的复杂性和密集度的提高,以及设计周期的不断缩短,在汽车电子系统调计的后期解决EMC问题变得越来越不可能。而后期重新设计成本很高,如果延误交货日期,损失就更大。为了以最低的成本解决EMC问题,就必须在功能设计的同时进行EMC设 ...…

查看全部问答>

线路板PCB术语手册

线路板PCB术语手册…

查看全部问答>

有关nandflash驱动的问题,谢谢达人赐教!

NANDFlash驱动的MDD+PDD+FMD架构中MSDN有下面这样一段内容(关于分区): The new flash model replaces the MSPART driver and MBR format with a flash partition driver designed specifically for flash media. Each flash partition is wear- ...…

查看全部问答>

请教一个51串口通信的程序 麻烦帮满看一下 谢谢~

两个单片机的收发程序 简单的把两个单片机输入输出口连起来的,调试的时候成功了一次,然后改了一下程序再调试接收端就怎么都接收不到数据了。。11.0592晶振,9600波特率 发送: #include #define uchar unsigned char #define uint unsigned i ...…

查看全部问答>

wince Nor flash驱动求助

我的平台是pxa270+Wince5.0. 我们原来使用的是64M(32bit)的Intel P30 flash,现在为了扩大flash容量,同时不增加成本,因此要改成使用1MB NorFlash(16bit)+2GB的iNand,小Nor使用的是SST的。 由于没有做过flash的驱动,因此向大家请教如何着 ...…

查看全部问答>

MSP430

我用MSP430怎么就读不出DS1302中的内容呢,看了一天了,真的不知道哪里有错啊。感觉时序什么的各方面都没问题啊,硬件本人确定了 没有问题啊程序如下 #include\"msp430x14x.h\" #define uint unsigned int #define uchar unsigned char #defin ...…

查看全部问答>

征集英文够好并且懂ADI产品之能人

大家好:       我们想找2-4名可以和美国人交流的网友,给ADI的官网CFTL提提建议,望大家踊跃参加!有纪念品的哟!…

查看全部问答>

C2000 Launchpad的0402电容谁焊上去了?

手上有个30M晶振想玩超频,可惜0402至今是个阴影,谁推介个办法. 据说不焊电容也行,只是没有补偿,求说法. [ 本帖最后由 cl17726 于 2013-8-10 10:28 编辑 ]…

查看全部问答>

【TI首届低功耗设计大赛】“偷电”的蓝牙温度计_Part5_算法部分

本帖最后由 hanskying666 于 2014-12-7 22:08 编辑 最近把温度计的算法部分进行了编写,首先计算: 热敏电阻测温部分: 采集温度如前面部分介绍采用NTC和高精度电阻串联的方法,经AD采集电压转换为温度,由本系统要求静态功耗为10uA左右,供电电 ...…

查看全部问答>