问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

STM32中断功能的实现

发布网友 发布时间:2022-05-01 13:52

我来回答

1个回答

热心网友 时间:2023-10-16 08:49

//GPIO中断实验,按键KEY1接上拉电阻,通过PC3做为中断输入,DS1(PF10)做为中断指示,中断一次,亮灭状态改变一次。
#include "stm32f10x.h"
u8 count=0;//软件延时寄存器。
//**********************************************函数声明
void Delay_ms(vu16 nCount); //ms级延时函数声明。
void Delay_10us(vu16 nCount);//10us级延时函数声明。
void GPIO_PC_Init(void);
void GPIO_PF_Init(void);
void EXTI_Line3_Init(void);
void NVIC_Configuration(void);
//*******************************************初始化子程序
void GPIO_PC_Init(void)//PC3初始化子程序
{
GPIO_InitTypeDef GPIO_InitStructure; //声明一个名为GPIO_InitStructure的结构体,其原型由GPIO_InitTypeDef确定。只能放在一个函数的最前面。
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//选择待初始化的端口号
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入模式(因为外部有上拉电阻)。
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//管脚速度设定。
GPIO_Init(GPIOC,&GPIO_InitStructure);//用以上参数初始化GPIOC。

GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource3);//指定用作外部中断线路的管脚。
}
void GPIO_PF_Init(void)//PC3初始化子程序
{
GPIO_InitTypeDef GPIO_InitStructure; //声明一个名为GPIO_InitStructure的结构体,其原型由GPIO_InitTypeDef确定。只能放在一个函数的最前面。
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;//开漏输出模式。
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;//管脚速度设定。
GPIO_Init(GPIOF,&GPIO_InitStructure);//用以上参数初始化GPIOF。
}
void EXTI_Line3_Init(void)//中断线PC3的配置。
{
EXTI_InitTypeDef EXTI_InitStructure;//声明一个名为EXTI_InitStructure的结构体,其原型由EXTI_InitTypeDef确定。只能放在一个函数的最前面。
EXTI_InitStructure.EXTI_Line=EXTI_Line3;//选择待初始化的外部中断端口
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//设置EXTI线路为中断请求。
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//设置输入线路中断请求为下降沿触发。
EXTI_InitStructure.EXTI_LineCmd=ENABLE;//中断线使能。
EXTI_Init(&EXTI_InitStructure);//用以上参数初始化外部中断。
}
void NVIC_Configuration(void)//NVIC嵌套向量中断控制器配置。
{
NVIC_InitTypeDef NVIC_InitStructure;//声明一个名为NVIC_InitStructure的结构体,其原型由NVIC_InitTypeDef确定。
NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn;//指定要配置的中断源。
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//设置先占优先级.
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//设置从优先级。
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//使能中断
NVIC_Init(&NVIC_InitStructure);//用以上参数初始化中断控制器。
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//设置优先级分组位长度.
}
int main(void)
{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOF|RCC_APB2Periph_AFIO, ENABLE);//开启GPIOC,GPIOF,AFIO(复用时钟)的时钟。
//要配置stm32的事件输出/外部中断/重映射的时候.就必须开启复用时钟.
GPIO_PC_Init();
GPIO_PF_Init();
EXTI_Line3_Init();
NVIC_Configuration();
while(1);//等待中断。

}
void EXTI3_IRQHandler(void)//外部中断线3的中断服务程序。
{
if(EXTI_GetITStatus(EXTI_Line3)==SET);//检测指定线路的中断请求是否产生。
{
Delay_ms(10);//去抖延时
while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)==0);//等待按键释放
GPIO_WriteBit(GPIOF, GPIO_Pin_10, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOF, GPIO_Pin_10)));//对GPIOF_10脚输出取反。
Delay_ms(100);
}
EXTI_ClearFlag(EXTI_Line3);//与EXTI_ClearITPendingBit(EXTI_Line3);等效 清除中断标注后,下次中断才能进入。

}
/*******************************************************************************
* 函数功能:1ms延时,8M晶振
*******************************************************************************/
void Delay_ms(vu16 nCount)
{
vu16 i;
for(; nCount >0; nCount--)
for(i=10276;i!=0;i--);
}
/*******************************************************************************
* 函数功能:10us延时,8M晶振
*******************************************************************************/
void Delay_10us(vu16 nCount)
{
vu16 i;
for(; nCount >0; nCount--)
for(i=74;i!=0;i--);
}

