STM32外部中断和IWDG

发布者:科技创客最新更新时间:2018-09-05 来源: eefocus关键字:STM32  外部中断  IWDG 手机看文章 扫描二维码
随时随地手机看文章

实验平台:正点原子战舰开发板

系统:windows 7 64位

编译器:MDK 4.72a

参考例程:ATK串口例程,野火ISO串口例程


外部中断


中断主要分为两种:

1、系统异常中断也可以说的内核异常,这类异常中断有些是不可以控制的,如RESET,NMI,FAULT.

2、外部中断,这些中断都是可以设置的,每个GPIO都可以被设置为中断。

一、NVIC控制器

当要使用中断时候都要对NVIC进行设置

void  NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);

 

 

NVIC_IRQChannel  需要配置的中断线

NVIC_IRQChannelCmd  使能或关闭相应中断向量的中断响应 

NVIC_IRQChannelPreemptionPriority     配置相应中断向量抢占优先级 

NVIC_IRQChannelSubPriority  配置相应中断向量的响应优先级 

 

抢占 > 响应 ,先判断抢占 然后再判断响应。

 

要配置这些优先级组,可以采用库函数 NVIC_PriorityGroupConfig(),可输

入的参数为 NVIC_PriorityGroup_0   ~  NVIC_PriorityGroup_4,有5 种分配组。

关系式是: 

 

第0组:16种抢断

第1组:2种抢断,8种响应

第2组:4种抢断,4种响应

第3组:8种抢断,2种响应

第4组:16种响应,无抢断

 

数越小,优先级越高。当要用到N多中断时候才要设置这个优先级组。否则不用设置。

二、EXIT

STM32一共有16个中断线,编号为0~15。GPIOA~GPIOG的第0个引脚都属于0号中断线,所有的1引脚,都属于1号中断线,以此类推。但是每一个中断线同时只能响应一个引脚的中断,但是可以分时复用,设置不同的触发方式。

 

void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);//初始化的结构体函数

 

typedef struct

{

  uint32_t EXTI_Line;              //中断线号 EXTI_LineX;   

  EXTIMode_TypeDef EXTI_Mode;         //模式选择 中断或者事件

  EXTITrigger_TypeDef EXTI_Trigger; //触发方式

  FunctionalState EXTI_LineCmd;     //使能命令

                                 

}EXTI_InitTypeDef;

 

 

填写完这两个结构体,然后初始化就可以使用外部中断了。但是我们还需要中断函数

记得使能引脚的复用功能AFIO

中断函数有固定的函数名字,不能更改,我们可以从启动文件里看到中断函数

外部按键中断函数的一般格式为:

 

void EXTI2_IRQHandler(void) 

if( EXTI_GetITStatus(EXTI_Line2 ) != RESET)//判断某个线上的中断是否发生        

        { 

          中断逻辑… 

          EXTI_ClearITPendingBit( EXTI_Line2 );    //清除 LINE 上的中断标志位     

        }                 

三、IWDG

看门狗作用就是防止程序跑飞或者死机,当IWDG_KR没有定时写入0XAAAA时就会产生一个强制的复位信号使芯片重启。但是IWDG用的是内部RC时钟,频率不稳定,所以在喂狗时候要提前喂狗,防止勿复位。

void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);

打开和关闭IWDG的写入保护

void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);

分频比 2^n( n= 2 ~ 16) 最大256

void IWDG_SetReload(uint16_t Reload);

设置重载值最大4095

void IWDG_ReloadCounter(void);

重载IWDG_RLR寄存器的数

void IWDG_Enable(void);

使能IWDG

FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG);

查询预分频或者重载是否进行中

计算时间用:Tout=((4×2^prer)  ×rlr) /40 。

 

 

部分代码:

void IWDG_Init()

{

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

IWDG_SetPrescaler(4);

IWDG_SetReload(625);

IWDG_ReloadCounter();

IWDG_Enable();

}

 

 

void EXITX_Init()

{

EXTI_InitTypeDef EXIT_InitStruct;

NVIC_InitTypeDef NVIC_InitStruct;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);

EXIT_InitStruct.EXTI_Line = EXTI_Line2;

EXIT_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;

EXIT_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;

EXIT_InitStruct.EXTI_LineCmd = ENABLE;

NVIC_InitStruct.NVIC_IRQChannel = EXTI2_IRQn;

NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2;

NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;

NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;

EXTI_Init(&EXIT_InitStruct);

NVIC_Init(&NVIC_InitStruct);

}

 

void EXTI2_IRQHandler()

{

delay_ms(10);

if(KEY2 == 0)

{

IWDG_ReloadCounter();

}

EXTI_ClearITPendingBit(EXTI_Line2);

}


关键字:STM32  外部中断  IWDG 引用地址:STM32外部中断和IWDG

上一篇:STM32的IWDG使用
下一篇:stm32 独立看门狗 IWDG

推荐阅读最新更新时间:2024-03-16 16:12

