nRF52832——GPIO端口的应用

nRF52832——GPIO端口的应用

  • nRF52832 GPIO 端口资源描述
  • nRF52832 GPIO 寄存器介绍
    • GPIO 端口状态的设置
    • GPIO 输出设置
  • nRF52832 GPIO 输出应用
    • 点亮第一个 LED 灯
      • 硬件部分
      • Keil 工程搭建
    • 蜂鸣器驱动
      • 硬件设计
      • 程序编写
      • 测试验证
  • nRF52832 GPIO 输入应用
    • GPIO 输入扫描流程
    • 机械按键输入扫描
      • 硬件设计
      • 程序的编写
    • 电容触摸按键的应用
      • 硬件设计
      • 程序编写


nRF52832 GPIO 端口资源描述

GPIO 称为输入输出端口,根据 nRF52832 封装最大具有 32 个 I/O 口,可以通过 P0 这样的端口访问和控制多达 32 个端口。而且每个端口都可以单独访问。特点如下:

  • 最大 32 个 GPIO,分别为 P0.0~P0.31
  • 具有 8 个带有模拟通道的 GPIO 口,可以用于 SAADC、COMP 和 LPCOMP 输入
  • 可以配置的输入驱动强度;内部具有上拉和下拉电阻
  • 可以从所有的引脚上的高电平或者低电平触发唤醒
  • 任何引脚的状态变化都可以触发中断
  • PPI 任务/事件系统可以使用所有引脚
  • 可以通过 PPI 和 GPIOTE 通道控制一个或多个 GPIO 输出
  • 所有引脚都可以单独映射到外设接口上,以实现布局灵活性
  • 在 SENSE 信号上捕获的 GPIO 状态变化可以由 LATCH 寄存器存储

GPIO 端口外设最多可以实现 32 个引脚。这些引脚中的每一个都可以在 PIN_CNF[n] 寄存器中单独配置。可以通过这些寄存器配置以下参数:

  • 方向
  • 驱动强度
  • 启用上拉和下拉电阻
  • 引脚感应
  • 输入缓冲区断开
  • 模拟输入(适用于所选引脚)

nrf52832 芯片内核为 ARM cortex M4,其 IO 口配置有多种状态需要设置。
首先看看 IO 口的模式,查看 nrf52832 参考手册,端口可以配置为 4 种模式:

  • 输入模式
  • 输出模式
  • 复用模式
  • 模拟通道模式

nRF52832 的 IO 管脚可以复用其他的外设功能,例如:I2C、SPI、UART 等。
而通用 IO 口具有输入和输出模式,结构如下图:

在这里插入图片描述
上图中的 Sense 寄存器可以捕捉 GPIO 端口状态,如果选择 LDETECT 模式,则可以把相关状态存储在 LATCH 寄存器内,结构如下:
在这里插入图片描述
当在任何这样配置的引脚上检测到正确的电平时,感测机制将 DETECT 信号设置为高电平。每个引脚都有一个单独的 DETECT 信号,DETECTMODE 寄存器定义的默认功能是将来自 GPIO 端口中所有引脚的 DETECT 信号被合并到一个普通的 DETECT 信号。如果在启用传感机制时满足 PIN_CNF 寄存器配置的感测条件,则检测将立即变为高电平。如果在启用传感机制之前 DETECT 信号为低,这将触发 PORT 事件。PORT 事件在后面 GPIOE 中再详细讲解。

nRF52832 GPIO 寄存器介绍

实际 nRF52832 中所有 GPIO 模块包含的寄存器都差不多,如下表:

