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

用html制作旅游网站物联网应用技术就业方向及前景

用html制作旅游网站,物联网应用技术就业方向及前景,店面设计的风格可以分成几种,一站式自媒体服务平台NVIC#xff1a;嵌套中断向量控制器#xff1a;用于统一分配中断优先级和管理中断 响应式优先级#xff1a;也可以称为插队式优先级哪个优先级高优先处理哪个 抢占式优先级#xff1a;优先级高的可以优先被处理#xff0c;相当于CPU可以暂时中断当前处理的程序#xff0c… NVIC嵌套中断向量控制器用于统一分配中断优先级和管理中断 响应式优先级也可以称为插队式优先级哪个优先级高优先处理哪个 抢占式优先级优先级高的可以优先被处理相当于CPU可以暂时中断当前处理的程序优先处理优先级更高的程序该程序执行完成后再执行原先没有执行完毕的程序也可以称之为嵌入式中断优先级 AFIO中断引脚选择是一个中断引脚选择器可以在前面GPIO外设的16个引脚中选择一个连接到EXTI边沿检测及控制中所以 相同的Pin不能同时触发中断因为PA0,PB0,PC0通过AFIO选择后只有其中一个可以连接到EXTI的通道0上PB1,PC1等也只有一个可以接入EXTI上 模拟电子技术与或门基础 旋转编码器讲解 旋转编码器的硬件电路 外部中断寄存器代码 1接线 #include stm32f10x.h // Device header// 编写初始化函数---模块化的第一步是编写初始化函数 void CountSersor_Init(void){/*外部中断配置 1: 配置RCC进涉及的外部中断时钟全部打开2配置GPIO选择端口为输入模式3: 配置AFIO选择需要使用到的GPIO并连接后面的exit4配置EXTI选择边沿触发的方式如上升沿下降沿或者是双边沿选择触发响应的方式5配置NVIC给中断选择一个合适的优先级*/} AFIO相关函数 用于复位AFIO外设调用这个函数会清除AFIO外设              void GPIO_AFIODeInit(void);              用于锁定GPIO配置调用这个函数参数指定某个引脚锁定引脚配置防止意外更改              void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);              以下的两个函数是用于配置AFIO的事件输出功能            void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);            void GPIO_EventOutputCmd(FunctionalState NewState);              这个函数可以用作引脚重映射第一个参数是重映射的方式第二个参数是新的状态              void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);              这个函数外部中断需要使用到的函数调用这个函数可以选择我们的中断引脚        void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);              和以太网相关外设暂时没有使用到              void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface); EXTI相关函数 NVIC配置 编写中断函数代码实现当遮挡传感器时oled显示屏中的数字加1 中断函数代码 #include stm32f10x.h // Device header uint16_t CountSensor_Count;// 编写初始化函数---模块化的第一步是编写初始化函数 void CountSersor_Init(void){//1------todo : 配置RCC进涉及的外部中断时钟全部打开// 开启GPIOB的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);// 开启AFIO的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);// EXPI和NVIC的时钟一直处于打开状态不需要我们手动开启//2------todo : 配置GPIO选择端口为输入模式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初始化函数初始GPIOBGPIO_Init(GPIOB,GPIO_InitStructure);// 3todo ------- 配置AFIO选择需要使用到的GPIO并连接后面的exitGPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);// 3todo -------配置EXTI选择边沿触发的方式如上升沿下降沿或者是双边沿选择触发响应的方式EXTI_InitTypeDef Exit_InitStruct;// 引出结构体成员Exit_InitStruct.EXTI_Line EXTI_Line14; // 指定需要配置的中断线Exit_InitStruct.EXTI_LineCmd ENABLE; // 开启中断Exit_InitStruct.EXTI_Mode EXTI_Mode_Interrupt; // 模式中断模式Exit_InitStruct.EXTI_Trigger EXTI_Trigger_Falling ;// 下降沿触发EXTI_Init(Exit_InitStruct);// 选择中断分组函数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){CountSensor_Count;// 中断程序结束后一定要清除中断程序标志位函数EXTI_ClearITPendingBit(EXTI_Line14);} } 中断函数头文件 #ifndef __COUNT_SENSOR_H__ #define __COUNT_SENSOR_H__/*外部中断配置 1: 配置RCC进涉及的外部中断时钟全部打开2配置GPIO选择端口为输入模式3: 配置AFIO选择需要使用到的GPIO并连接后面的exit4配置EXTI选择边沿触发的方式如上升沿下降沿或者是双边沿选择触发响应的方式5配置NVIC给中断选择一个合适的优先级*/ void CountSersor_Init(void); uint16_t CountSensor_Get(void);#endif主函数调用代码 #include stm32f10x.h // Device header #include Delay.h #include OLED.h #include CounterSensor.hint main(void) {// 初始化oledOLED_Init();CountSersor_Init();// 使用OLED显示字符串OLED_ShowString(1,3,Count:);while (1){OLED_ShowNum(1, 7, CountSensor_Get(), 5); } }旋转编码器中断 接线 编写中断函数模块部分代码 Encoder.c #include stm32f10x.h // Device headerint16_t Encoder_Count;// 编辑初始化函数 void Encoder_Init(void){//1------todo : 配置RCC进涉及的外部中断时钟全部打开// 开启GPIOB的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);// 开启AFIO的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);// EXPI和NVIC的时钟一直处于打开状态不需要我们手动开启//2------todo : 配置GPIO选择端口为输入模式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初始化函数初始GPIOBGPIO_Init(GPIOB,GPIO_InitStructure);// 3todo ------- 配置AFIO选择需要使用到的GPIO并连接后面的exitGPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource1);// 3todo -------配置EXTI选择边沿触发的方式如上升沿下降沿或者是双边沿选择触发响应的方式EXTI_InitTypeDef Exit_InitStruct;// 引出结构体成员Exit_InitStruct.EXTI_Line EXTI_Line0 | EXTI_Line1; // 指定需要配置的中断线Exit_InitStruct.EXTI_LineCmd ENABLE; // 开启中断Exit_InitStruct.EXTI_Mode EXTI_Mode_Interrupt; // 模式中断模式Exit_InitStruct.EXTI_Trigger EXTI_Trigger_Falling ;// 下降沿触发EXTI_Init(Exit_InitStruct);// 选择中断分组函数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); }//中断函数 void EXTI0_IRQHandler(void){// 检查中断标志位if(EXTI_GetITStatus(EXTI_Line0) SET){// 判断另外一个引脚的电平if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) 0){// 向着相反的方向旋转Encoder_Count--;}EXTI_ClearITPendingBit(EXTI_Line0);} }// 调用函数后返回count的变化值 int16_t Encoder_Get(void){int16_t Temp;Temp Encoder_Count;Encoder_Count 0;return Temp; }void EXTI1_IRQHandler(void){// 检查中断标志位if(EXTI_GetITStatus(EXTI_Line1) SET){// 判断引脚的电平if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0) 0){// 向着正方向旋转Encoder_Count;}EXTI_ClearITPendingBit(EXTI_Line1);} } Encoder.h代码 #ifndef __ENCODER_H__ #define __ENCODER_H__ void Encoder_Init(void); int16_t Encoder_Get(void); #endifmain.c调用编写好的中断函数 #include stm32f10x.h // Device header #include Delay.h #include OLED.h #include Encoder.hint16_t Num; int main(void) {// 初始化oledOLED_Init();Encoder_Init();// 使用OLED显示字符串OLED_ShowString(1,1,Num:);while (1){Num Encoder_Get();OLED_ShowSignedNum(1,5,Num,5);} }注编写中断函数代码时尽量做到简洁同时主函数中使用到的功能模块函数不要编写在中断函数中会出行编译错误中断程序中避免添加延时函数中断函数多事件的实时性处理能力较强。 以上是本人基于STM32中断部分知识的学习总结参考B站江科大教程
http://www.zqtcl.cn/news/685773/

