02:STM32--EXTI外部中断

目录

一:中断

1:简历

2:AFIO

 3:EXTI

​编辑

 4:NVIC基本结构

5:使用步骤

二:中断的应用

A:对外式红外传感计数器

1:连接图​编辑

 2:函数介绍

3:硬件介绍

 4:计数代码

B;旋转编码计数器

1:连接图

 2:硬件介绍

3:旋转编码器代码:


一:中断

1:简历

        中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行

        中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源

        中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回

        STM32中断: 68个可屏蔽中断通道,包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设 使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级 (EXTI可以产生中断的,众多外设之一)

2:AFIO

使用这个函数GPIO_EXTILineConfig配置那个引脚为中断引脚: 调用这个函数,就可以配置AFIO的数据选择器,来选择我们想要的中断引脚

        AFIO主要用于引脚复用功能的选择和重定义

        在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择

 3:EXTI

EXTI_Init:

        调用这个函数,就可以根据这个结构体里的参数配置EXTI外设, 使用方法和GPIO Init也是一样;         

        选择那个IO口为中断IO口(和前面的AFIO引脚配置保持一致), 

        选择那个方式触发中断(中断模式,事件模式)

        选择触发中断的方式 (上升沿触发,下降沿触发,上升沿和下降沿触发)

 EXTI简介:
        EXTI(Extern Interrupt)外部中断

        EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序

        支持的触发方式:上升沿/下降沿/双边沿/软件触发

        支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断     (PA1、PB1、PC1这样的,PAO和PBO这样的相同的Pin只能选1个作为中断引脚)  PA6和PA7、PA9和PB15、PBO和PB1这样的都可以

原因:AFOI会在APIOA,APIO,APIOC中选择一个GPIO的16个引脚连接到后面的EXTI

        通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒

触发响应方式:中断响应/事件响应

 

基本结构:

EXTI框图

 4:NVIC基本结构

嵌套中断向量控制器: 用来统一分配断优先级和管理中断的

A:使用NVIC_PriorityGroupConfig函数先分组;分组完成后抢占优先级和响应优先级的号不能超过表中的范围

B:使用NVIC_Init初始化  (1:选择通道,选择抢占优先级和响应优先级)

 NVIC优先级分组:

         NVIC的中断优先级由优先级寄存器的4位(0~15)决定,这4位可以进行切分,分为高n位的抢占优先级(更加紧急)和低4-n位的响应优先级(紧急)抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的按中断号排队   (中断号:EXTI简历中的优先级)

        抢占优先级>响应优先级

        优先级的数是值越小,优先级越高,0就是最高优先级

5:使用步骤

1:第一步,配置RCC,把我们这里涉及的外设的时钟都打开(GPIO,AFIO)

2:第二步,配置GPIO,选择我们的端口为输入模式

3:第三步,配置AFIO,选择我们用的这一路GPIO,连接到后面的EXT

4:第四步,配置EXTI,选择边沿触发方式比如上升沿、下降沿或者双边沿, 还有选择触发响应方式,可以选择中断响应和事件响应

5:第五步,配置NVIC,给我们这个中断选择一个合适的优先级

最后,通过NVIC,外部中断信号就能进入CPU了

1:EXIT和NVIC的时钟一直是打开状态不需要开启

二:中断的应用

A:对外式红外传感计数器

1:连接图

 2:函数介绍

配置AFIO在文件中stm32f10x_gpio.h

void GPIO_AFIODeInit(void);

void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
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);

GPIO_AFIODeInit: 用来复位AFIO外设, 调用这个函数AFIO外设的配置就会全部清除

GPIO_PinLockConfig: 参数指定位那个引脚, 那这个引脚的配置就会被锁定,防止意外更改

GPIO_EventOutputConfig 和GPIO_EventOutputCmd :  配置AFIO的事件输出功能的

