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

如何用虚拟主机做网站小型网站开发小论文

如何用虚拟主机做网站,小型网站开发小论文,岳池住房和城乡建设厅网站,深圳网站设计廊坊公司stm32 - 中断 概念中断向量表NVIC 嵌套中断向量控制器优先级 中断EXTI概念基本结构例子- 对射式红外传感器计次例子 - 旋转编码器 概念 stm32 支持的中断资源#xff08;都属于外设#xff09; EXTITIMADCUSARtSPII2C stm32支持的中断 内核中断 外设中断 中断通道与优先级 一… stm32 - 中断 概念中断向量表NVIC 嵌套中断向量控制器优先级 中断EXTI概念基本结构例子- 对射式红外传感器计次例子 - 旋转编码器 概念 stm32 支持的中断资源都属于外设 EXTITIMADCUSARtSPII2C stm32支持的中断 内核中断 外设中断 中断通道与优先级 一个外设可能占用多个中断通道一个EXTI外设模块可以有多个中断通道 每个中断通道有16个优先级 中断向量表 自定义的中断服务函数由编译器随机指定函数地址 stm32的中断由于硬件的限制只能跳到固定的地址执行程序 为了能让硬件跳转到一个不固定的中断函数中 需要在内存中定义一个地址列表这个列表的地址是固定的中断发生后先跳到这个固定位置然后在这个固定位置由编译器加上一条跳转到中断函数的代码这样中断就可以跳转到任意位置了 NVIC 嵌套中断向量控制器 用于同一分配中断优先级和管理中断的NVIC是一个内核外设 一个外设可能占用多个中断通道所以有n条线 NVIC只有一个输出口其根据每个中断的优先级分配中断的先后顺序 然后通过仅有的一个输出口通知CPU应该处理哪个中断 优先级 响应优先级“插队看病”抢占优先级“中断嵌套” NVIC中断优先级由优先级寄存器的4位0~15决定数值越小优先级越高 高n位为抢占优先级4-n位为响应优先级 抢占优先级高的可以中断嵌套响应优先高的可以优先排队抢占优先级和响应优先级均相同的按中断号排队 中断 EXTI 检测指定GPIO的电平信号 电平信号发生变化时EXTI申请中断 概念 触发方式 上升沿低-高触发中断 下降沿高-低触发中断 双边沿上升沿和下降沿都可以触发中断 软件触发引脚电平未发生变化通过在软件中调用执行代码触发中断 GPIO 任意的GPIO口都可以当做外部中断的引脚但是相同的pin引脚不能同时触发中断PA0/PB0; PA1/PB1/PC1 通道数 16个GPIO_pin外加PVD输出RTC闹钟USB唤醒以太网唤醒 触发响应方式 中断响应申请中断让CPU执行中断函数 事件响应 当外部中断检测到引脚电平变化时正常的流程是选择触发中断也可以选择触发事件那么外部中断的信号就不会通向CPU了而是通向其他外设用来触发其他外设的操作 基本结构 EXTI模块支持20个中断通道数16个pin_脚PVDRTCUSBETH 针对GPIO利用AFIO进行中断选择当使用GPIO实现外部中断时 PA0/PB0/PC0… 通过AFIO选择器选择一个作为pin_0通道 PA1/PB1/PC1… 通过AFIO选择器选择一个作为pin_1通道 PA2/PB2/PC2… 通过AFIO选择器选择一个作为pin_2通道 每个通道有16可配置优先级通过NVIC进行优先级配置 NVIC可以进行优先级分组抢占/响应每个分组都有取值范围不同的取值范围在CPU进行中断服务的时机不同 注意16个引脚输入通道最终只有7个输入其中9-5和15-10便成了路两路输出通道因此需要中断标志位判断哪一个中断过来 PB14引脚的电平信号就可以通过AFIO进入到EXTI电路中 例子- 对射式红外传感器计次 main.c #include stm32f10x.h #include OLED.h #include infrCountSensor.hint main() {OLED_Init();OLED_ShowString(1,1,helloworld);OLED_ShowString(2,1,count: );InfrCountSensor_Init(14);while (1) {OLED_ShowNum(2,8,InfrCountSensor_GetCount(),8);} }infrCountSensor.h #ifndef __INFRCOUNTSENSOR_H__ #define __INFRCOUNTSENSOR_H__ #include stm32f10x.h void InfrCountSensor_Init(unsigned char pin_num); unsigned int InfrCountSensor_GetCount(); uint16_t GPIO_Pin_Num_Set(uint16_t pin_num); uint8_t GPIO_AFIO_Pin_Num_Select(uint16_t pin_num); uint32_t EXTI_Line_Set(unsigned char pin_num); #endifinfrCountSensor.c #include infrCountSensor.hstatic unsigned int infrCountSensor_count;uint16_t GPIO_Pin_Num_Set(uint16_t pin_num) {uint16_t GPIO_Pin_num0;switch (pin_num){case 0: {return GPIO_Pin_0;break;}case 1: {return GPIO_Pin_1;break;}case 2: {return GPIO_Pin_2;break;}case 3: {return GPIO_Pin_3;break;}case 4: {return GPIO_Pin_4;break;}case 5: {return GPIO_Pin_5;break;}case 6: {return GPIO_Pin_6;break;}case 7: {return GPIO_Pin_7;break;}case 8: {return GPIO_Pin_8;break;}case 9: {return GPIO_Pin_9;break;}case 10: {return GPIO_Pin_10;break;}case 11: {return GPIO_Pin_11;break;}case 12: {return GPIO_Pin_12;break;}case 13: {return GPIO_Pin_13;break;}case 14: {return GPIO_Pin_14;break;}case 15: {return GPIO_Pin_14;break;}default: return GPIO_Pin_num;}}uint8_t GPIO_AFIO_Pin_Num_Select(uint16_t pin_num) {uint8_t AFIO_Pin_num0;switch (pin_num){case 0: {return GPIO_PinSource0;break;}case 1: {return GPIO_PinSource1;break;}case 2: {return GPIO_PinSource2;break;}case 3: {return GPIO_PinSource3;break;}case 4: {return GPIO_PinSource4;break;}case 5: {return GPIO_PinSource5;break;}case 6: {return GPIO_PinSource6;break;}case 7: {return GPIO_PinSource7;break;}case 8: {return GPIO_PinSource8;break;}case 9: {return GPIO_PinSource9;break;}case 10: {return GPIO_PinSource10;break;}case 11: {return GPIO_PinSource11;break;}case 12: {return GPIO_PinSource12;break;}case 13: {return GPIO_PinSource13;break;}case 14: {return GPIO_PinSource14;break;}case 15: {return GPIO_PinSource14;break;}default: return AFIO_Pin_num;} }uint32_t EXTI_Line_Set(unsigned char pin_num) {uint32_t EXTI_Line_num0;switch (pin_num){case 0: {return EXTI_Line0;break;}case 1: {return EXTI_Line1;break;}case 2: {return EXTI_Line2;break;}case 3: {return EXTI_Line3;break;}case 4: {return EXTI_Line4;break;}case 5: {return EXTI_Line5;break;}case 6: {return EXTI_Line6;break;}case 7: {return EXTI_Line7;break;}case 8: {return EXTI_Line8;break;}case 9: {return EXTI_Line9;break;}case 10: {return EXTI_Line10;break;}case 11: {return EXTI_Line11;break;}case 12: {return EXTI_Line12;break;}case 13: {return EXTI_Line13;break;}case 14: {return EXTI_Line14;break;}case 15: {return EXTI_Line15;break;}default: return EXTI_Line_num;} }void InfrCountSensor_Init(unsigned char pin_num) {// 打开GPIO/AFIO时钟// GPIO和AFIO是APB2总线的外设需要手动开启时钟,RCC用于配置内核外的外设时钟// EXIT中断默认开始时钟NVIC是内核外设内核外设也无需开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);// 配置GPIO 输入模式uint16_t GPIO_Pin_num0;GPIO_Pin_numGPIO_Pin_Num_Set(pin_num);GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_ModeGPIO_Mode_IPU; // 上拉输入GPIO_InitStructure.GPIO_PinGPIO_Pin_num;GPIO_InitStructure.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOB,GPIO_InitStructure);// 配置AFIO 选择器(中断引脚选择)// GPIO_AFIODeInit(); // 清空配置// GPIO_PinLockConfig(); // 锁定引脚防止意外被更改// GPIO_PinRemapConfig(); // 引脚重映射// 选择指定的GPIO / pin 作为外部中断源uint8_t AFIO_Pin_num0;AFIO_Pin_numGPIO_AFIO_Pin_Num_Select(pin_num);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,AFIO_Pin_num); // 配置数据选择器// AFIO_Pin_num 是AFIO的中断选择器号这里是第14个数据选择器// 配置EXTI中断,触发方式,触发响应方式// EXTI_DeInit(); // 清除配置// EXTI_StructInit(); // 结构体赋值// EXTI_GenerateSWinterrupt(); // 软件触发// 外部中断的外部状态寄存器会设置对应的标志位// 在主程序中读写外部中断标志位在中断服务函数中读写外部中断标志位uint32_t EXTI_Line_num0;EXTI_Line_numEXTI_Line_Set(pin_num);EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_LineEXTI_Line_num; // 指定要配置的中断线中断EXTI输入通道EXTI_InitStructure.EXTI_LineCmdENABLE; // 中断线的新状态开启中断EXTI_InitStructure.EXTI_ModeEXTI_Mode_Interrupt ; // 中断模式interrupt或事件模式eventEXTI_InitStructure.EXTI_TriggerEXTI_Trigger_Falling; //触发方式,下降沿EXTI_Init(EXTI_InitStructure); // 初始化// 配置NVIC,中断优先级进入CPU再执行中断程序NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 中断分组两位抢占两位响应NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannelEXTI15_10_IRQn; // 中断EXTI输出通道,15-10占用一个通道在中断服务函数中需要判断中断标志位NVIC_InitStructure.NVIC_IRQChannelCmdENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority1; // 抢占优先级(在抢占中断中)NVIC_InitStructure.NVIC_IRQChannelSubPriority1; // 响应优先级 (在响应中断中)NVIC_Init(NVIC_InitStructure); }void EXTI15_10_IRQHandler(void) // 中断函数 {// 中断标志位的判断if (EXTI_GetITStatus(EXTI_Line14)SET){// 清楚中断标志位EXTI_ClearITPendingBit(EXTI_Line14);infrCountSensor_count;} }unsigned int InfrCountSensor_GetCount() {return infrCountSensor_count; }例子 - 旋转编码器 对于两个中断AFIO、EXTI、NVIC的code方式 main.c #include stm32f10x.h #include Delay.h #include LED.h #include key.h #include Buzzer.h #include PhotoSensor.h #include OLED.h #include infrCountSensor.h #include encoder.hint main() {OLED_Init();OLED_ShowString(1,1,helloworld);OLED_ShowString(2,1,count: );Encoder_Init();while (1) {OLED_ShowSignedNum(2,8,Encoder_Get(),8);} } encoder.h #ifndef __ENCODER_H__ #define __ENCODER_H__#include stm32f10x.h void Encoder_Init(); int16_t Encoder_Get(); #endifencoder.c #include encoder.hint16_t encoder_rotate;void Encoder_Init() {// 打开GPIO/AFIO时钟// GPIO和AFIO是APB2总线的外设需要手动开启时钟,RCC用于配置内核外的外设时钟// EXIT中断默认开始时钟NVIC是内核外设内核外设也无需开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);// 配置GPIO 输入模式GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_ModeGPIO_Mode_IPU; // 上拉输入GPIO_InitStructure.GPIO_PinGPIO_Pin_0 | GPIO_Pin_1;GPIO_InitStructure.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOB,GPIO_InitStructure);// 配置AFIO 选择器(中断引脚选择)// 选择指定的GPIO / pin 作为外部中断源GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0); // 配置数据选择器// AFIO_Pin_num 是AFIO的中断选择器号这里是第14个数据选择器GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1); // 配置数据选择器// AFIO_Pin_num 是AFIO的中断选择器号这里是第14个数据选择器// 配置EXTI中断,触发方式,触发响应方式// 外部中断的外部状态寄存器会设置对应的标志位// 在主程序中读写外部中断标志位在中断服务函数中读写外部中断标志位;EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_LineEXTI_Line0 | EXTI_Line1; // 指定要配置的中断线中断EXTI输入通道EXTI_InitStructure.EXTI_LineCmdENABLE; // 中断线的新状态开启中断EXTI_InitStructure.EXTI_ModeEXTI_Mode_Interrupt ; // 中断模式interrupt或事件模式eventEXTI_InitStructure.EXTI_TriggerEXTI_Trigger_Falling; //触发方式,下降沿EXTI_Init(EXTI_InitStructure); // 初始化// 对两个通道分别设置优先级// 配置NVIC,中断优先级进入CPU再执行中断程序NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 中断分组两位抢占两位响应NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannelEXTI0_IRQn; // 中断EXTI输出通道NVIC_InitStructure.NVIC_IRQChannelCmdENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority1; // 抢占优先级(在抢占中断中)NVIC_InitStructure.NVIC_IRQChannelSubPriority1; // 响应优先级 (在响应中断中)NVIC_Init(NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannelEXTI1_IRQn; // 中断EXTI输出通道NVIC_InitStructure.NVIC_IRQChannelCmdENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority1; // 抢占优先级(在抢占中断中)NVIC_InitStructure.NVIC_IRQChannelSubPriority2; // 响应优先级 (在响应中断中)NVIC_Init(NVIC_InitStructure); }void EXTI0_IRQHandler() {if (EXTI_GetITStatus(EXTI_Line0)SET){EXTI_ClearITPendingBit(EXTI_Line0);if (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)0){encoder_rotate--;} } }void EXTI1_IRQHandler() {if (EXTI_GetITStatus(EXTI_Line1)SET){EXTI_ClearITPendingBit(EXTI_Line1);if (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)0){encoder_rotate;} } }int16_t Encoder_Get() {return encoder_rotate; }
http://www.w-s-a.com/news/938180/