相关文章:

  • 有心学做网站两学一做知识竞赛试题网站
  • 西宁圆井模板我自己做的网站怎么做网站能快速赚钱
  • 根据网站集约化建设的要求直流分公司四川建设部网站
  • 网站优化平台有哪些遵义网站开发的公司有哪些
  • 推荐一下网站谢谢微盟微商城怎么样
  • 网站建设的技术指标网站做好第二年要多少钱
  • 工业设计东莞网站建设WordPress网络功能
  • 网站pv多少可以企业网站托管常见问题
  • 深圳有哪些网站建设沈阳做机床的公司网站
  • 2022年网站能用的wordpress 客户端使用
  • 社交网站建设内容如何制作橡皮泥 简单
  • 简述网站的制作流程wordpress定制分类
  • 如何自建购物网站wordpress文章编辑插件
  • 网站策划机构建筑网站、
  • 邹平做网站的公司标志设计图片大全简单
  • 广东省建设厅官方网站多少钱如何在虚拟机里面做网站
  • 上海免费网站建设模板做网站页面的软件
  • 做折页的网站个人网站有哪些
  • 服装网站建设内容wordpress媒体库只能列表
  • 北京好的做网站的公司东莞专业做淘宝网站
  • 网站结构怎么优化wordpress文章列表添加字段
  • 网站建设框架图长沙官网seo技术厂家
  • 电子商务网站建设主管的策划案html个人网站设计模板
  • 网站首页的head标签内做网站要学的教程
  • 网页设计教学网站江西省建设监督网站
  • 网站建设与发布需要什么提供网站制作公司哪家好
  • 西宁市城市道路建设规划网站探测器 东莞网站建设
  • 旅游村庄网站建设方案小程序制作价格
  • 网站地图制作软件机械加工网免费铺货
  • 网站上线有什么线上活动可以做龙华建网站多少钱