GPIO_PinRemapConfig: 引脚重新映射,  第一个参数可以选择你要重映射的方式,第二个参数是新的状态

GPIO_EXTILineConfig: 调用这个函数,就可以配置AFIO的数据选择器,来选择我们想要的中断引脚

GPIO_ETH_MediaInterfaceConfig:关于以太网的

配置EXTI在stm32f10x exti.h文件中

void EXTI_DeInit(void);
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct);
void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line);
FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line);
void EXTI_ClearFlag(uint32_t EXTI_Line);
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
void EXTI_ClearITPendingBit(uint32_t EXTI_Line);

EXTI_DeInit: EXTI的配置都清除,恢复成上电默认的状态

EXTI_Init:调用这个函数,就可以根据这个结构体里的参数配置EXTI外设, 使用方法和GPIO Init也是一样

EXTI_StructInit:  可以把参数传递的结构体变量赋一个默认值

EXTI_GenerateSWInterrupt:软件触发外部中断

在主函数中你想查看标志位和清除标志位使用下面的函数

EXTI_GetFlagStatus:可以获取指定的标志位是否被置1了

EXTI_ClearFlag: 可以对置1的标志位进行清除

在中断函数里,如果你想查看标志位和清除标志位使用下面的函数

EXTI_GetITStatus: 获取中断标志位是否被置1了(检测外部中断的状态)

EXTI_ClearITPendingBit: 清除中断挂起标志位

配置NMIC在misc.h文件中的函数

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);
void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState);
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);

NVIC_PriorityGroupConfig:用来中断分组的,参数是中断分组的方式

NVIC_Init: 根据结构体里面指定的参数初始化NMIC

NVIC_SetVectorTable: 设置中断向量表

NVIC_SystemLPConfig :系统低功耗配置

3:硬件介绍

 4:计数代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "CountSensor.h"uint16_t CountSensor_count;
void CountSensor_Init(void){//1:配置RCC,把我们这里涉及的外设的时钟都打开(GPIO,AFIO)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//2:配置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_Init(GPIOB,&GPIO_InitStructure);//3:配置AFIO,选择我们用的这一路GPIO,连接到后面的EXTGPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);//4: 第四步,配置EXTI,选择边沿触发方式比如上升沿、下降沿或者双边沿, 还有选择触发响应方式,可以选择中断响应和事件响应EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line=EXTI_Line14;//14IO口作为中断EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//中断模式EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿触发EXTI_Init(&EXTI_InitStructure);//5:配置NVIC,给我们这个中断选择一个合适的优先级NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;//到NVIC的通道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;
}//STM32的中断函数名字不能变,在启动文件里面查看
void EXTI15_10_IRQHandler(void){ //在中断函数里,查看中断标志位是否被置1了,看是不是PB14口引发的中断(通道10~15都可以进去)if (EXTI_GetITStatus(EXTI_Line14)==SET){/*如果出现数据乱跳的现象,可再次判断引脚电平,以避免抖动*///读取PB14IO口是否为低电频if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)==0){CountSensor_count++;}
//清除中断挂起标志位EXTI_ClearITPendingBit(EXTI_Line14);}
}int main(void)
{    
//OLED屏幕代码省略OLED_Init();CountSensor_Init();OLED_ShowString(1, 1, "Count:");while (1){OLED_ShowNum(1, 7, CountSensor_Get(), 5);}
}

B;旋转编码计数器

1:连接图

 2:硬件介绍

 

 我们使用判断正反转的条件:

        正转-----B相下降沿和A相低由平时同时满足时;

        反转----在A相下降沿和B相低电频同时满足时;

本次使用了两个中断注意:

PB0和PB1设置为中断:

A:配置AFIO时:需要配置两个引脚

B:配置EXTI时:X.EXTI_Line需要配置两个 (X.EXTI_Line = EXTI_Line0 | EXTI_Line1)

C:配置NVIC时: 一次分组,2次初始化