只要将相应的端口改为你自己的端口就OK了。

热心网友 时间:2023-10-16 08:49

//GPIO中断实验,按键KEY1接上拉电阻,通过PC3做为中断输入,DS1(PF10)做为中断指示,中断一次,亮灭状态改变一次。
#include "stm32f10x.h"
u8 count=0;//软件延时寄存器。
//**********************************************函数声明
void Delay_ms(vu16 nCount); //ms级延时函数声明。
void Delay_10us(vu16 nCount);//10us级延时函数声明。
void GPIO_PC_Init(void);
void GPIO_PF_Init(void);
void EXTI_Line3_Init(void);
void NVIC_Configuration(void);
//*******************************************初始化子程序
void GPIO_PC_Init(void)//PC3初始化子程序
{
GPIO_InitTypeDef GPIO_InitStructure; //声明一个名为GPIO_InitStructure的结构体,其原型由GPIO_InitTypeDef确定。只能放在一个函数的最前面。
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//选择待初始化的端口号
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入模式(因为外部有上拉电阻)。
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//管脚速度设定。
GPIO_Init(GPIOC,&GPIO_InitStructure);//用以上参数初始化GPIOC。

GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource3);//指定用作外部中断线路的管脚。
}
void GPIO_PF_Init(void)//PC3初始化子程序
{
GPIO_InitTypeDef GPIO_InitStructure; //声明一个名为GPIO_InitStructure的结构体,其原型由GPIO_InitTypeDef确定。只能放在一个函数的最前面。
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;//开漏输出模式。
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;//管脚速度设定。
GPIO_Init(GPIOF,&GPIO_InitStructure);//用以上参数初始化GPIOF。
}
void EXTI_Line3_Init(void)//中断线PC3的配置。
{
EXTI_InitTypeDef EXTI_InitStructure;//声明一个名为EXTI_InitStructure的结构体,其原型由EXTI_InitTypeDef确定。只能放在一个函数的最前面。
EXTI_InitStructure.EXTI_Line=EXTI_Line3;//选择待初始化的外部中断端口
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//设置EXTI线路为中断请求。
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//设置输入线路中断请求为下降沿触发。
EXTI_InitStructure.EXTI_LineCmd=ENABLE;//中断线使能。
EXTI_Init(&EXTI_InitStructure);//用以上参数初始化外部中断。
}
void NVIC_Configuration(void)//NVIC嵌套向量中断控制器配置。
{
NVIC_InitTypeDef NVIC_InitStructure;//声明一个名为NVIC_InitStructure的结构体,其原型由NVIC_InitTypeDef确定。
NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn;//指定要配置的中断源。
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//设置先占优先级.
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//设置从优先级。
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//使能中断
NVIC_Init(&NVIC_InitStructure);//用以上参数初始化中断控制器。
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//设置优先级分组位长度.
}
int main(void)
{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOF|RCC_APB2Periph_AFIO, ENABLE);//开启GPIOC,GPIOF,AFIO(复用时钟)的时钟。
//要配置stm32的事件输出/外部中断/重映射的时候.就必须开启复用时钟.
GPIO_PC_Init();
GPIO_PF_Init();
EXTI_Line3_Init();
NVIC_Configuration();
while(1);//等待中断。

}
void EXTI3_IRQHandler(void)//外部中断线3的中断服务程序。
{
if(EXTI_GetITStatus(EXTI_Line3)==SET);//检测指定线路的中断请求是否产生。
{
Delay_ms(10);//去抖延时
while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)==0);//等待按键释放
GPIO_WriteBit(GPIOF, GPIO_Pin_10, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOF, GPIO_Pin_10)));//对GPIOF_10脚输出取反。
Delay_ms(100);
}
EXTI_ClearFlag(EXTI_Line3);//与EXTI_ClearITPendingBit(EXTI_Line3);等效 清除中断标注后,下次中断才能进入。

}
/*******************************************************************************
* 函数功能:1ms延时,8M晶振
*******************************************************************************/
void Delay_ms(vu16 nCount)
{
vu16 i;
for(; nCount >0; nCount--)
for(i=10276;i!=0;i--);
}
/*******************************************************************************
* 函数功能:10us延时,8M晶振
*******************************************************************************/
void Delay_10us(vu16 nCount)
{
vu16 i;
for(; nCount >0; nCount--)
for(i=74;i!=0;i--);
}

