stm32学习笔记之USB中断配置初始化函数

发布者:MysticGlow最新更新时间:2018-06-15 来源: eefocus关键字:stm32  USB  中断配置  初始化函数 手机看文章 扫描二维码
随时随地手机看文章



● 中断映射单元:将可能产生中断的USB事件映射到三个不同的NVIC请求线上:
─ USB低优先级中断(通道20):可由所有USB事件触发(正确传输,USB复位等)。固件在处理中断前应当首先确定中断源。
─ USB高优先级中断(通道19):仅能由同步和双缓冲批量传输的正确传输事件触发,目的是保证最大的传输速率。


─ USB唤醒中断(通道42):由USB挂起模式的唤醒事件触发。

  USB_HP_CAN1_TX_IRQn= 19,     /*!< USB Device High Priority or CAN1 TX Interrupts       */
  USB_LP_CAN1_RX0_IRQn  = 20,   /*!< USB Device Low Priority or CAN1 RX0 Interrupts       */

  USBWakeUp_IRQn= 42,     /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */

  1. /USB中断配置  

  2. void USB_Interrupts_Config(void)  

  3. {   

  4.     NVIC_InitTypeDef NVIC_InitStructure;  

  5.     EXTI_InitTypeDef EXTI_InitStructure;  

  6.   

  7.    

  8.     /* Configure the EXTI line 18 connected internally to the USB IP */  

  9.     EXTI_ClearITPendingBit(EXTI_Line18);  

  10.                                               //  开启线18上的中断  

  11.     EXTI_InitStructure.EXTI_Line = EXTI_Line18; // USB resume from suspend mode  

  12.     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  //line 18上事件上升降沿触发  

  13.     EXTI_InitStructure.EXTI_LineCmd = ENABLE;  

  14.     EXTI_Init(&EXTI_InitStructure);        

  15.   

  16.     /* Enable the USB interrupt */  

  17.     NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;  //组2,优先级次之   

  18.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  

  19.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  

  20.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

  21.     NVIC_Init(&NVIC_InitStructure);  

  22.       

  23.     /* Enable the USB Wake-up interrupt */  

  24.     NVIC_InitStructure.NVIC_IRQChannel = USBWakeUp_IRQn;   //组2,优先级最高     

  25.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  

  26.     NVIC_Init(&NVIC_InitStructure);     

  27. }     


复习关于STM32的中断与事件:



                        这张图是一条外部中断线或外部事件线的示意图


图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套。


图中的蓝色虚线箭头,标出了外部中断信号的传输路径,

首先外部信号从编号1的芯片管脚进入,

经过编号2的边沿检测电路,

通过编号3的或门进入中断挂起请求寄存器,

最后经过编号4的与门输出到NVIC中断检测电路,

这个边沿检测电路受上升沿或下降沿选择寄存器控制,

用户可以使用这两个寄存器控制需要哪一个边沿产生中断,

因为选择上升沿或下降沿是分别受2个平行的寄存器控制,

所以用户可以同时选择上升沿或下降沿,而如果只有一个寄存器控制,那么只能选择一个边沿了.


按下来是编号3的或门,这个或门的另一个输入是软件中断/事件寄存器,

从这里可以看出,软件可以优先于外部信号请求一个中断或事件,

即当软件中断/事件寄存器的对应位为"1"时,不管外部信号如何,编号3的或门都会输出有效信号.


一个中断或事件请求信号经过编号3的或门后,进入挂起请求寄存器,到此之前,中断和事件的信号传输通路都是一致的,也就是说,挂起请求寄存器中记录了外部信号的电平变化.


外部请求信号最后经过编号4的与门,向NVIC中断控制器发出一个中断请求,如果中断屏蔽寄存器的对应位为"0",则该请求信号不能传输到与门的另一端,实现了中断的屏蔽.



明白了外部中断的请求机制,就很容易理解事件的请求机制了.



图中红色虚线箭头,标出了外部事件信号的传输路径,

外部请求信号经过编号3的或门后,进入编号5的与门,

这个与门的作用与编号4的与门类似,

用于引入事件屏蔽寄存器的控制;最后脉冲发生器的一个跳变的信号转变为一个单脉冲,

输出到芯片中的其它功能模块.


从这张图上我们也可以知道,从外部激励信号来看,中断和事件的产生源都可以是一样的.之所以分成2个部分,由于中断是需要CPU参与的,需要软件的中断服务函数才能完成中断后产生的结果;但是事件,是靠脉冲发生器产生一个脉冲,进而由硬件自动完成这个事件产生的结果,当然相应的联动部件需要先设置好,比如引起DMA操作,AD转换等;



简单举例:


外部I/O触发AD转换,来测量外部物品的重量;如果使用传统的中断通道,需要I/O触发产生外部中断,外部中断服务程序启动AD转换,AD转换完成中断服务程序提交最后结果;要是使用事件通道,I/O触发产生事件,然后联动触发AD转换,AD转换完成中断服务程序提交最后结果;相比之下,后者不要软件参与AD触发,并且响应速度也更块;要是使用事件触发DMA操作,就完全不用软件参与就可以完成某些联动任务了。

总结:

可以这样简单的认为,事件机制提供了一个完全有硬件自动完成的触发到产生结果的通道,不要软件的参与,降低了CPU的负荷,节省了中断资源,提高了响应速度(硬件总快于软件),是利用硬件来提升CPU芯片处理事件能力的一个有效方法;


关键字:stm32  USB  中断配置  初始化函数 引用地址:stm32学习笔记之USB中断配置初始化函数

