正点原子STM32F103(精英版)------EXTI

移植野火代码到正点上(没有报错,但是实验未成功,求解)

 

一、EXIT简介(外部中断/事件控制器)

 二、EXTI初始化结构体

EXTI_InitTypeDef

1-EXTI_Line:用于产生中断/事件  线

2-EXTI_Mode:EXTI模式(中断/事件)

3-EXTI_Trigger:触发(上/下/上下)

4-EXTI_LineCmd:使能或者失能(IMR/EMR)

 三、实验 (编程要点)

1.初始化要连接到EXTI的GPIO

2.初始化EXTI用于产生中断/事件

3.初始化NVIC,用于处理中断

4.编写中断服务函数

5.main函数

新建bsp_exti.c

#include "bsp_exti.h"

void EXTI_NVIC_Config(void)
{
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
	NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x02;
	NVIC_Init(&NVIC_InitStructure);
}


void EXTI_Key_Config(void)
{
 GPIO_InitTypeDef  GPIO_InitStructure;
 EXTI_InitTypeDef  EXTI_InitStructure;
	//配置中断优先级
	EXTI_NVIC_Config();
 	//初始化GPIO
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);	 //使能PE端口时钟
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;				 //LED0-->PB.5 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
 GPIO_Init(GPIOE, &GPIO_InitStructure);	  				 //推挽输出 ,IO口速度为50MHz
 GPIO_SetBits(GPIOE,GPIO_Pin_5); 						 //PE.5 输出高 

   //初始化EXTI
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);	 //GPIO作用EXTI中断必须开AFIO时钟(AFIO包含一些控制寄存器,其中有外部中断EXTI)
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);
	EXTI_InitStructure.EXTI_Line = EXTI_Line4;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_Init(&EXTI_InitStructure);
	

}

bsp_exti.h

#ifndef _BSP_EXTI_H
#define _BSP_EXTI_H

#include "stm32f10x.h"

#define LED1 PEout(5)// PB5



void EXTI_NVIC_Config(void);
void EXTI_Key_Config(void);

#endif

led.h

#ifndef __LED_H
#define __LED_H	 
#include "sys.h"

#define LED0 PBout(5)// PB5
#define LED1 PEout(5)// PE5	

#define LED_G_TOGGLE {GPIOE->ODR^=GPIO_Pin_5;}

void LED_Init(void);//初始化

		 				    
#endif

led.c

#include "led.h"

 

//初始化PB5和PE5为输出口.并使能这两个口的时钟		    
//LED IO初始化
void LED_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);	 //使能PB,PE端口时钟
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;				 //LED0-->PB.5 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure);					 //根据设定参数初始化GPIOB.5
 GPIO_SetBits(GPIOB,GPIO_Pin_5);						 //PB.5 输出高

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;	    		 //LED1-->PE.5 端口配置, 推挽输出
 GPIO_Init(GPIOE, &GPIO_InitStructure);	  				 //推挽输出 ,IO口速度为50MHz
 GPIO_SetBits(GPIOE,GPIO_Pin_5); 						 //PE.5 输出高 
}
 

stm32f10x_it.c

加上函数

void EXTI0_IRQHandler(void)
{
	if(EXTI_GetITStatus(EXTI_Line4)!=RESET)
	{
		LED_G_TOGGLE;
	}
	EXTI_ClearITPendingBit(EXTI_Line4);
}

记得在stm32f10x_it.h定义

void EXTI0_IRQHandler(void);

main.c

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "bsp_exti.h"
 
 


 int main(void)
 {
 	vu8 key=0;	
	delay_init();	    	 //延时函数初始化	  
	LED_Init();		  		//初始化与LED连接的硬件接口
	KEY_Init();         	//初始化与按键连接的硬件接口
	EXTI_Key_Config();
	LED1=0;					//先点亮红灯
	while(1)
	{
	
 }
}

编译时出现报错

 解决办法:

 将stm32f10x_exti.c路径加入。

编译不报错,但是实验版并没有实现按键中断使灯点灭情况。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
正点原子stm32f103项目keil是一个基于STM32F103芯片的项目,使用Keil开发环境进行开发。该项目包含了main.c、beep.h和EXTI.h等文件。在main.c文件中,包含了beep.h、key.h和EXTI.h头文件,并定义了一个主函数。在beep.h文件中,定义了BEEP_Init函数。此外,还需要设置头文件路径和宏定义全局变量。在Keil中,可以通过点击魔法棒,选择c/c++,然后在Include Path中添加头文件路径。同时,在Define输入框中填写相应的宏定义,如"STM32F10X_HD,USE_STDPERIPH_DRIVER"。这样就可以进行正点原子stm32f103项目的开发了。 #### 引用[.reference_title] - *1* *2* [正点原子STM32F103综合课程操作学习笔记(包含代码)](https://blog.csdn.net/weixin_47681071/article/details/118404776)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [正点原子STM32F103ZET6学习笔记-新建库函数工程模板](https://blog.csdn.net/qq_63306482/article/details/126180744)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值