只要将相应的端口改为你自己的端口就OK了。
【STM32学习】——TIM定时中断

中断处理函数 TIM2_IRQHandler确保了中断的正确响应和计数的准确性。这个过程强调了代码模板和坚持的重要性,因为高效率的编程习惯和持久的专注是实现项目成功的关键因素。总结,STM32的TIM定时中断技术为开发者提供了丰富的定时解决方案,通过深入了解和实践,我们可以更好地利用这一强大的功能,提升系统的性...

STM32F103,了解一下?

STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了ARM Cortex-M3内核,主频高达72MHz。2. 内置IO口和存储器接口,便于与外部器件进行通信和控制。3. 支持外部时钟和复位功能,可通过端口配置实现其他功能。4. 具有容忍5V电压的能力,适用于较宽的工作电压范围。5. 内置看门狗定时器和电源管理单元,可提高系统的稳定性和功耗效率。6. 支持多种外设接口,如ADC、DAC、UART、SPI等。7. 集成了…STM32是ARM Cortex内核单片机和微处理器市场和技术方面的佼佼者,目前提供16大产品线 (F0, G0, F1, F2, F3, G4, F4, F7, H7, MP1, L0, L1, L4, L4+,L5, WB),超过1000个型号。STM32产品广泛应用于工业控制、消费电子、物联网、通讯设备、医疗服...

STM32_5——EXTI外部中断输入实验

进入中断领域 - 将PH15引脚设置为GPIO_EXTI15,选择下降沿触发外部中断,开始构建中断逻辑。NVIC的魔法:设置中断优先级 - 调整嵌套向量中断控制器的属性,确保紧急情况的快速响应。时钟源:提升运行速度 - 选择外部高速时钟源,确保中断操作的高效执行。代码编排 - 保存工程文件,自动生成中断相关代码,并...

stm32 f103怎样设置外部中断?

1、第一个参数选外设端口。2、第二个选enable or disable。3、直接看库源文件STM32F10x_StdPeriph_Driver\src\stm32f10x_rcc.c,1090行,已经写明了可用的参数。

关于STM32的串口中断

USART_ReceiveData(USART1); // 确保读取状态后能紧跟着有读缓冲数据的动作 就是要保证在中断里一定先读SR再读DR这样的一个完整序列,才能清除串口的各种出错状态,这是STM32清串口状态特有的,编写STM32串口程序应该特别注意的。

stm32怎么配置中断?

