历史上的今天
返回首页

历史上的今天

今天是:2026年01月12日(星期一)

正在发生

2023年01月12日 | 新手入门之stm32中断系统

2023-01-12 来源:zhihu

今天给大家说的是关于stm32中断系统的一些知识,中断相信大家都知道在stm32当中应用的非常的多,不管是自学还是参加一些学习机构都会学这部分,所以我在这里先给大家大概的普及一下stm32中断的东西以及一些应用。

依然老样子先文字解释在视频细致讲解!!!

我们进如今天的主题首先我们先来看一下STM32中断系统的内容概要:

  中断的基本概念

  嵌套向量控制器NVIC

  中断及异常向量表

  中断优先级

  中断的基本概念:

  处理器中的中断:在处理器中,中断是一个过程,即CPU在正常执行程序的过程中,遇到外部/内部的紧急事件需要处理,暂时中止当前程序的执行,转而去为处理紧急的事件,待处理完毕后再返回被打断的程序处继续往下执行。中断在计算机多任务处理,尤其是即时系统中尤为重要。比如uCOS,FreeRTOS等。

  意义:中断能提高CPU的效率,同时能对突发事件做出实时处理。实现程序的并行化,实现嵌入式系统进程之间的切换。

  中断处理过程:

  进入中断:

   处理器自动保存现场到堆栈里

   {PC, xPSR, R0-R3, R12, LR}

   一旦入栈结束,ISR便可开始执行

   晚到的中断会重新取ISR地址,但无需再次保存现场

  退出中断:

   中断前的现场被自动从堆栈中恢复

   一旦出栈完成,继续执行被中断打断的指令

   出栈的过程也可被打断,使得随时可以响应新的中断,而不再进行

  现场保存


  STM32F0中断的体系结构:


  NVIC的主要功能:

  中断管理

  支持异常及中断向量化处理

  支持嵌套中断

  中断管理:

  Cortex-M0处理器中,每一个外部中断都可以被使能或者禁止,并且可以被设置为挂起状态或者清除状态。处理器的中断可以电平的形式的,也可以是脉冲形式的,这样中断控制器就可以处理任何中断源。


  中断和异常向量表:

  STM32F0中断和异常向量:

  Cortex-M0内核可以处理15个内部异常,和32个外部中断。

  STM32F051实际上只使用了6个内部异常和28个外部中断。

  当异常或中断发生时,处理器会把PC设置为一个特定地址,这一地址就称为异常向量。每一类异常源都对应一个特定的入口地址,这些地址按照优先级排列以后就组成一张异常向量表。

  向量化处理中断的好处:

  统的处理方式需要软件去完成。采用向量表处理异常,M0处理器会从存储器的向量表中,自动定位异常的程序入口。从发生异常到异常的处理中间的时间被缩减。

  注:中断和异常的区别:中断是微处理器外部发送的,通过中断通道送入处理器内部,一般是硬件引起的,比如串口接收中断,而异常通常是微处理器内部发生的,大多是软件引起的,比如除法出错异常,特权调用异常等待。不管是中断还是异常,微处理器通常都有相应的中断/异常服务程序。

  嵌套中断:

  STM32F0中断的优先级:

  3个固定的优先级,都是负值,不能改变

  四个可编程优先级,用两个bit位表示,00,01,10,11

  优先级越小优先级越高

  注:不同优先级的中断同时发生,优先处理优先级编号较小的那个 同样优先级的中断同时发生,中断向量号较小的那个优先响应。

  外部中断控制器EXTI

  内容概要:

  外部中断控制器EXTI

  系统配置控制器SYSCFG

  外部中断/事件框图

  外部中断控制器EXTI:

  在 STM32F05x 中,共有最多 28 中断 / 事件线可用:

  GPIO 口连接到 16 个外部中断 / 事件线

  系统配置控制器 (SYSCFG):

  该器件具有一组配置寄存器。系统配置控制器的主要用途如下:

  ● 在部分 IO 口上启用或禁用 I2C 超快模式 (Fast Mode Plus) 。

  ● 重映射部分从 TIM16 和 TIM17 , USART1 和 ADC 的 DMA 触发源到其它不同的 DMA 通道上。

  ● 重映射存储器到代码起始区域。

  ● 管理连接到 GPIO 口的外部中断。

  ● 管理系统的可靠性特性。

  SYSCFG 外部中断配置寄存器 1-4 (SYSCFG_EXTICR1—4):

  外部中断 / 事件框图:

  按键中断实例

  内容概要:

  按键原理图分析

  按键中断编程步骤分析

  按键中断编程实例

  按键原理图分析:

  按键中断编程步骤分析:

  1、使能相应的时钟

  2、配置GPIO管脚为中断功能

  3、设置中断优先级

  4、使能相应的中断

  5、实现中断服务程序

  按键中断编程实例:

  配置引脚功能:

  设置串口:

  打开中断:

  设置中断触发方式:

  导出工程:

  追入向量表中对应的函数:

  继续往下追相应的函数:

  需要重新编写的中断处理程序:

  重新编写中断处理程序并添加必要的头文件:

  串口中断实例

  内容概要:

  原理图分析

  串口中断编程步骤分析

  串口中断编程实例

  串口原理图分析

  串口中断编程步骤分析:

  1、使能相应的时钟

  2、配置GPIO管脚为串口功能

  3、设置中断优先级

  4、使能相应的中断

  5、实现中断服务程序

  串口中断编程实例:

  引脚功能选择为串口功能

  设置通信协议

  打开对应中断

  在中断向量表中找到对应的向量,往里面追

  串口接收中断的实现

  找到串口接收模式下的函数,继续往里面追

  找到回调函数并改写

  改写代码如下:

  main.c中定义一个全局变量用于存放字符串,并将串口接收中断使能:

  uint8_t buf[10];

  HAL_UART_Receive_IT(&huart1, buf, 1); //串口接收中断使能(这里设置的是接收一个字符就中断)

  在usart.c中重新编写回调函数:


extern uint8_t buf[10];

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{

if(huart->Instance==USART1)

{

//HAL_UART_Transmit(&huart1, "receive success!n", 17, 100);

printf("receive success : %cn", buf[0]); //如果调用printf函数,则需要重新编写fputc函数

HAL_UART_Receive_IT(&huart1, buf, 1); //每次调用中断程序后都要重新使能

}

}

重新编写fputc函数如下:

int fputc(int ch,FILE *f){

while((USART1->ISR&(1<<7)) == 0);

USART1->TDR=(uint8_t)ch;

return ch;

}

  测试结果:

  串口发送中断的实现

  串口发送中断使能:

  HAL_UART_Transmit_IT(&huart1, "TXn", 3);//串口发送中断使能

  追加到回调函数:

  重新编写回调函数:


void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)

{

if(huart->Instance==USART1)//判断是否为串口1的发送中断

{

printf("tx success!n");//如果发生中断,则打印一句话

}

}

  测试结果:


推荐阅读

史海拾趣

BSI公司的发展小趣事

随着电子产品的普及和消费者对产品质量的关注,电子产品测试和认证成为了一个必不可少的环节。BSI作为全球知名的认证机构,为电子产品提供了专业的测试和认证服务。通过严格的测试和认证流程,BSI确保了电子产品符合国际标准和客户需求,提高了产品的市场竞争力和信誉度。同时,BSI还为企业提供了定制化的商检解决方案,帮助企业在国际贸易中解决技术和法规问题,降低了贸易风险。

Electrolube公司的发展小趣事

在电子行业的激烈竞争中,Electrolube公司始终坚持以客户需求为导向,不断创新和拓展产品线。除了UVCL涂层外,公司还推出了一系列树脂、涂料和热管理解决方案的产品组合,为EV电池提供全面保护。

这些产品不仅具有优异的性能表现,而且能够满足不同客户的需求。例如,某些产品具有优异的耐高温性能,适用于高温环境下的电子设备;而另一些产品则具有出色的耐化学腐蚀性能,能够在恶劣的工作环境中保持稳定的性能。

Electrolube公司通过不断的技术创新和产品优化,成功拓展了市场份额,并在电子行业中树立了良好的品牌形象。同时,公司还积极与各大汽车制造商合作,共同推动电动汽车产业的发展。

GISMA Steckverbinder GmbH公司的发展小趣事

