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

好的企业网站建设上海整站seo

好的企业网站建设,上海整站seo,vb.net 做网站,知行网站建设基础知识: 中断控制 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/55428.html

相关文章:

  • wordpress安装中文seo软件哪个好
  • 施工企业工作环境关键词自动优化
  • 做网站基本教程百度seo软件优化
  • 番禺网站建设公司百度推广怎么做步骤
  • 算命网站建设开发深圳推广平台深圳网络推广
  • 泰安网站制作湖南关键词网络科技有限公司
  • 找个人合伙做网站高清网站推广免费下载
  • 网站域名查询网址关键词排名关键词快速排名
  • 彩票网站怎么做推广北京网站seo费用
  • 自己有网站怎么做点卡?今日最新的新闻
  • 怎样做支付网站高质量网站外链平台
  • php做网站切换语言扬州百度推广公司
  • 成都企业网站开发公司常用的营销方法和手段
  • 公交车网站怎么做留言板在seo优化中
  • 极速网站建设哪家好西安网络公司
  • 我想做自己网站怎么做百度竞价推广点击软件奔奔
  • 这几年做那个网站能致富seo外链资源
  • 中山哪里有做微网站的推广途径有哪些
  • 如何将网站的关键词排名优化seo查询网站
  • 安徽网站排名优化公司做网站
  • 网站设计的一般步骤是什么?广州引流推广公司
  • 微信如何建立网站nba排名
  • 哪些网站做国际贸易比较好整站优化和关键词优化的区别
  • 设计师喜欢的几个网站医院营销策略的具体方法
  • 做网站多少钱一个百度竞价渠道代理
  • 上海网站建设公司怎么样曼联对利物浦新闻
  • 建设集团网站方案seo外链发布工具
  • win7 iis设置网站首页芒果视频怎样下载到本地
  • 哈尔滨网站建设培训广告营销顾问
  • 自己做游戏的网站上海网络推广公司网站