中断函数分析:
当A为中断IO口时: A为下降沿触发中断,B1和B0同时为低电频时满足正转

当B为中断IO口时: A为下降沿触发中断,B0和B1同时为低电频时满足反转

(中断函数处理全局变量时,可以改变全局变量的值)

3:旋转编码器代码:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Encoder.h"int16_t Encoder_Count;void Encoder_Init(void)
{//1:配置RCC,把我们这里涉及的外设的时钟都打开(GPIO,AFIO)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//2:配置GPIO,选择我们的端口为输入模式  注意打开了2个中断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);//3:配置AFIO,选择我们用的这一路GPIO,连接到后面的EXTGPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource1);//4: 第四步,配置EXTI,选择边沿触发方式比如上升沿、下降沿或者双边沿, 还有选择触发响应方式,可以选择中断响应和事件响应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);//5:配置NMIC,给我们这个中断选择一个合适的优先级NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; 到NVIC的通道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的通道NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;NVIC_Init(&NVIC_InitStructure);
}//返回每次调用这个Get函数之后,返回Count的变化值
//每次调用这个函数都会加1或者减1int16_t Encoder_Get(void)
{int16_t Temp;Temp = Encoder_Count;/*返回的temp是局部变量,在栈区,也就是该函数一旦执行完,就会被系统释放,当再次循环调用到该函数时,get里的temp就需要被重新赋值,temp被赋值0,无论主函数如何循环都是变成了NUM+=0*//*如果返回函数不清零的话,数字就变成等差数列求和,清零的话就疯狂加或者减一*/Encoder_Count = 0;return Temp; 
}//void EXTI0_IRQHandler(void)
//{检测外部中断状态,如果状态为SET,会返回真(true),否则返回假(false)。
//	if (EXTI_GetITStatus(EXTI_Line0) == SET)
//	{
//		/*如果出现数据乱跳的现象,可再次判断引脚电平,以避免抖动*/
//		if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == 0)
//		{//中断函数的处理可以改变全局变量的值
//			if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0)
//			{
//				Encoder_Count --;
//			}
//		}
//		EXTI_ClearITPendingBit(EXTI_Line0);
//	}
//}
void EXTI0_IRQHandler(void)
{检测外部中断状态,如果状态为SET,会返回真(true),否则返回假(false)。if (EXTI_GetITStatus(EXTI_Line0) == SET){/*如果出现数据乱跳的现象,可再次判断引脚电平,以避免抖动*/if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0){//中断函数的处理可以改变全局变量的值Encoder_Count --;}EXTI_ClearITPendingBit(EXTI_Line0);}
}
//void EXTI1_IRQHandler(void)
//	{	//检测外部中断状态,如果状态为SET,会返回真(true),否则返回假(false)。
//	if (EXTI_GetITStatus(EXTI_Line1) == SET)
//	{
//		/*如果出现数据乱跳的现象,可再次判断引脚电平,以避免抖动*/
//		
//		if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0) //PB1为低电频
//		{
//			if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == 0)  //PB0为低电频
//			{//中断函数的处理可以改变全局变量的值
//				Encoder_Count ++;
//			}
//		}
//		//清除中断挂起标志位
//		EXTI_ClearITPendingBit(EXTI_Line1);
//	}
//}
void EXTI1_IRQHandler(void){	//检测外部中断状态,如果状态为SET,会返回真(true),否则返回假(false)。if (EXTI_GetITStatus(EXTI_Line1) == SET){/*如果出现数据乱跳的现象,可再次判断引脚电平,以避免抖动*/if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == 0)  //PB0为低电频{//中断函数的处理可以改变全局变量的值Encoder_Count ++;}//清除中断挂起标志位EXTI_ClearITPendingBit(EXTI_Line1);}
}
int16_t Num;int main(void)
{OLED_Init();Encoder_Init();OLED_ShowString(1, 1, "Num:");while (1){Num += Encoder_Get();OLED_ShowSignedNum(1, 5, Num, 5);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/91155.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序(原生)搜索功能实现

一、效果图 二、代码 wxml <van-searchvalue"{{ keyword }}"shape"round"background"#000"placeholder"请输入关键词"use-action-slotbind:change"onChange"bind:search"onSearch"bind:clear"onClear&q…

国企的大数据岗位方向的分析

现如今大数据已无所不在&#xff0c;并且正被越来越广泛的被应用到历史、政治、科学、经济、商业甚至渗透到我们生活的方方面面中&#xff0c;获取的渠道也越来越便利。 今天我们就来聊一聊“大屏应用”&#xff0c;说到大屏就一定要聊到数据可视化&#xff0c;现如今&#xf…

【从零学习python 】30.深入理解递归函数和匿名函数

文章目录 递归函数1. 什么是递归函数2. 递归函数的作用解决办法1: 使用循环来完成解决办法2: 使用递归来实现 匿名函数应用场合函数作为参数传递练习进阶案例 递归函数 1. 什么是递归函数 通过前面的学习知道一个函数可以调用其他函数。 如果一个函数在内部不调用其它的函数…

android设置竖屏仍然跟随屏幕旋转怎么办

如题所问&#xff0c;我最近遇到一个bug&#xff0c;就是设置了摇感&#xff0c;然后有用户反馈说设置了手机下拉的系统设置-屏幕旋转-关闭。然后屏幕还是会旋转的问题。 首先&#xff0c;我们先从如何设置横竖屏了解下好了 设置横屏和竖屏的方法&#xff1a; 方法一&#x…

视频汇聚平台EasyCVR安防监控视频汇聚平台的FLV视频流在VLC中无法播放的问题解决方案

众所周知&#xff0c;TSINGSEE青犀视频汇聚平台EasyCVR可支持多协议方式接入&#xff0c;包括主流标准协议国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。在视频流的处理与分发上&#xff0c;视频监控…

配置网络设置和修改主机名

bash 题目&#xff1a; 在 node1 上配置网络&#xff0c;要求如下&#xff1a; 主机名&#xff1a;node1.domain8.rhce.cc IP地址: 172.25.250.10/24 ##注意掩码 网关&#xff1a; 172.25.250.250 DNS&#xff1a; 172.25.250.250 ##名称服务器 做法&#xff1a; nmtui 回车…

Android中tools属性的使用

参考&#xff1a; 1.Android:Tools命名空间原来是有大用处的 2.Android中tools属性的使用 3.工具属性参考文档 4. 命名空间介绍 5. 注解 6. lint 7. 资源压缩shrink-resources 目录 一、概述二、引入tools命名空间三、tools 命名空间的作用有哪些&#xff1f;四、tools 命名空间…

使用phpstorm开发调试thinkphp

1.环境准备 1.开发工具下载&#xff1a;PhpStorm: PHP IDE and Code Editor from JetBrains 2.PHP下载&#xff1a;PHP: Downloads 3. PHP扩展&#xff1a;PECL :: Package search 4.用与调试的xdebug模块&#xff1a; Xdebug: Downloads xdebug模块&#xff0c;如果是php8以…

Modbus工业RFID设备在自动化生产线中的应用

传统半自动化生产线在运作的过程&#xff0c;因为技工的熟练程度&#xff0c;专业素养的不同&#xff0c;在制造过程中过多的人为干预&#xff0c;工厂将很难对每条生产线的产能进行标准化管理和优化。如果半自动化生产线系统是通过前道工序的作业结果和检测结果来决定产品在下…

fastadmin 自定义搜索分类和时间范围

1.分类搜索&#xff0c;分类信息获取----php 2.对应html页面&#xff0c;页面底部加搜索提交代码&#xff08;这里需要注意&#xff1a;红框内容&#xff09; 图上代码----方便直接复制使用 <script id"countrySearch" type"text/html"><!--form…

字节跳动软件测试岗4轮面经(已拿34K+ offer)...

没有绝对的天才&#xff0c;只有持续不断的付出。对于我们每一个平凡人来说&#xff0c;改变命运只能依靠努力幸运&#xff0c;但如果你不够幸运&#xff0c;那就只能拉高努力的占比。 2021年10月&#xff0c;我有幸成为了字节跳动的一名测试工程师&#xff0c;从外包辞职了历…

卡巴斯基为基于Linux的嵌入式设备推出专用解决方案

导读卡巴斯基在其卡巴斯基嵌入式系统安全产品中引入了对 Linux 的支持。这种适应性强的多层解决方案现在为基于Linux的嵌入式系统、设备和场景提供优化的安全&#xff0c;合通常适用于这些系统的严格监管标准。 卡巴斯基在其卡巴斯基嵌入式系统安全产品中引入了对 Linux 的支持…

深入探索Python数据类型

CSDN伙伴们&#xff0c;大家好&#xff0c;我是沐尘而生。 数据类型&#xff1a;程序的构造元素 数据类型是程序的构造元素&#xff0c;它定义了变量可以存储的数据的种类以及可以对其进行的操作。在Python中&#xff0c;常见的数据类型包括整数&#xff08;int&#xff09;、…

Arcgis中POI找到建筑面内距离最近的标准地址通过模型构建器来实现

背景 之前写过一篇文章 Arcgis通过矢量建筑面找到POI对应的标准地址 这里面的大致思路跟本篇文章是类似的&#xff0c;不过上一篇文章有部分有瑕疵&#xff0c;就是在POI去找建筑面内的标准地址时&#xff0c;找到的虽然是建筑面内的&#xff0c;但是不一定是距离最近的&#…

【Spring】深入理解 Spring 事务及其传播机制

文章目录 一、Spring 事务是什么二、Spring 中事务的实现方法2.1 Spring 编程式事务&#xff08;手动&#xff09;2.1.1 编程式事务的使用演示2.1.2 编程式事务存在的问题 2.2 Spring 声明式事务&#xff08;自动&#xff09;2.2.1 Transactional 作用范围2.2.2 Transactional …

如何在CSS中水平居中一个元素?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用 margin: 0 auto⭐ 使用 Flexbox 布局⭐ 使用绝对定位和负边距⭐ 使用表格布局⭐ 使用网格布局⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅…

【Axure高保真原型】通过输入框动态控制环形图

今天和大家分享通过输入框动态控制环形图的原型模板&#xff0c;在输入框里维护项目数据&#xff0c;可以自动生成对应的环形图&#xff0c;鼠标移入对应扇形&#xff0c;可以查看对应数据。使用也非常方便&#xff0c;只需要修改输入框里的数据&#xff0c;或者复制粘贴文本&a…

【数据结构与算法】十大经典排序算法-插入排序

&#x1f31f;个人博客&#xff1a;www.hellocode.top &#x1f3f0;Java知识导航&#xff1a;Java-Navigate &#x1f525;CSDN&#xff1a;HelloCode. &#x1f31e;知乎&#xff1a;HelloCode &#x1f334;掘金&#xff1a;HelloCode ⚡如有问题&#xff0c;欢迎指正&#…

61. 旋转链表

61. 旋转链表 题目-中等难度示例1. 快慢指针找到分割位置2. 连成环后截断 题目-中等难度 相关企业 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出…

WebRTC音视频通话-新增或修改SDP中的码率Bitrate限制

WebRTC音视频通话-新增或修改SDP中的码率Bitrate限制参数 之前搭建ossrs服务&#xff0c;可以查看&#xff1a;https://blog.csdn.net/gloryFlow/article/details/132257196 之前实现iOS端调用ossrs音视频通话&#xff0c;可以查看&#xff1a;https://blog.csdn.net/gloryFlo…