寄存器名称地址偏移R/W功能描述
OUT0x504读写设置端口输出
OUTSET0x508读写置位端口输出高电平,写 0 无效
OUTCLR0x50C读写置位端口输出低电平,写 0 无效
IN0x510只读设置端口输入
DIR0x514读写设置端口方向
DIRSET0x518读写置位端口为输入,写 0 无效
DIRCLR0x51C读写置位端口为输出,写 0 无效
LATCH0x520读写传感锁存寄存器:指示哪些 GPIO 引脚符合 PIN_CNF[n].SENSE 寄存器中设置的条件
DETECTMODE0x524读写传感模式选择
PIN_CNF[n]n=0~310x700~0x77C读写对应端口号0到31的端口设置

GPIO 通过寄存器配置可以配置为输出模式和输入模式。这些都可以通过官方提供的一个库(对寄存器进行了封装),我们可以很方便的进行调用操作,下面会结合寄存器和官方函数进行说明。

GPIO 端口状态的设置

输入模式:NRF_GPIO_PORT_DIR_INPUT,输入模式可以分为上拉和下拉模式。
输出模式:NRF_GPIO_PORT_DIR_OUTPUT,输出模式寄存器为推挽输出。

可以设置输出模式的寄存器有三个:DIRDIRSETPIN_CNF。其中 DIR 和 DIRSET 仅仅是进行输出设置,不配置其他参数。而 PIN_CNF 还配置了端口的其他参数。

可以设置输入模式的寄存器有三个:DIRDIRCLRPIN_CNF。同样,DIR 和 DIRCLR 仅仅是配置端口输出状态,不配做其他参数。同时输入模式提供寄存器 IN 读取 IO 口输入电平状态。

  • DIR 寄存器:配置 IO 端口输入输出方向:
    在这里插入图片描述
  • DIRSET 寄存器:配置 IO 端口为输出管脚
    在这里插入图片描述
    在这里插入图片描述
  • DIRCLR 寄存器:配置 IO 端口为输入管脚
    在这里插入图片描述
  • PIN_CNF 寄存器:配置 IO 端口状态
    在这里插入图片描述
    关于 PIN_CNF 配置寄存器的说明:
  • 0-bit 为 DIR 方向位,设置 IO 管脚为输入引脚或者输出引脚。当为 0 时设置引脚为输入引脚。当设置为 1 时为输出管脚。函数对应 nrf_gpio_port_dir_t
  • 1-bit 为 INPUT 输入位,如果设置了 IO 端口为输入端口,该位用于设置输入是否接入缓冲,复位默认为 1,所有默认都是端口连接输入缓冲的。对应结构体 nrf_gpio_pin_input_t
  • 2~3-bit PULL 为输入是否开上拉电阻。当设置为 0 时没有上下拉,设置为 1 时为开下拉电阻,设置为 3 时为开上拉。nrf_gpio_pin_pull_t 为对应的结构体。
  • 8~9-bit 为 DRIVE 驱动位,该位为设置 IO 端口输出的驱动强度,对应输出 IO 端口输出强度可编程配置。
  • 16~17-bit SENSE 位,该位为感应设置位,可以设置感应外部信号,常与 GPIOE 唤醒中使用。结构体 nrf_gpio_pin_sense_t

使用 PIN_CNF[n] 寄存器进行操作数配置的代码示例如下:

__STATIC_INLINE void nrf_gpio_cfg(uint32_t pin_number, 
					nrf_gpio_pin_dir_t dir, nrf_gpio_pin_input_t input,
					nrf_gpio_pin_pull_t pull, nrf_gpio_pin_drive_t drive,
					nrf_gpio_pin_sense_t sense)	//GPIO端口状态配置
{
	//配置端口
	NRF_GPIO_Type * reg = nrf_gpio_pin_port_decode(&pin_number);
	//配置对应的端口的状态
	reg->PIN_CNF[pin_number] = ((uint32_t)dir << GPIO_PIN_CNF_DIR_Pos)//方向
							| ((uint32_t)input << GPIO_PIN_CNF_INPUT_Pos)//输入缓冲
							| ((uint32_t)pull << GPIO_PIN_CNF_PULL_Pos)//上拉配置
							| ((uint32_t)drive << GPIO_PIN_CNF_DRIVE_Pos)//驱动能力配置
							| ((uint32_t)sense << GPIO_PIN_CNF_SENSE_Pos)//感应能力
}