GISMA深知产品质量对于企业生存和发展的重要性。因此,公司建立了完善的质量管理体系,并通过了DIN ISO 9001(DNV)等国际质量认证。这一认证不仅证明了GISMA在产品生产过程中的严格质量控制能力,也为其赢得了更多客户的信任和认可。GISMA始终坚持质量第一的原则,不断提升产品质量和服务水平,确保每一款产品都能达到客户的期望和要求。通过持续的质量管理和改进活动,GISMA在电子行业中树立了良好的品牌形象和口碑。

安谱隆(Ampleon)公司的发展小趣事

2022年,无锡锡产微芯半导体有限公司完成了对安谱隆的收购。这一交易金额超过百亿元,是当年中国最大的半导体并购交易事件之一。锡产微芯的收购不仅为安谱隆提供了更广阔的发展平台,也为其在半导体行业中的进一步发展注入了新的活力。在锡产微芯的支持下,安谱隆开启了新的发展阶段,继续在全球射频市场中发挥着重要作用。

这五个故事展示了安谱隆从恩智浦剥离出来到被锡产微芯收购的发展历程。在这个过程中,安谱隆不仅展现了其强大的技术实力和市场潜力,也经历了资本市场的波折与挑战。然而,正是这些经历使得安谱隆更加成熟和稳健,为其未来的发展奠定了坚实的基础。

Bellnix Co Ltd公司的发展小趣事

随着产品线的不断丰富,Bellnix开始积极拓展市场。公司通过与各大电子厂商建立合作关系,将产品应用于手机、电脑、家电等多个领域。同时,Bellnix还加强品牌建设,通过参加国际电子展会、举办技术研讨会等方式,提升品牌知名度和影响力。这些举措有效地推动了公司的市场拓展,为公司的持续发展奠定了坚实基础。

APTA Group Inc公司的发展小趣事

APTA Group Inc深知,单打独斗在竞争激烈的电子行业中难以长久立足。因此,公司积极寻求与其他企业的战略合作。通过与知名电子产品制造商的合作,APTA得以将其技术应用于更广泛的领域,同时也借助合作伙伴的市场渠道,提高了品牌知名度和市场占有率。这种互利共赢的合作模式,为APTA的快速发展提供了有力支撑。

问答坊 | AI 解惑

步进电机经典资料

步进电机的好资料…

查看全部问答>

流星灯程序

怎么可以是一连串的小灯像流星一样流动!  下面的程序只可以整体控制灯的渐灭,有谁可以帮忙改一下,或者有新的思路也可以啊,多多指教啊!谢谢啊!        ORG 0000H START:   MOV R0,#01H  &nb ...…

查看全部问答>

这个电源怎么做?

这个电源怎么做? 输入:80VDC~600VDC 输出:±15V/1A,5V/2A…

查看全部问答>

ISD2540如何分段播放

最近在弄语音芯片ISD2540,录音成功了,但每次播放初始化后都是从头播放到最后,不管我用什么方法,都无从分段播放,请各位朋友帮忙解决一下!!!!!!!!!!!!!!!!…

查看全部问答>

关于WINCE进程主窗口句柄显示的

在LIST CONTROL控件中显示进程主窗口的句柄,我用pListCtrl->SetItemText(i,3,(LPCTSTR)processList.tlist.hwnd);在第三个参数用(LPCTSTR)把(HWND)类型转化了,在我的手机上运行结果是窗口句柄是乱码…

查看全部问答>

Multisim+应用教程

分享个Multisim的教程………

查看全部问答>

HDMI插机件的封装

希望那位有插件资料的发给我,急需PCB封装…

查看全部问答>

LM3S2948 有人用过没有?

LM3S2948 有人用过没有?…

查看全部问答>

专门为平板电脑,智能手机备的库存.

专门为平板电脑,智能手机备的库存.SDCL1005C5N1STDFM01 120k SWPA3010S100MT 44kSDCL1005C6N2STDF 390k SWPA3010S2R2NT 14kSDCL1005C56NJTDF 450k SWPA3010S3R3NT 8kSDFL1608LR15KTF 100k SWPA3010S6R8NT 20kSDNT1005X103F3380FTF 180k SWPA30 ...…

查看全部问答>

SBW和JTAG接口问题

使用SBW接口调试,程序运行很慢,我想问一下各位大神SBW和JTAG的接口传输速率都是多少?JTAG是不是调试时比SBW要快得多?希望详解一下JTAG和SBW。…

查看全部问答>