嵌入式开发_STM32学习笔记

中断

控制LED的方式有两种:轮询和中断
中断包含在异常中,但异常不一定是中断。
STM32参考手册中,中断向量表描述了发生何种中断后会跳转到相应的地址中。表中灰色部分为系统异常,白色部分为外设中断/外部中断。系统异常中编号为负的中断优先级无法改变。每种中断的地址是固定的,即PC指针所跳转到的位置是固定的。stm32f10x_gpio.c文件中,__Vectors到__EndVectors中也定义了中断向量表的内容。stm32f10x_it.c中可以定义相关中断发生后会进行的操作。

中断控制器的初始化

STM32参考手册中,外部中断/事件线路映像描述了I/O端口到外部中断/事件线的连接方式。 例如I/O端口PA[0]与EXTI0外部中断线是相连的。
CoreM3权威手册中,向量中断控制器,简称为NVIC。

void PA0_EXTI0_Init(void)
{
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
	NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	//该结构体成员设置了结构体变量的抢占优先级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
	//该结构体成员设置了结构体变量的响应优先级
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	//该结构体成员设置了结构体变量的是否使能
	NVIC_Init(&NVIC_InitStructure);
}

中断控制器与GPIO的连接

STM32库函数手册中,GPIO_EXTILineConfig

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);

中断模式的设置

STM32库函数手册中,EXTI库函数GPIO_EXTILineConfig

EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.NVIC_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);

中断标志位的检测

利用EXTI_GetITStatus()函数来检测是否存在置位。

中断标志位的清除

利用EXTI_ClearITPendingBit()函数来清除标志位置位。
如果不清除标志位,则程序一直循环进入到中断中。

SysTick

STM32有三种基本的定时器:
高级控制定时器
通用定时器
基本定时器
STM32内部有一个硬件定时器——SysTick,滴答定时器。
异常向量表中,有一个内部中断向量 SysTick Handler。SysTick并不属于STM32的外设部分。SysTick定时器绑定在NVIC中,当SysTick计数达到一定值就会产生SysTick中断。
24bit
向下递减,减为0则读入load寄存器里的值
STK_VAL的值从STK_LOAD里所存的值开始递减,减到0,发生一次中断,并把STK_LOAD的值重新读入到STK_VAL。
STK_CTRL
AHB是72MHz
定时器配置完成后,需要先关闭定时器,需要时再开启。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值