GPIO 输出配置函数:

__STATIC_INLINE void nrf_gpio_cfg_output(uint32_t pin_number)
{
	nrf_gpio_cfg(pin_number, NRF_GPIO_PIN_DIR_OUTPUT,
				NRF_GPIO_PIN_INPUT_DISCONNECT,
				NRF_GPIO_PIN_NOPULL,//没有上拉
				NRF_GPIO_PIN_S0S1,//驱动能力
				NRF_GPIO_PIN_NOSENSE);
				
}

GPIO 输入配置函数:

__STATIC_INLINE void nrf_gpio_cfg_input(uint32_t pin_number, nrf_gpio_pin_pull_t pull_config)
{
	nrf_gpio_cfg(pin_number, NRF_GPIO_PIN_DIR_INPUT,
							NRF_GPIO_PIN_INPUT_CONNECT,
							pull_config,
							NRF_GPIO_PIN_S0S1,
							NRF_GPIO_PIN_NOSENSE);
}

GPIO 输出设置

GPIO 可以设置输出高电平和低电平,对应输出状态的配置,可以看到 GPIO 寄存器列表中分配三个寄存器:

  • OUT 寄存器
  • OUTSET 寄存器
  • OUTCLR 寄存器

这三个寄存器都是可读可写寄存器,32位,每一位代表一个 IO 端口,按位进行配置。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

nRF52832 GPIO 输出应用

点亮第一个 LED 灯

硬件部分

这里,我们首先学习最简单的控制就是通过 I/O 端口输出的电平控制设备。
在 nRF52832 开发板上,通过管脚 P0.17 到管脚 P0.20 连接了 4 个 LED 灯,LED 另一端通过 220 欧电阻接到 VDD 电源上(VDD 选择 3.3v 电源)。因此当 IO 管脚输出低电平时,LED 发光二极管会导通并发光(LED 点亮)。

在这里插入图片描述

Keil 工程搭建

这里创建一个工程项目,采用官方的库函数来驱动 IO 端口,如下图:
在这里插入图片描述
drive 组下红色框框中的 led.c 文件就是我们需要编写的驱动文件,为了方便以后用到这部分的控制驱动,我们将 LED 驱动部分的代码单独编写成一个单独的驱动文件。后面工程如果需要用到时,只需要编写 main.c 主函数调用就可以,整个工程项目引入分层的思想就会对之后的移植非常有利。

led.c 的实例代码如下:

void LED_Init(void)
{
	nrf_gpio_cfg_output(LED_0);
	nrf_gpio_cfg_output(LED_1);
	nrf_gpio_cfg_output(LED_2);
	nrf_gpio_cfg_output(LED_3);//配置 IO 端口为输出状态
}

//操作LED1 点亮,LED1 输出低电平
void LED1_Open(void)
{
	nrf_gpio_pin_clear(LED_0);
}

//操作LED1 灭,LED1 输出高电平
void LED1_Close(void)
{
	nrf_gpio_pin_set(LED_0);
}

//LED0 状态翻转
void LED1_Toggle(void)
{
	nrf_gpio_pin_toggle(LED_0);
}

上面的代码分别调用了以下的库函数,其实这些库函数内部也是操作对应的寄存器,为了方便我们的使用将这部分寄存器配置过程进行了封装。这里我们可以具体看一下。

nrf_gpio_pin_clear(uint32_t pin_number);
nrf_gpio_pin_set(uint32_t pin_number);
nrf_gpio_pin_toggle(uint32_t pin_number);

nrf_gpio_pin_clear() 函数内部会发现是如下的操作:

p_reg->OUTCLR = clr_mask;

也就是说要 IO 管脚输出为 0,实际上是直接设置 OUTCLR 寄存器为高。同理,nrf_gpio_pin_set() 函数就是设置 OUTSET 寄存器;nrf_gpio_pin_toggle() 就是设置 OUTCLR 和 OUTSET 寄存器。

