外部中断实验

一、STM32 IO 口中断的一些基础概念
STM32 的每个 IO 都可以作为外部 中断的中断输入口, STM32F103 的中断控制器支持 19 个外部中 断/ 事件请求。每个中断设有状态位,每个中断 / 事件都有独立的触发和屏蔽设置。 STM32F103
19 个外部中断为:
线 0~15 :对应外部 IO 口的输入中断。
线 16 :连接到 PVD 输出。
线 17 :连接到 RTC 闹钟事件。
线 18 :连接到 USB 唤醒事件。
二、串口配置的一般步骤

串口配置的一般步骤
① 串口时钟使能,GPIO时钟使能:RCC_ APB2PeriphClockCmd();
串口复位:USART_ Delnit();  (这一步不是必须的)
③ GPIO端口模式设置:GPIO_ Init();模式设置为GPIO _Mode _AF_ PP 
④串口参数初始化:USART _Init();
⑤开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC _Init();
USART _ITConig();
⑥使能串口:USART _Cmd();
⑦编写中断处理函数:USART_xIRQHandler();
⑧串口数据收发:
void USART _SendData();     (发送数据到串口,DR)
uint16 _tUSART ReceiveData();   (接受数据,从DR读取接受到的数据)
⑨串口传输状态获取:
FlaqStatus USART _GetFlagStatus(USART_TypeDef USARTx ,uint16_tUSART _FLAG);
void USART _ClearlTPendingBit(USART _TypeDef*USARTx,uint16_t USART_IT;
三、串口操作相关库函数(省略入口参数)

void USART_Init();  (串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发 )     

void USART_Cmd;  (使能串口)
void USART _ITConfig();   (使能相关中断)
void USART _SendData();   (发送数据到串口,DR)
uint16_t USART_ ReceiveData();  (接受数据,从DR读取接受到的数据)

FlagStatus USART _GetFlagStatus();   (获取状态标志位 )

void USART _ClearFlag();   (清除状态标志位)
ITStatus USART _GetlTStatus();   (获取中断状态标志位)

void USART ClearTPendingBit();  (清除中断状态标志位)

四、使用 IO 口外部中断的一般步骤
1、
1 )初始化 IO 口为输入。
2 )开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。
3 )初始化线上中断,设置触发条件等。
4 )配置中断分组( NVIC ),并使能中断。
5 )编写中断服务函数。
2、外部中断的一般配置步骤

(1)初始化1O口为输入

 GPIO Init();

(2)开启1O口复用时钟
RCC_ APB2PeriphClockCmd(RCC _APB2Periph _AFIO,ENABLE);

(3)设置IO口与中断线的映射关系
void GPIO_ EXTILineConfig();
(4)初始化线上中断,设置触发条件等
EXTI_ Init();
(5)配置中断分组(NVIC),并使能中断
NVIC Init();
(6)编写中断服务函数

EXTIX _IRQHandler();
(7)清除中断标志位
EXTI _ClearlTPendingBit();
五、硬件部分
1、 指示灯 DS0 DS1
2、  3 个按键: KEY0 KEY1 KEY_UP
DS0 DS1 STM32 的连接在上一章已经介绍了,在 MiniSTM32 开发板上的按键 KEY0
连接在 PC5 上、 KEY1 连接在 PA15 上、 WK_UP 连接在 PA0 上。

 

注意: KEY0 KEY1 是低电平有效的,而 WK_UP 是高电平有效的,除了 KEY1 有上拉电阻(与 JTDI 共用),其他两个都没有上下拉电阻,所以,需要在 STM32 内部设 置上下拉。
六、软件部分
exit.c 文件总共包含 4 个函数。一个是外部中断初始化函数 void EXTIX_Init(void) ,另外 3
个都是中断服务函数。
void EXTI0_IRQHandler(void) 是外部中断 0 的服务函数,负责 WK_UP 按键的中断检测;
void EXTI9_5_IRQHandler (void) 是外部中断 5~9 的服务函数,负责 KEY0 按键的中断检测;
void EXTI15_10_IRQHandler (void) 是外部中断 10~15 的服务函数,负责 KEY1 按键的中断
检测;
1、exit.c函数

 

 

首先调用 KEY_Init 函数,来初始化外部中断输入的 IO 口,接着 调RCC_APB2PeriphClockCmd()函数来使能复用功能时钟。接着配置中断线和 GPIO 的映射 关系,然后初始化中断线。需要说明的是因为我们的 WK_UP 按键是高电平有效的,而 KEY0 和 KEY1 是低电平有效的,所以我们设置 WK_UP 为上升沿触发中断,而 KEY0 和 KEY1 则设 置为下降沿触发。这里我们把所有中断分配到第二组,把按键的抢占优先级设置成一样,而子优先级不同,这三个按键,KEY1 的优先级最高。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值