相关文章:

  • 百度推广 帮做网站吗怎样修改网站的主页内容
  • 网站怎么做dns解析公司官网改版方案
  • 湛江市住房和城乡建设局网站杭州网站公司哪家服务好
  • 设计网站公司湖南岚鸿设计镜像的网站怎么做排名
  • 你注册过哪些网站微信app下载安装官方版2019
  • 杭州滨江的网站建设公司人才招聘网网站策划方案
  • 门户网站是指提供什么的网站网站优化需要工具
  • 和小男生做的网站代理公司注册步骤
  • 天猫网站建设的目标是什么seo有些什么关键词
  • 网站前端建设都需要什么莱芜信息港网页
  • 如何做360网站优化网站建设培训教程新手入门到精通
  • 做网站有的浏览器怎么做网站网站赚钱
  • 织梦 做网站 教程百度登录个人中心官网
  • ftp怎么修改网站wordpress分享积分
  • 营销策划方案的步骤西安关键词优化软件
  • 南宁自己的网站移动互联网技术学什么
  • 2017湖北建设教育协会网站自己接单做网站
  • 定制网站建设制作h5网站要多久
  • 泰安中呼网站建设有限公司 概况个人网站的设计与实现参考文献
  • 圣诞节网站怎么做怎么获取网站的图片
  • 想找个人做网站音乐网站建设教程视频教程
  • 网站收录一键提交阿里巴巴做网站多少钱
  • 怎么做网站投放广告商务网站建设实训报告
  • 服装代销的网站源码国内电子商务网站有哪些
  • qq空间怎么做网站做企业平台的网站有哪些
  • 网站的优缺点wordpress手机适配模板中文
  • 福州网站建设H5广告公司简介简短
  • 网站404页面的作用app开发郑州
  • 亚马逊中国网站建设目标网站建设的策划
  • 林州网站建设服务徐州网站建设