对于主函数调用的编写就很简单了。只需要调用对应的操作函数即可完成对应的操作调用。

#include "nrf_gpio.h"
#include "nrf_delay.h"
#include "led.h"

int main(void)
{
	//初始化 LED 灯
	LED_Init()while(true)
	{
		LED1_Open();
		nrf_delay_ms(500);//延迟500ms
		LED1_Close();
		nrf_delay_ms(500);//延迟500ms
	}
}

编译代码后,使用 Keil 把工程目标文件下载到 nRF52832 开发板上。LED 灯就会开始闪烁。

在这里插入图片描述

蜂鸣器驱动

硬件设计

蜂鸣器常用分为:

  • 有源蜂鸣器:内部带有震荡源,只要通电就会发出响声
  • 无源蜂鸣器:内部不带震荡源,使用直流信号无法响动,必须使用 2K-5K 的方波驱动使其响动。

这里的“源”并不是指电源,而是指震荡源。所以有源蜂鸣器比无源蜂鸣器的成本要高很多,因为里面多了一个振荡电路。

有源蜂鸣器的设计很简单,如下图所示:
在这里插入图片描述
电路介绍:蜂鸣器一端接 VCC3.3V 电源,一端接 PNP 三极管 2N3904 的集电极。三极管的发射极接地。基极通过 R11 电阻后 BEEP 端接到 GPIO 端口。

BEEP 端需要把 P19 上的跳线帽 4-6 进行短接。
在这里插入图片描述
驱动原理:当 P0.12 输出高电平,三极管 PNP 基极会上电,三极管导通,此时蜂鸣器一端接地,一端接 VCC,形成一个电势差就会有电流通过蜂鸣器。蜂鸣器就会被驱动鸣叫。当 P0.12 输出低电平,PNP 三极管会被截止,三极管没有电流通过,停止鸣叫。

程序编写

通过上面的分析,有源蜂鸣器的驱动实际上非常简单,类似前面的 LED 驱动,只需要使得 GPIO 端口输出高电平就可以使得蜂鸣器鸣叫。

实现要求的配置代码如下:

  1. 首先采用函数 nrf_gpio_cfg_output 设置 GPIO 为普通驱动能力的输出 GPIO
  2. 打开蜂鸣器采用组件库函数 nrf_gpio_pin_set 函数,关闭蜂鸣器采用 nrf_gpio_pin_clear 函数
  3. 主函数循环开关蜂鸣器,中间添加延迟操作

具体代码如下:

#define BEEP	12	//定义蜂鸣器的管脚

//初始化蜂鸣器
void BEEP_Init(void)
{
	//配置蜂鸣器驱动 GPIO 为输出模式
	nrf_gpio_cfg_output(BEEP);
}

//蜂鸣器开启
void BEEP_Open(void)
{
	nrf_gpio_pin_set(BEEP);
}

//蜂鸣器停止
void BEEP_Close(void)
{
	nrf_gpio_pin_clear(BEEP);
}

main.c 主函数调用方式如下:

#include <stdbool.h>
#include <stdint.h>
#include "nrf_gpio.h"
#include "nrf_delay.h"
#include "led.h"

int main()
{
	//初始化LED灯
	LED_Init();
	BEEP_Init();

	//循环打开和关闭蜂鸣器
	while(true)
	{
		LED1_Toggle();
		BEEP_Open();
		nrf_delay_ms(800);
		BEEP_Close();
		LED1_Toggle();
		nrf_delay_ms(800);
	}

	return 0;
}

测试验证

编译代码后,将 Keil 工程目标文件下载到 nRF52832 开发板上,同时把 P19 上的跳线帽 4-6 进行短接。运行后,LED 闪烁并且蜂鸣器会跟随响动。

在这里插入图片描述

