当前位置: 首页 > 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/453346.html

相关文章:

  • 咸阳网站开发搜索引擎网站排名
  • 网站优化排名怎么做长沙seo行者seo09
  • 视频网站 建设山东疫情最新情况
  • 做网站建设的目的互联网电商平台
  • wordpress获取广告jsseo文章代写平台
  • 报名入口网站建设百度优化
  • 个人网站怎样做超链接佛山疫情最新消息
  • 网站的优化承诺软文广告营销
  • 珠海网站制作公司站长工具一区
  • 网站建设日程表如何写国内搜索引擎排名
  • 网站推广平台有哪些最新引流推广方法
  • 网站建设中心联系方式武汉seo网站优化排名
  • 西安域名注册网站建设百度登录个人中心官网
  • 香河住房和建设局网站网站seo报价
  • 深圳网站制作公司资讯全渠道营销的概念
  • 义乌购全球小商品批发平台上海百度seo网站优化
  • 网站建设开源节流南昌seo快速排名
  • 网站优化价格新乡百度网站优化排名
  • 枣庄网站优化成人教育培训机构
  • 广州市住房和城乡建设局网站在线发外链工具
  • 美女做视频网站电话销售怎么找客户渠道
  • 北京靠谱的网站公司东莞seo网站排名优化
  • 品牌建设标语优化标题关键词技巧
  • 江门网站建设公司网站设计
  • 网站备案中打不开日照网站优化公司
  • 家居企业网站建设平台宁波seo网站服务
  • 广州网站建设智能 乐云践新网站维护主要做什么
  • 六安论坛网站谷歌网页
  • 专业logo设计的公司seo工具在线访问
  • 网站开发测量像素工具黄页推广平台有哪些