当前位置: 首页 > wzjs >正文

合肥集团网站建设公众号开发

合肥集团网站建设,公众号开发,做防伪的网站,温岭网站制作基础知识: 中断控制 STM32 中断控制是微控制器系统中的关键机制,用于高效处理外部事件和内部异常。以下是其核心概念和工作原理的概述: 1. 中断基本概念 中断定义:CPU 在执行程序时,被内部或外部事件打断&#xff…

基础知识:

中断控制

STM32 中断控制是微控制器系统中的关键机制,用于高效处理外部事件和内部异常。以下是其核心概念和工作原理的概述:

1. 中断基本概念

  • 中断定义:CPU 在执行程序时,被内部或外部事件打断,转去执行预先安排好的处理程序(中断服务函数),处理完后返回原程序继续执行。
  • 中断源
    • 外部中断:来自 GPIO 引脚(如按键、传感器触发)。
    • 内部中断:定时器溢出、ADC 转换完成、通信接口数据接收等。
    • 异常:复位、硬件错误、调试事件等。

2. STM32 中断控制器(NVIC)

STM32 通过嵌套向量中断控制器(NVIC)管理中断,主要特性:

  • 中断优先级
    • 支持多级抢占优先级和子优先级(不同型号位数不同,如 4 位抢占 + 0 位子优先级)。
    • 抢占优先级高的中断可打断低优先级中断,形成嵌套。
  • 中断使能 / 禁用:每个中断源可独立配置使能位。
  • 挂起管理:存储待处理的中断请求。

3. 中断处理流程

  1. 中断发生:中断源产生有效信号(如上升沿、定时器溢出)。
  2. NVIC 响应:检查中断是否使能及优先级,若允许则挂起该中断。
  3. 上下文切换:CPU 保存当前程序计数器(PC)、寄存器等上下文。
  4. 执行中断服务函数(ISR):跳转到对应 ISR 地址执行。
  5. 恢复上下文:ISR 执行完毕后,恢复现场,继续执行原程序。

相关代码

对射式红外传感器计次

重要库函数文件编写CountSensor.c

#include "stm32f10x.h"                  // Device headeruint16_t CountSensor_Count;void CountSensor_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line = EXTI_Line14;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_Init(&EXTI_InitStructure);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitStructure);
}uint16_t CountSensor_Get(void)
{return CountSensor_Count;
}void EXTI15_10_IRQHandler(void)
{if (EXTI_GetITStatus(EXTI_Line14) == SET){/*如果出现数据乱跳的现象,可再次判断引脚电平,以避免抖动*/if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 0){CountSensor_Count ++;}EXTI_ClearITPendingBit(EXTI_Line14);}
}

主函数部分:

 

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "CountSensor.h"int main(void)
{OLED_Init();CountSensor_Init();OLED_ShowString(1, 1, "Count:");while (1){OLED_ShowNum(1, 7, CountSensor_Get(), 5);}
}

旋转编码器计次

重要库函数编写:Encoder.c

#include "stm32f10x.h"                  // Device headerint16_t Encoder_Count;void Encoder_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource1);EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line = EXTI_Line0 |EXTI_Line1 ;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_Init(&EXTI_InitStructure);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;NVIC_Init(&NVIC_InitStructure);
}int16_t Encoder_Get(void){int16_t temp=Encoder_Count;Encoder_Count=0;return temp;
}void EXTI0_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line0)==SET) {if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0) {Encoder_Count--;}EXTI_ClearITPendingBit(EXTI_Line0);}
}void EXTI1_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line1)==SET) {if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)==0) {Encoder_Count++;}EXTI_ClearITPendingBit(EXTI_Line1);}
}

主函数部分

#include "stm32f10x.h"
#include "Delay.h"
#include "OLED.h"
#include "Encoder.h"int16_t Num;int main(void)
{OLED_Init();Encoder_Init();//OLED_ShowString(1,3,"helloworld");while(1){Num+=Encoder_Get();OLED_ShowSignedNum(1,5,Num,5);}
}

http://www.dtcms.com/wzjs/359939.html

相关文章:

  • 莱芜建设网站海门网站建设
  • 收费网站建设邯郸网站seo
  • 网站设计培训费用是多少网络推广怎样做
  • 宝洁网站建设评价关键词优化多少钱
  • wordpress调用搜索功能微博关键词排名优化
  • 佛山网站免费制作爱站网注册人查询
  • 简单做网站的价格优化网站的方法有哪些
  • 加强门户网站建设的通知个人自己免费建网站
  • 贵阳优化网站建设宁波seo推广服务电话
  • 揭阳网站建设维护成功营销十大经典案例
  • 现在给别人做网站上海网络seo公司
  • 深圳 网站建设 销售中央常委成员名单
  • 公众号注册入口官网seo优化是指
  • 上海网站制作是什么酒店网络营销推广方式
  • 怎么样下载网页上的视频seo关键词优化平台
  • 俱乐部网站php源码线上营销策略有哪些
  • 定制网站建设和运营简述网站推广的意义和方法
  • 网站地图的使用化妆品软文推广范文
  • 古典风格网站模板html网站模板搭建
  • 十大搜索引擎排名关于seo如何优化
  • 一个完整网站制作的实例百度pc网页版
  • 怎样进行站点优化百度seo简爱
  • 香港做鸡网站杭州网站设计公司
  • 网站怎么做直播功能吗百度联盟点击广告赚钱
  • 公司平台建设怎么写深圳抖音seo
  • wordpress前台上传图片seo优化招聘
  • 网络架构分析优化排名推广教程网站
  • 网站一般用什么软件做市场营销案例150例
  • 网站正在建设中的网页怎么做南京seo招聘
  • 专做logo网站叫什么西安百度关键词排名服务