nRF52832 GPIO 输入应用

GPIO 输入扫描流程

GPIO 的输入配置首先需要配置 PIN_CNF[n] 寄存器的是三个域,如 GPIO 结构体如下图:

在这里插入图片描述

  • PIN_CNF[n].DIR:该位决定 IO 端口方向为输入
  • PIN_CNF[n].INPUT:该位决定是否接入缓冲。输入缓冲的作用和连接一个电阻类似,降低电压波动幅度过大对输入管脚的影响。
  • PIN_CNF[n].PULL:该位决定是否进行上下拉,上下拉的作用主要就是用于输入端口的电平维持,保存信号稳定,方便处理器进行检测。

在 nrf52xx 的组件库中,提供了一个 API 函数 nrf_gpio_cfg_input 来完成 IO 口输入状态的设置,该函数就是调用前面讲解 nrf_gpio_cfg 函数,代码如下:

__STATIC_INLINE void nrf_gpio_cfg_input(uint32_t pin_number, nrf_gpio_pin_pull_t pull_config)
{
	nrf_gpio_cfg(pin_number, //配置IO端口号
				NRF_GPIO_PIN_DIR_INPUT,//配置为输入
				NRF_GPIO_PIN_INPUT_CONNECT,//默认上接输入缓冲
				pull_config,
				NRF_GPIO_PIN_S0S1,
				NRF_GPIO_PIN_NOSENSE);
}

GPIO 输入配置后,IN 寄存器提供了判断管脚输入电平信号。
在这里插入图片描述
在 nrf52xxx 组件库中,对 IN 寄存器进行了封装,封装成库函数 nrf_gpio_pin_read() 用于判断 IO 断开的状态,然后把对应状态进行返回。内部封装图如下:‘’
在这里插入图片描述
nrf_gpio_pin_read() 函数最后返回的就是 pin_number 管脚对应的 IN 寄存器的值,通过判断该值可以确定 IO 口的输入状态,如下操作:

if(nrf_gpio_pin_read(13)==0)

这样可以判断 13 管脚是否输入为低电平。

机械按键输入扫描

硬件设计

机械按键也称为轻触按键,是一种电子开关。开发板上采用了四脚按键,其工作原理由常开触点、常闭触点组合而成。在四脚按键开关中,常开触点的作用,就是当压力向常开触点施压时,这个电路就呈现接通状态;当撤销这种压力的时候,就恢复到了原始的常闭触点,也就是所谓的断开。这个施压的力,就是用我们的手去开按钮、关按钮的动作。如下图:
在这里插入图片描述
图中 1 和 2 的管脚,4 和 3 管脚联通,当按下按键按钮后,1 就和 3 联通,释放按键后,1 和 3 断开。因此轻触按键 1 管脚可以接到 GND ,3 管脚接 GPIO 输入。当按键按下后,3 管脚会被 GND 拉低,作为一个低电平输入。

这里有 4 个轻触按键,分别连接 P0.13、P0.14、P0.15、P0.16 四个 IO 端口,轻触按键另一端接地,如下图所示:
在这里插入图片描述

程序的编写

跟前面编写 led.c 的文件类似,这里创建单独的 key.c 文件。
key.c 文件主要起两个作用:

  • 初始化开发板上的按键
  • 扫描判断按键是否有按下,按键扫描是通过 MCU 不停判断端口的状态来实现
    在这里插入图片描述
#include "key.h"

void KEY_Init()
{
	nrf_gpio_cfg_input(16, NRF_GPIO_PIN_PULLUP);//设置管脚上拉输入,按键按下接通 GND,输入拉低
	nrf_gpio_cfg_input(17, NRF_GPIO_PIN_PULLUP);//同16管脚相同
}

//循环等待延迟函数
void Delay(uint32_t temp)
{
	for(; temp !=0; temp--)
}