4.数据发送与接收。STM32 的发送与接收是通过数据寄存器 USART_DR 来实现的,这是 一个双寄存器,包含了 TDR 和 RDR。当向该寄存器写数据的时候,串口就会自动发送,当收 到数据的时候,也是存在该寄存器内。STM32 库函数操作 USART_DR 寄存器发送数据的函数是:void USART_SendData(USART_TypeDef* ...

如何用stm32实现使用中断exti按一下实现一个功能

u32 Temp = 0x00;PEout(2) = ~PEout(2);Temp =EXTI->PR; //取读是那个引脚的中断 switch(Temp){ caseExti_From_Pin8:EXTI_ClearITPendingBit(EXTI_Line8);break;caseExti_From_Pin9:if(Sys_Status < MAX_STATUS){ Sys_Status ++;} EXTI_ClearITPendingBit(EXTI_Line9);break;default:...

stm32中断编程要求:2个中断,2个优先级,2个初始化函数

(5)NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//设置开启中断。可以理解为开启总中断。(6)NVIC_Init(&NVIC_InitStructure);//调用出事换函数,初始化这个中断。6、最都不要忘记在stm32f10x_it.c中编写中断服务程序。不要忘记,清除中断标志位。void PPP_IRQHandler(void){} 我们在这个函数中...

STM32HAL 串口发送(中断方式)

HAL_UART_Transmit_IT在连续使用时要在后面加上while(huart1.gState != HAL_UART_STATE_READY);就可以了

stm32 如何实现中断嵌套

若设置STM32的中断嵌套需要先使用NVIC_PriorityGroupConfig()这个函数选择优先级分组,然后通过NVIC_InitStructure来配置一个中断的通道(个人认为称作这个中断优先级的名字更好)、抢占式优先级和响应优先级及其使能。给不同的中断指定不同的抢占优先级即可实现32的中断嵌套。当然,这前提是你设置好中断。中断...

STM32中断函数怎么用?

你打开stm32的启动文件,例如startup_stm32f10x_hd.s 里面有很多中断跳转的入口。用白话说就是固件库帮你写好了发生什么中断时跳转到哪里,这些名字是一个函数名,你要把这些函数写出来,然后中断来了stm32就跳到这样函数名的函数里面来。

中断的主要功能是什么 中断的意义和功能 中断功能具有什么好处 此功能看似已中断 中断的 程序中断的作用 中断的处理过程 中断有什么用 中断分类
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
哪些狗好养 眉山到重庆顺丰快递多少 从四川寄信到重庆要多少天啊 四川眉山到重庆万州,哪种快递最便宜 四川眉山市洪雅县寄信到重庆市垫江县大概多少天能到? 关于韵达快递的 优速快递成都眉山到重庆需要多久的时间? 用烤箱烤红薯(用烤箱烤红薯的温度和时间) 海鲜酱油能完全替代生抽在烹饪中使用吗? ...钻戒,但是我的预算不多,想知道晶豆子的莫桑石戒指大家觉得怎么样... 蔬菜水果批发市一级二级有什么区别 请问我用stm32的外部中断时,使用下降沿触发,那么按键导致下降沿可以触发下降沿从而进入中断函数,但是 STM32能通过按键中断实现连续按键吗 stm32按键的问题 用STM32做矩阵键盘、自己理解的外部中断方式的几个问题。 stm32按键消抖时间大概是多少 stm32的外部中断线 如何防抖动? 给一个按键 就进入中断好多次 怎么办? stm32中断函数中计数,在按键处理函数中查询计数值来消抖,怎么弄的? STM32中断采用按键上升沿怎样消抖啊? 梦见坐公交车手机被偷了,然后我发现后,小偷把手机还给我了,这是什么意思?以前手机被偷过 梦见自已驾车出行遭遇撞车和手机钱包被偷? 梦见在车站等车手机被偷然后去报案? 梦见车子被偷走但小偷的手机掉我家了 梦见车和手机让人偷走了 周公解梦梦见自己被迷晕手机和车都丢了? 冰箱有1-7按几档比较快结冰啊 万宝单门七档冰箱开几档急冻才有结冰 夏天冰柜调几档才结冰 冰箱开几档最容易结冰 梦见自己家的楼房着火 最近在自学STM32,写了一个按键中断程序,但是中断总是不响应...望大虾赐教,谢谢....程序如下 stm32外部按键中断无法退出中断问题 stm32按键中断程序第一次能进中断函数 后来就不行了 stm32实现按键功能 新手求助 STM32 按键检测问题。 STM32 EXTI中断问题 STM32矩阵键盘求教。在加上延时,软件去抖动的时候,程序就会在某一个按键上不动,求教那里出错了 一级市场与二级市场的区别: stm32在按键中断里读取按键的值程序卡死了 STM32两个按键怎么用同一个外部中断??? 购房款200万3年拿房产生利息是多少? 按现在的房贷利率,买200万的房子,贷款100万。贷一年要利息多少,贷两年利息要多少? 电脑键盘最上面那排字母打成数字 为什么电话机(手机)与电脑键盘上的数字排列顺序是不一样的呢 雅尼锂电池头灯yanl736t多少钱~个 经常洗碗对手有影响吗? 京东商城充电头灯锂电池多少钱一个 锂电池头灯60伏多少钱有没有 牛王进口锂电池头灯8218价格 佳格锂电池充电式头灯价格yd一612