STM32F10x系列 中断

本文详细介绍了STM32F10x系列的中断机制,包括事件和中断的区别、中断向量控制器NVIC的工作原理、中断配置步骤以及外部中断EXTI的示例。在中断实验中,通过串口接收中断、定时器中断实现特定功能,并讨论了中断处理中的注意事项和可能遇到的问题,如串口接收中断的溢出错误处理。
摘要由CSDN通过智能技术生成

事件和中断

事件和中断是两个不同的东西,只是相互之间有联系,我在学习的过程中总是不能很好的理解这两个概念。
关于事件和中断的区别参考下面这三个链接:
《中段与事件的区别》
《概念问题:中断与事件有什么联系与区别?》
《[转]STM32之中断与事件—中断与事件的区别》
简单概括下。
中断:CPU单线程情况下只能处理单一任务,在有零时任务需要处理时,可以暂时放下当前任务,优先处理零时任务,再回过来处理之前的任务。多个中断可以进行嵌套,比如产生了多个零时任务,那么就可以按照优先级处理这多个零时任务,再回过来处理当前任务。
事件:字面意思,就是发生的事情,发生的事件会产生相应的信号给不同的服务,信号给中断服务就产生中断,给DMA就使用DMA通道,就是说事件可以去触发不同的任务。灵活的使用事件可以提高效率。

中断向量控制器NVIC

NVIC全程Nested vectoredinterrupt controller,用于控制中断的优先级。具体如下,
在这里插入图片描述
优先级分组是用于分配抢占优先级和子优先级的个数,根据自己的需要选择合适的优先级分组。
中断的优先级规则是:先比抢占优先级,抢占优先级相同再比子优先级,如果抢占优先级和子优先级都相同。抢占优先级顾名思义,可以抢占优先运行,它可以打断低优先级的中断,优先执行自己,所以可以嵌套。而响应优先级不能嵌套,他不能打断已经执行的中断,只能在多个抢占优先级相同情况下,排出顺序,等待当前中断函数运行结束后才能执行。

模板

使用中断的三步骤:
1.配置中断向量(配置中断优先级)
2.配置中断
3.编写中断函数

//建议所有中断的优先级配置只写成一个函数,因为这能更好地理清不同中断之间的优先关系
void NVIC_Config()
{
   
	NC_Init.NVIC_IRQChannel=TIM3_IRQn;   
	NC_Init.NVIC_IRQChannelCmd=ENABLE;    
	NC_Init.NVIC_IRQChannelPreemptionPriority=0;//抢占优先级
	NC_Init.NVIC_IRQChannelSubPriority=0;//子优先级,即响应优先级
	NVIC_Init(&NC_Init);
}

void timer3_init()
{
   
	TIM_TimeBaseInitTypeDef timer3;
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	//定时器配置
	timer3.TIM_ClockDivision=TIM_CKD_DIV1;//时钟分割
	timer3.TIM_CounterMode=TIM_CounterMode_Up;//向上计数模式
	timer3.TIM_Period=72*300-1;//预装载值
	timer3.TIM_Prescaler=1000-1;//分频
	TIM_TimeBaseInit(TIM3,&timer3);

	TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
	TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
	TIM_Cmd(TIM3,ENABLE);
}


void TIM3_IRQHandler(void)
{
   
	if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值