//按键按下判断函数
uint8_t KEY1_Down()
{
	if(nrf_gpio_pin_read(KEY_1) == 0)
	{
		//延时消抖
		Delay(10000);
		if(nrf_gpio_pin_read(KEY_1) == 0)
		{
			//等待按键释放,只识别单次按下,不区分长短按键
			while(nrf_gpio_pin_read(KEY_1)==0);
			return 0;
		}
		else
			return 1;
	}
	else
		return 1;
}

主函数的操作就很简单了。下面 main.c

#include "nrf52.h"
#include "nrf_gpio.h"
#include "led.h"
#include "key.h"

int main()
{
	LED_Init();//LED初始化
	KEY_Init();//按键初始化

	while(1)
	{
		if(KEY1_Down() == 0)//判断按键是否按下
		{
			LED_Toggle();//按键按下,LED状态翻转
		}
	}
	
	return 0;
}

电容触摸按键的应用

硬件设计

电容触摸按键可以穿透绝缘材料 20mm 以上,准确无误地侦测到手指的有效触摸。并保证了产品的灵敏度、稳定性、可靠性等不会因环境条件的改变或长期使用而发生变化,并具有防水和强抗 干扰能力,超强防护,超强适应温度范围。电容式触摸按键没有任何机械部件,不会磨损,无限寿命,减少后期维护成本。电容式触摸按键面板图案、按键大小、形状任意设计,字符、商标、透视窗LED 透光等任意搭配,外型美观、时尚,不褪色、不变形、经久耐用。因此在一下家电、手持设备上为了防止进水、腐蚀等情况发生,常常采用电容触摸按键。

电容触摸按键的触摸信号检测最简单的方式就是采用触摸芯片。开发板上采用 JR223 单键触摸式芯片。该芯片是电容式触摸按键专用检测传感器 IC。采用最新一代电荷检测技术,利用操作者的手指与触摸按键焊盘之间产生电荷电平来进行检测,通过监测电荷的微小变化来确定手指接近或者触摸到感应表面。对应 JR223 的芯片管脚表述如下
在这里插入图片描述

管脚名称功能
1OUT触摸芯片输出端,接处理器的输入端
2GND接地端
3SO接触摸 TOUCH 信号
4SLH高低电平选择输出:SHL=0 高电平输出,SHL=1 低电平输出
5VDD电源,范围 2.0-5.5
6STG触发模式选择:STG=0 直接模式,STG=1 触发模式

管脚 1 接 TK 通过 P19 的管脚 2 和管脚 4 相连,连接芯片的 P0.12 端;VDD 接 3.3v 电源;STG 接高电平,设置为触发模式;SDH 接低电平,设置为高电平输出。触 摸板 TK1 要接电容 C28 进行灵敏度调节,电容范围为 0~50p。

程序编写

电容触摸按键的应用和机械按键类似,只要检测到 GPIO 管脚上有高电平输入节课认为是有按键按下事件产生。因此我们可以再按键扫描的代码中添加这部分操作,原理和机械按键类似。具体如下:

nrf_gpio_cfg_input(12, NRF_GPIO_PIN_PULLUP);//初始化 TOUCH 的管脚为输入

//电容按键检测
uint8_t TCH_Down()
{
	//检测是否按键有按下
	if(nrf_gpio_pin_read(TCH) == 1)
	{
		//延时消抖
		Delay(10000);
		if(nrf_gpio_pin_read(TCH) == 1)
		{
			//等待按键释放
			while(nrf_gpio_pin_read(TCH) == 1);
			return 0;
		}
		else
			return 1;
	}
	else 
		return 1;
}

main.c 操作内容跟之前一样。

#include "nrf52.h"
#include "nrf_gpio.h"
#include "led.h"
#include "key.h"