上一篇:stm32 中断线 IO模式读写笔记
下一篇:STM32外部中断及定时器编程示例

推荐阅读最新更新时间:2024-03-16 16:05

基于STM32、ESP32,钢铁侠打造机械臂设计
一直是稚晖君很感兴趣的一个方向,而在中他认为最实用的非臂莫属。正巧,半年前稚晖君偶然淘到了一台二手机械臂,这让他有些激动。然而,喜悦之情还没持续多久,稚晖君就有些不开心了:在他花了一些时间将这台机械臂研究透彻,并自己开发了一套 K 后,感到了一点不妙:“这个手子不太行啊”。 稚晖君表示,目前市面上的机械臂都不够酷,因此决定要自己造一台很酷的机械臂,并将其取名为 Dummy(取自钢铁侠中一只名为 Dummy 的机械臂)。为此他总结了一份架构设计图(由于该图较长,中为滚动呈现,因此本文仅截取部分): 准备 既然是要设计一台机械臂,那就需要从硬件开始准备,毕竟无论软件再重要,也需要一个优质的载体才
[机器人]
STM32驱动PCF8591模块,实现ADDA转换
模块外观 原理图 PCF8591 模块原理图 模块说明: 模块所用芯片为 PCF8591T,贴片 封装 支持 4 路模拟电压采集信号输入(电压输入范围 0--5V)模块带电源指示灯 1 个(D1)模块带 DA 输出指示灯 1 个(D2),当 DA 输出电压达到一定值时,该指示灯亮,电压值越高,指示灯越亮模块集成 1 路 0--5V 电压输入采集(通过蓝白 电位器 调节输入电压)模块集成 1 路光敏电阻(型号:5537),可以通过 AD 采集环境光线强度模块集成 1 路热敏电阻(型号:MF58),可以通过 AD 采集环境温度 PCF8591 特点: 单电源供电;正常工作电源电压范围为 2.5V~6V;通过
[单片机]
<font color='red'>STM32</font>驱动PCF8591模块,实现ADDA转换
stm32 usb枚举过程
[单片机]
STM32 4路PWM配置函数
硬件连接:战舰STM32F103ZET6或其他 实验目标:通过调制占空比调节多路PWM控制LED的明暗; #include pwm.h #include led.h //PWM输出初始化 //arr:自动重装值 //psc:时钟预分频数 void TIM3_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Pe
[单片机]
stm32 IAP 实现
在对STM32存储器结构及相关知识了解后,我们就可以进行IAP的设计了。 在上一篇笔记中,进行了一个简单的IAP程序结构,以及和User App程序的相互联系的系统设计。 本篇对IAP实现的细节进行了较为详细的论述,包括源码结构的设计;我们从上位机(PC C#)和下位机(MCU C)共同描述IAP功能的实现过程。 1 STM32的IAP实现平台 IAP功能的实现需要两个方面(上位机和STM32上的IAP程序)的密切合作。因此,我们除了需要知道STM32芯片上的IAP程序结构,我们还需要了解上位机的程序结构,这样才能使上位机和STM32很好的相互工作。 下位机(指的是STM32构成的单片机系统): 本下位机系统使用C语言
[单片机]
<font color='red'>stm32</font> IAP 实现
STM32的SPI采用DMA方式传输测试
环境: 主机:WIN7 开发环境:MDK4.23 MCU:STM32F103CBT6 说明: 参考链接: http://www.openedv.com/posts/list/3159.htm SPI传输数据分为连续传输和非连续传输. 连续传输时序图: 非连续传输时序图: 非连续传输模式可以参考上篇文章: http://blog.csdn.net/jdh99/article/details/7598573 官方pdf关于连续和非连续传输的说明: 当在主模式下发送数据时,如果软件足够快,能够在检测到每次TXE的上升沿(或TXE中断),并立即在正在进行的传输结束之前写入SPI_DR寄存器,则能够实现连续的通信;此时,
[单片机]
<font color='red'>STM32</font>的SPI采用DMA方式传输测试
STM32单片机PS2遥控小车
电路原理图如下: STM32单片机源程序如下: #include led.h #include delay.h #include sys.h #include usart.h #include pstwo.h /********************************************************* 功能:通过PS2控制小车运动 作者:大海电子 时间:180531 硬件平台:STM32F103C8T6 时钟:8Mhz 硬件引脚分配: //手柄接口 DI=PB12; DO=PB13 ; CS=PB14; CLK=PB15; //L298N 电机驱动控制引脚 IN1=PA0;
[单片机]
<font color='red'>STM32</font>单片机PS2遥控小车
CS5261设计|USB-C转HDMI电路|替代AG9310
CS5261是一款USB TYPEC转HDMI4K30HZ的音视频转换方案芯片,该芯片USB Type-C到HDMI转换器结合了USBType-C输入接口和数字高清多媒体接口(HDMI)输出。嵌入式微控制器(MCU)基于工业标准8051内核。接收器端口将信道配置(CC)控制器、电源传输(PD)控制器、公告牌控制器和显示端口(DP)集成到HDMI v2。将0转换器转换为单个芯片,支持USB Type-C应用程序上的Display Port交替模式。 CS5261特性和参数功能跟AG9310的一样, 原则上是可以完全替代兼容AG9310,且整体方案设计简单、外围器件少、整体性价比高。 CS5261设计USB -C转HDMI音视频转
[单片机]
CS5261设计|<font color='red'>USB</font>-C转HDMI电路|替代AG9310
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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