stm32f103中断函数配置

2023-11-20

一、配置中断优先级NVIC

1.初始化中断结构体在misc.h中找到  NVIC_InitTypeDef 这个结构体并定义
2.中断优先级分组,在misc.c文件里找到  void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)   这个函数并选择组数,优先级分组由四个位决定,组0代表0个位用于决定主优先级,4个位用于决定子优先级,此时没有主优先级,有16个子优先级;组1代表有1个位决定主优先级,3个位决定子优先级,此时有两个主优先级,8个子优先级,以此类推
3.配置NVIC这个结构体的成员参数
① NVIC_InitStruct.NVIC_IRQChannel 的参数要到stm32f10x.h里找 ,0~4中断线在/******  STM32 specific Interrupt Numbers *******/这个模块里,大于4小于16的要到开发板对应的模块里找
②设置抢占优先级:根据中断优先分组配置
③设置子优先级:根据中断优先分组配置
④使能或失能总中断
4.调用misc.h中的   void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct) 这个函数将结构体成员参数写入
5.编写中断服务函数
①中断函数名要在 startup_stm32f10x_md.s 中找
②为方便管理所有中断函数要写到 stm32f10x_it.c 里
③判断中断标志位,在 stm32f10x_exit.h 中有  ITStatus EXTI_GetITStatus(uint32_t EXTI_Line) 这个函数 ,判断完后可执行相应操作
④清除中断标志位,在 stm32f10x_exit.h 中有 EXTI_ClearITPendingBit(uint32_t EXTI_Line) 这个函数 

二、配置中断函数

1.定义GPIO和EXIT结构体,在 stm32f10x_exit.h 中找到 EXTI_InitTypeDef 这个结构体并定义
2.调用中断优先级(NVIC)函数,配置中断优先级
3.初始化GPIO,初始化要连接到EXIT的GPIO(根据GPIO数字号数选择对应的EXIT),配置中断时引脚模式应该设置为浮空输入(由外部决定),输入的时候不需要定义引脚速度
4.初始化EXIT
①配置外部中断时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE) 
②调用stm32f10x_gpio.h中的 GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource),以PC13为例,改为GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);
③配置EXTI_InitTypeDef结构体成员参数
(1)EXTI_Line:产生中断或事件线
(2)EXTI_Mode:EXTI模式(中断/事件)
(3)EXTI_Trigger:触发方式
(4)EXTI_LineCmd:使能或失能(IMR/EMR)
④配置完后调用void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct); 将配置好的结构体参数写入

exit.h

#ifndef __EXIT_H__
#define __EXIT_H__

#include "stm32f10x.h"

#define LED_GPIO_PIN		GPIO_Pin_13
#define LED_GPIO_PORT		GPIOC
#define LED_GPIO_CLK		RCC_APB2Periph_GPIOC

void EXIT_Config(void);

#endif

exit.c

#include "stm32f10x.h"
#include "exit.h"

static void EXIT_NVIC_Config(void)  
{
	NVIC_InitTypeDef NVIC_InitStruct;  
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);  
	NVIC_InitStruct.NVIC_IRQChannel = EXTI15_10_IRQn; 
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1; 
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1; 
	NVIC_Init(&NVIC_InitStruct);  
}

void EXIT_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;   
	EXTI_InitTypeDef EXIT_InitStruct;    
	
	EXIT_NVIC_Config();
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  
	
	GPIO_InitStruct.GPIO_Pin = LED_GPIO_PIN;    
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
	GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);   
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);
	
	EXIT_InitStruct.EXTI_Line = EXTI_Line13;  
	EXIT_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;  
	EXIT_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising; 
	EXIT_InitStruct.EXTI_LineCmd = ENABLE;  
	EXTI_Init(&EXIT_InitStruct);
}

stm32f10x_it.c

void EXTI15_10_IRQHandler(void)
{
	if(EXTI_GetITStatus(EXTI_Line13) != RESET )
	{
		
	}
	EXTI_ClearITPendingBit(EXTI_Line13);   
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stm32f103中断函数配置 的相关文章

  • PostgreSQL9.4: jsonb 性能测试 - Postgres2015全国用户大会--重磅嘉宾佳作分享(谭峰)

    Postgres2015全国用户大会 重磅嘉宾佳作分享 谭峰 友情提示 2015Postgres全国大会将于2015年11月20至21日在北京举行 主会场设在北京丽亭华苑酒店 我们期待您的到来 2015Postgres全国大会官方报名地址
  • PAT (Advanced Level) 1001 A+B Format

    1001 A B Format 20 分 Calculate a b and output the sum in standard format that is the digits must be separated into group
  • 软件工程——软件实现

    在我们做好对软件的需求分析 设计之后 就是软件的实施部分了 主要包括软件实现 软件测试 测试方法 黑盒测试 主要是检查功能 数据 以及接口的问题 具体方法有等价划分 边界值分析 错误推断法 白盒测试 对程序所有逻辑路径进行测试 测试方法按覆
  • 点云Las文件是什么?

    点云Las文件是什么 1 LIDAR数据 2 LAS点云规格 3 LAS Header头文件 4 LAS Header版本与LAS点格式 5 点云Header与点格式对应关系 6 示例 查看点云文件的规格和格式 7 LAS读取可参考 pyl
  • python读取CT医学图像

    需要安装OpenCV和SimpleItk SimpleItk比较简单 直接pip install SimpleItk即可 代码如下 coding utf 8 import SimpleITK as sitk import cv2 LKDS

随机推荐