int main()
{
	LED_Init();//LED初始化
	KEY_Init();//按键初始化

	while(1)
	{
		if(TCH_Down() == 0)//判断按键是否按下
		{
			LED_Toggle();//按键按下,LED状态翻转
		}
	}
	
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3兄弟组件传值(同级别组件传值Vue3)

简述&#xff1a; Vue3兄弟组件传值&#xff0c;我们可以使用"Mitt"插件来实现。通过使用事件总线的方式&#xff0c;我们可以将数据从一个组件传递给另一个组件&#xff0c;实现兄弟组件之间的通信。 或者利用 Vue 3 自身的provide 和 inject 响应式 API 来实现兄弟…

STM32FreeRTOS消息队列(STM32Cube高效开发)

文章目录 一、队列&#xff08;一&#xff09;简介&#xff08;二&#xff09;FreeRTOS队列特点1、入队阻塞&#xff1a;队列满了&#xff0c;此时无法继续写入数据2、出队阻塞&#xff1a;队列为空&#xff0c;此时无法读出数据3、入队阻塞解除&#xff0c;有多个任务等待时&a…

实战:基于特征词的语音唤醒

本章前面介绍了纯理论知识&#xff0c;目的是阐述语音识别的方法。接着搭建了开发环境&#xff0c;让读者可以动手编写代码。下面以识别特定词为例&#xff0c;使用深度学习方法和Python语言实现一个实战项目——基于特征词的语音唤醒。 说明&#xff1a;本例的目的是演示一个…

当Sora风靡,AI风潮吹醒金融科技

以下文章来源&#xff1a;凤凰网 前有OpenAI发布了Sora&#xff0c; 后有苹果放弃了秘密进行了十年的造车项目&#xff0c;转身拥抱AI&#xff0c; 再有国内市场上此起彼伏的AI呐喊声&#xff0c; 一场以AI为主导的新热浪&#xff0c;正在来袭。 当AI的风潮开始兴盛&#x…

JavaScript 原型链继承:掌握面向对象的基础

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

springboot + jpa + 达梦数据库兼容 Mysql的GenerationType.IDENTITY主键生成策略

导入达梦数据库对hibernate的方言包 <dependency><groupId>com.dameng</groupId><artifactId>DmDialect-for-hibernate5.6</artifactId><version>8.1.2.192</version></dependency>配置文件中添加方言配置和主键生成策略配置…

(译) 理解 Prometheus 的范围向量 (Range Vector)

Prometheus 中 Range Vector 的概念是有一点不直观的&#xff0c;除非你彻底阅读并理解了官方提供的文档。谁会这样做呢&#xff0c;去读官方文档&#xff1f;大多的人应该会花些错误的时间去做了一些错误的事情&#xff0c;然后随机去寻找一篇像本文一样的文章去理解这个概念&…

2024年Java者未来的出路在哪里,java多线程面试

重要 大环境对于我们能力要求越来越高&#xff0c;医学专家又说今年冬天新冠肺炎将“席卷重来”。 如果疫情再次爆发&#xff0c;势必将再次影响企业的正常运作&#xff0c;一波裁员浪潮你又能否抗住&#xff1f; 不管如何&#xff0c;明年金三银四又是一波跳槽时机&#xf…

AbaqusCST仿真软件功能对比简介

一、功能对比 支持维度CST&#xff1a;用于设计、分析和优化电磁部件及系统。适用于整个 EM 范围内各类应用领域的电磁场解算。Abaqus&#xff1a;ABAQUS 是一套功能强大的工程模拟的有限元软件&#xff0c;其解决问题的范围从相对简单的线性分析到复杂的非线性问题。 ABAQUS 包…

基于springboot+vue的精简博客系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

flutter弹窗动画,2024年上半年最接地气的Android面经

正文 腾讯研发人数将近 2 万人&#xff0c;T4 级别的人数大概也不超过 500 人&#xff0c;这还是在近两年 T3 到 T4 级别人数增多的情况下。 该资料一共有五大章节&#xff0c;452页&#xff0c;是这位腾讯T4大佬耗时半个月熬夜整理出来的。 目录 第一章 深入解析 Binder. …

Java面试题【必知必会】Mybatis常见面试题(2024)

近期一直在准备面试&#xff0c;所以为了巩固知识&#xff0c;也为了梳理&#xff0c;整理了一些java的基础面试题&#xff01;同时也希望各位英雄和女侠能够补充&#xff01;不胜荣幸&#xff01;&#xff01;&#xff01; 名称地址Java面试题【必知必会】基础&#xff08;202…

Web3 赛道屠夫:「铁顺」是谁?

撰文&#xff1a;Terry 加密世界从不缺传奇故事&#xff0c;从不会编程的「失业青年」Hayden Adams 一入 Web3 便推出巅峰之作 Uniswap&#xff08;《交易平台搅局者「Uniswap 之父」&#xff0c;不会编程的「失业青年」&#xff0c;出手即巅峰》&#xff09;&#xff0c;到 An…

VMware虚拟机安装linux教程

CentOS7下载 下载 (centos.org)https://www.centos.org/download/新建虚拟机 选择自定义安装 这里要注意兼容性&#xff0c;如果是VMware12创建的虚拟机复制到VM11、10或者更低的版本会出现一不兼容的现象。如果是用VMware10创建的虚拟机在VMware12中打开则不会出现兼容性问题…

二,几何相交----2.线段相交测试----(1)bruteforce

将与X轴平行的线段扩展到一般平面上的线段。 则可以使用burteforce两两测试&#xff0c;使用四次toleft即可。比如&#xff0c;线段(a,b)和线段(c,d)相交&#xff0c;必然线段的两个端点在另一个线段的两侧。这样时间复杂度就是成为了o(n2) 其实&#xff0c;时间复杂度可以降低…

半导体分析实验常用清洗器皿特氟龙塑料PFA实验室耗材

晶圆是一种用于制造集成电路和其他半导体器件的基础材料&#xff0c;通常是由单晶硅制成的圆形薄片&#xff0c;随着半导体行业的兴起&#xff0c;其作为行业内常用元件的基础材料&#xff0c;为了保证它可以正常工作&#xff0c;晶圆表面要保持洁净&#xff0c;无不相关的颗粒…

酷开科技以酷开系统为媒介,打造欢乐生活场景

家人相聚在一起的时光总是那么美好&#xff0c;在欢聚的日子里&#xff0c;我们也总是希望能够让时间变得慢一点&#xff0c;再慢一点&#xff0c;但是随着春节假期的结束&#xff0c;很多人已经开始了新一年的忙碌&#xff0c;大家纷纷回到工作、学习岗位&#xff0c;回归之前…

自动驾驶预测与决策规划(nuplan数据集)

欢迎大家关注我的B站&#xff1a; 偷吃薯片的Zheng同学的个人空间-偷吃薯片的Zheng同学个人主页-哔哩哔哩视频 (bilibili.com) 目录 1.概述 2 数据采集 3.开环与闭环仿真 4.数据注释 5.场景 6.规划框架 6.1Train 6.2Simulation 6.3Metric 6.4Visualization 7.下载…

如何使用DS file+cpolar内网穿透实现远程访问本地群晖NAS传输文件

文章目录 1. 群晖安装Cpolar2. 创建TCP公网地址3. 远程访问群晖文件4. 固定TCP公网地址5. 固定TCP地址连接 DS file 是一个由群晖公司开发的文件管理应用程序&#xff0c;主要用于浏览、访问和管理存储在群晖NAS&#xff08;网络附加存储&#xff09;中的文件。这个应用程序具有…

阿里云2024年有什么优惠活动?阿里云30个热门优惠活动汇总

对于想要购买阿里云各种云产品的用户来说&#xff0c;不管是新用户还是老用户&#xff0c;最为关心的是阿里云当下有哪些优惠活动&#xff0c;本文汇集了2024年阿里云官方目前正在进行中的所有优惠活动&#xff0c;其中优惠券和代金券活动4个&#xff0c;官方精选活动10个&…