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

房屋租赁网站开发需求分析优化网络的软件

房屋租赁网站开发需求分析,优化网络的软件,个人怎样申请网站,手机网站排名优化基础知识: 中断控制 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.hrbkazy.com/news/759.html

相关文章:

  • 教育机构网站建设加盟国内新闻最新消息今天
  • wordpress 背景图南昌百度seo
  • 辽宁高速公路建设局网站宁德市人民政府
  • 网站怎么做域名解析网络服务商怎么咨询
  • 中企动力做网站真贵网站seo公司
  • 京东商城网站的搜索引擎营销做的案例分析软件定制
  • c网站开发视频上海seo培训中心
  • 企业信息平台网站官网吸引客流的25个技巧
  • 如何做网站做网站需要多少钱网站建设的基本流程
  • 建立网站准备工作个人怎么做百度竞价
  • 做研究的网站seo关键词排优化软件
  • 预付网站制作费怎么做凭证seo网站关键词优化报价
  • 番禺网站优化平台友情链接是什么
  • 制作网站教学谷歌广告平台
  • 电商网站建设计划书电商培训有用吗
  • 南昌定制网站公司手机网站怎么优化
  • 网站模板怎么套用徐州seo排名公司
  • 杭州网站建设怎么样百度收录的网页数量
  • 新浪网站是什么程序做的seo网站推广服务
  • 上海学网站建设今日军事头条新闻
  • node框架做网站百度指数查询官方网
  • 杭州网站前端建设免费网站免费
  • 昆明网络营销公司哪家比较好江西seo
  • 雄县网站建设打开百度网页版
  • 网站建设售后网上营销网站
  • 天津市建设银行网站广告推广赚钱
  • 做现货黄金看什么网站全网营销推广
  • asp动态网站开发试题衡阳百度推广公司
  • 做的好的国外网站查域名的网址
  • wordpress版seo快速提升排名