stm32外部中断
来源:互联网 发布:servlet传json到ajax 编辑:程序博客网 时间:2024/06/02 08:13
外部中断程序配置流程
//RCC时钟配置
void RCC_Configuration(void)
{
/*时钟配置*/
/*
*/
//开启各路时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);
}// RCC_APB2Periph_AFIO为复用功能时钟开启,基本上都要开启,比如端口作为输入/AD/TxRx等均属于复用功能
//GPIO配置
void GPIO_Configuration(void)
{
/*定义GPIO初始化结构体 GPIO_InitStructure */
GPIO_InitTypeDef GPIO_InitStructure;
/* 设置PA.0,PA.1,PA.2为上拉输入(EXTILine0)*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 | GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA , &GPIO_InitStructure);
/*设置 USART1 的Tx脚(PA.9)为第二功能推挽输出功能 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_Init(GPIOA , &GPIO_InitStructure);
/* 设置 USART1 的Rx脚(PA.10)为浮空输入脚 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA , &GPIO_InitStructure);
}
外部中断配置
void EXIT_Configuration(void)
{
//总结:从外到内
1要确定哪个引脚作为外部中断输入eg:GPIOA的第0个引脚
2确定了引脚之后,对应打开中断线。让引脚和中断线连接上
3设置上升沿、下降沿、还是上下升沿触发
4设置中断模式:为事件还是中断挂起
5使能该中断
6初始化上述配置
// 定义EXIT初始化结构体EXTI_InitStructure
EXTI_InitTypeDefEXTI_InitStructure;
// 定义PA.0为外部中断0输入通道(EXIT0)
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
// 定义PA.1为外部中断1输入通道(EXIT1)
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1);
// 定义PA.2为外部中断2输入通道(EXIT2)
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource2);
//选择外部中断的通道 共有EXTI_Line0到EXTI_Line18(0-15 16RTC17PVD 18USB)
//比如:这里选择了3个通道
EXTI_InitStructure.EXTI_Line = EXTI_Line0 |EXTI_Line1 | EXTI_Line2;
///这里设置EXTI中断模式 :2种---事件中断和中断挂起
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
//选择中断触发方式3种:下降沿触发、上升沿触发、上下升沿都触发
//这里选择下降沿触发
EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;
//使能中断
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
//初始化上述中断配置
EXTI_Init(&EXTI_InitStructure);
}
//外部中断处理函数
void EXTI_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET) //确保是否产生了EXTILine0中断
{
EXTI_ClearITPendingBit(EXTI_Line0); //清除中断标志位
}
if(EXTI_GetITStatus(EXTI_Line1) != RESET)//确保是否产生了EXTI Line1中断
{
EXTI_ClearITPendingBit(EXTI_Line1); //清除中断标志位
}
if(EXTI_GetITStatus(EXTI_Line2) != RESET)//确保是否产生了EXTI Line2中断
{
EXTI_ClearITPendingBit(EXTI_Line2); //清除中断标志位
}
}
如下图:这里PA0连接到EXTI0
这里PA1连接到EXTI1
这里PA2连接到EXTI2
- STM32外部中断测试
- STM32外部中断测试
- STM32外部中断总结
- STM32外部中断
- STM32外部中断设置
- STM32外部中断
- STM32外部中断
- STM32外部中断详解
- STM32外部中断详解
- STM32外部中断
- STM32外部中断详解
- STM32 外部中断
- 关于STM32外部中断
- STM32外部中断
- STM32 外部中断
- STM32 外部中断
- stm32外部中断
- stm32 外部中断学习
- 大小端模式的快速判断方法
- IOS教材单词之二
- 串的模式匹配--BF算法
- 设置UIWebView不可回弹
- sql分组查询并去重
- stm32外部中断
- jboss log4j配置
- 关于局部函数返回值的一个有趣问题
- Struts2之国际化 .
- 主机信息获取
- nyoj 949哈利波特(细节题)
- 禁用backspace键的后退功能,但是可以删除文本内容
- 第七周 项目三 简单分支问题
- cas代理模式的原理及配置