STM32-printf重映射串口
在STM32开发过程中必然需要串口打印参与调试,而往往STM32调试分配串口不会固定,可能是在串口1,也有可能为串口2。该如何对printf进行重新映射串口呢? 只需要在生成的工程代码中添加如下代码: #include stdio.h #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif PUTCHAR_PROTOTYPE { HAL_UART_Transmit(&huart2 , (uint8_t *)&c
[单片机]
STM32的IO口的8种配置(GPIO)
1STM32的输入输出管脚有下面8种可能的配置:(4输入+2输出+2复用输出) ①浮空输入_IN_FLOATING ②带上拉输入_IPU ③带下拉输入_IPD ④模拟输入_AIN ⑤开漏输出_OUT_OD ⑥推挽输出_OUT_PP ⑦复用功能的推挽输出_AF_PP ⑧复用功能的开漏输出_AF_OD 1.1I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口 的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的
[单片机]
avr单片机和stm32区别与优缺点分析
  摘要:avr单片机和stm32单片机是目前使用较广泛的单片机,那么avr单片机和stm32单片机有什么区别呢?有什么优劣势呢?   一、AVR单片机介绍   AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced InstrucTIon Set CPU) 精简指令集高速8位单片机。可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。   avr单片机特点:   1. avr系列没有类似累加器A的结构,它主要是通过R16~R31寄存器来实现A的功能。在avr中,没有像51系列的数据指针DPTR,而是由X(由 R26、R27组成)、Y(由R28、R29组成)、
[单片机]
STM32出现HardFault_Handler问题查找方法
STM32出现HardFault_Handler故障的原因主要有两个方面: 1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。 2、堆栈溢出。增加堆栈的大小。 出现问题时排查的方法: 发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12、LR、PC、XPRS 寄存器依次入栈,其中LR即为发生异常前PC将要执行的下一条指令地址。 注意:寄存器均是32位,且STM32是小端模式。(参考Cortex-M3权威) 编写问题代码如下: void StackFlow(void) { in
[单片机]
<font color='red'>STM32</font>出现HardFault_Handler问题查找方法
STM32通用定时器使用
STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。(TIM1和TIM8是能够产生3对PWM互补输出的高级登时其,常用于三相电机的驱动,时钟由APB2的输出产生;TIM2-TIM5是普通定时器;TIM6和TIM7是基本定时器,其时钟由APB1输出产生) 本实验要实现的功能是:用普通定时器TIM2每一秒发生一次更新事件,进入中断服务程序翻转LED1的状态。 预备知识: ① STM32通用定时器TIM2是16位自动重装载计数器。 ② 向上计数模式:从0开始计数,计到自动装载寄存器(TIMx_ARR)中的数值时,清0,依次循环。 需要弄清楚的两个问题: 1.
[单片机]
<font color='red'>STM32</font>通用定时器使用
STM32入门笔记(3)——GPIO
STM32的每个I/O口都由7个寄存器控制:2个32位端口配置寄存器CRL和CRH;2个32位的数据寄存器IDR和ODR;1个32位的置位复位寄存器BSRR;1个16位的复位寄存器BRR;1个32位的锁存寄存器LCKR;最常用的有4个:CRL/CRH/IDR/ODR;因此通常情况下只需要配置好以上四个寄存器就可以了。而CRH和CRL作用是完全一样的,只不过CRH控制的是高8位的IO而CRL控制的是低8位的,因此IO的控制就显的比较简单了。 (1)使能IO时钟 老规矩,用到哪个IO使能哪组IO时钟。例:RCC- APB2ENR|=1 2; // 使能PORTA时钟 (2)配置IO输入/输出模式 STM32的输入输
[单片机]
关于STM32GPIO工作模式
一:转载链接(基于正点原子开源电子网):http://www.openedv.com/posts/list/21980.htm 二:转载学习内容如下:(本人作为学习笔记) 浮空,顾名思义就是浮在空中,上面用绳子一拉就上去了,下面用绳子一拉就沉下去了. 开漏,就等于输出口接了个NPN三极管,并且只接了e,b. c极 是开路的,你可以接一个电阻到3.3V,也可以接一个电阻到5V,这样,在输出1的时候,就可以是5V电压,也可以是3.3V电压了.但是不接电阻上拉的时候,这个输出高就不能实现了. 推挽,就是有推有拉,任何时候IO口的电平都是确定的,不需要外接上拉或者下拉电阻. (1)GPIO_Mode_AIN 模拟输
[单片机]
STM32单片机对TFTLCD的驱动设计
看了TFTLCD和FSMC(灵活的静态存储控制器)的简介,还是一知半解,不知所云。 TFTLCD使用80并口,80 并口有如下一些信号线: CS: TFTLCD 片选信号。 WR:向 TFTLCD 写入数据。 RD:从 TFTLCD 读取数据。 D[15: 0]: 16 位双向数据线。 RST:硬复位 TFTLCD。 RS:命令/数据标志( 0,读写命令; 1,读写数据)。 只是记住FSMC在使用的时候要初始化和使能就行了。 关于lcd.c这个文件竟然接近3000行,好吧,我是写不出来,只能在主函数里调用了。 main.c: intmain(void) { u8x=0; u8lcd_id[12];//存放LCDID字符串
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved