关于stm32的GPIO的操作

2023-11-01

 

首先先了解一下输出的模式

比较常用的是 推挽输出

1)GPIO_Mode_AIN 模拟输入 

(2)GPIO_Mode_IN_FLOATING 浮空输入

​(3)GPIO_Mode_IPD 下拉输入

(4)GPIO_Mode_IPU 上拉输入

​(5)GPIO_Mode_Out_OD 开漏输出

​(6)GPIO_Mode_Out_PP 推挽输出

​(7)GPIO_Mode_AF_OD 复用开漏输出

​(8)GPIO_Mode_AF_PP 复用推挽输出
 

首先简述一下stm3的gpio

接口(interface):主机(CPU)与外部设备(指MCU片上外设)之间缓冲电路。它用于完成主机与外部设备设间速度匹配、信号转换,并完成某些控制功能。按数据的传输方式可分为并行接口和串行接口,并行接口指一般I/O接口或通用I/O接口,而串行接口有I2C/SPI/UART等等。

端口(port):I/O接口电路中已经编址并能进行读写操作的寄存器。端口分为数据端口、状态端口及控制端口,普遍存在于各个接口电路中。每个接口电路中都包含一组寄存器,CPU与外部设备进行信息交换时,各类信息在接口中存入不同的寄存器,这些寄存器就是I/O端口,简称I/O口,也称为I/O端口寄存器。

引脚(pin):集成电路与外围电路连接的管脚。

接口(端口)概念是对并行接口和串行接口(I2C/SPI/UART等片上外设)而言的,MCU中大多数的功能模块都有接口电路。狭义上,端口概念往往特指I/O并行接口电路中的寄存器。此外,通常我们所说的“I/O口”指的就是“I/O端口”。

一、GPIO的模式选择

通过GPIO模式寄存器GPIOx_MODER(x是端口名称,x=A…I/J/K)来设置GPIO端口位的方向: 
1、输入模式(复位状态) 
2、GPIO输出模式 
3、复用功能模式 
4、模拟功能模式 
GPIOx_MODER的设置方法,详见技术参考手册TRM。

二、GPIO端口寄存器

每个I/O端口均有下列寄存器,每个端口位均可自由编程,但I/O端口寄存器必须按32位字、半字或字节被访问。其中,GPIOx_BSRR寄存器旨在实现对GPIOx_ODR寄存器进行原子读取/修改访问,具有对GPIOx_ODR按位写权限。

1、4个32位配置寄存器:GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR,这些寄存器位可通过软件写入。其中,输出类型寄存器GPIOx_OTYPER是用1个寄存器位设置1个I/O位,其他配置寄存器均是用2个寄存器位设置1个I/O位。

GPIOx_MODER:选择I/O端口方向为 输入/通用输出/AF/模拟,复位状态为输入。

GPIOx_OTYPER:选择输出类型为 推挽/开漏,复位状态为推挽输出。

GPIOx_OSPEEDR:选择I/O输出驱动电路的响应速度为 低速/中速/快速/高速,用于噪声控制。(由下面Table 22. Port bit configuration table 可知,这个速度寄存器只对输出模式和AF起作用)。 
注意:GPIO的引脚速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关。此外,如果较高频率的信号经过较低频率的驱动电路输出,那么输出的信号就会产生失真,所以驱动电路的频率和信号的频率之间满足采样定理的要求。驱动电路的频率应该适当不能过大(建议10~20倍于信号的频率),以便降低噪声、功耗和电磁辐射。

GPIOx_PUPDR:选择I/O端口为 无上拉或下拉/上拉/下拉/保留(与IO端口方向无关)。

2、2个32位数据寄存器:GPIOx_IDR、GPIOx_ODR

GPIOx_IDR:这些寄存器位为只读 形式,并且只能在字模式下访问。

GPIOx_ODR:这些寄存器位可通过软件读取和写入。

3、1个32位置位复位寄存器:GPIOx_BSRR

GPIOx_BSRR低半字用来置位GPIOx_ODR,即写入“1”,而高半字用来复位GPIOx_ODR,即写入“0”。GPIOx_BSRR旨在对GPIOx_ODR寄存器进行原子读写操作,它只能在字、半字、字节模式下被访问对GPIOx_ODR进行原子操作。

4、1个32位锁定寄存器:GPIOx_LCKR

锁定寄存器GPIOx_LCKR的每个锁定位用于锁定端口位的配置。冻结的寄存器包括:GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR、GPIOx_AFRH、GPIOx_AFRL,它只能以字的方式被访问。锁定寄存器锁定配置后,就会避免因意外改写端口寄存器配置造成大电流损坏芯片的故障或其他故障。

5、2个32位复用功能选择寄存器:GPIOx_AFRH、GPIOx_AFRL

GPIOx_AFRL:用四位寄存器位选择一个对应的复用功能。该寄存器用于选择AF0~AF7。

GPIOx_AFRH:用四位寄存器位选择一个对应的复用功能。该寄存器用于选择AF8~AF15。

复用功能选择寄存器只能通过字被访问。

三、GPIO的工作模式

通过对4种端口配置寄存器进行编程,可将GPIO口的各个端口位配置成以下8种工作模式:

输入+悬空 
输入+上拉 
输入+下拉 
模拟(用作ADC输入、DAC输出或者捕获输入情况下) 
输出+开漏+上拉/下拉(输出模式时GPIO的输出速度是可配置的) 
输出+推挽+上拉/下拉(输出模式时GPIO的输出速度是可配置的) 
复用功能+推挽+上拉/下拉(复用功能时速度是可配置的) 
复用功能+开漏+上拉/下拉(复用功能时速度是可配置的)


● I/O输入通道有个TTL施密特触发器,它用于将变化缓慢的输入信号整形成边沿陡峭的矩形脉冲。同时,施密特触发器利用其回差电压提高了电路的抗干扰能力; 
● 所有的I/O口均兼容TTL电平和CMOS电平; 
● 大多数I/O是5V电压容限(FT 结构的I/O是5V容限,其他结构的I/O不是。详细情况请参见相应的STM32F4数据手册); 
● 当GPIO被配置为模拟功能时,I/O不再是5V电压容限,这时以VDDA为电压容限; 
● 除了端口A和B(主要是PA13/PA14/PA15/PB3/PB4这5个端口位复位后专门用于片上调试模块,不受4个GPIO控制寄存器控制),其他端口的所有端口位复位期间或者复位后都是悬空输入状态; 
● 输出通道中,输出数据寄存器和复用功能输出接到多路复用器,再经过输出控制连接到推挽电路的门极。值得注意的是输出控制会将输出数据寄存器和复用功能输出的电平进行反转(即’1’变’0’,’0’变’1’)。仔细观察会发现P-MOS管的门极有个小圈“。”,它表示P-MOS的门极为低电平’0’时,P-MOS导通。反之,N-MOS是门极为高电平’1’时导通; 
● 推挽输出的驱动能力强,并且推挽输出时,若P-MOS导通,引脚上的电压不会因为外部器件或设备(即引脚带负载)而有所降低; 
● I/O端口位的最大状态切换频率为90MHZ。
● 输出缓冲器被禁止; 
● 施密特触发输入被激活; 
● 根据寄存器GPIOx_PUPDR中的值选择引脚为弱上拉或弱下拉或悬空输入; 
● I/O引脚上的数据在每个AHB1时钟周期被采样到输入数据寄存器; 
● 对输入数据寄存器的读访问可获得I/O状态。


● 输出缓冲器被激活 
─ 开漏模式:输出寄存器上的 ‘0’ 激活N-MOS,而输出寄存器上的 ‘1’ 将端口置于高阻状态(PMOS从不被激活); 
─ 推挽模式:输出寄存器上的 ‘0’ 激活N-MOS,而输出寄存器上的 ‘1’ 将激活P-MOS; 
● 施密特触发器输入被激活; 
● 选择引脚为弱上拉或弱下拉输出或悬空; 
● I/O脚上的数据在每个AHB1时钟周期被采样到输入数据寄存器; 
● 对输入数据寄存器的读访问可得到I/O状态; 
● 对输出数据寄存器的读访问得到最后一次写的值。

由图4可以看出,当I/O端口被配置为复用功能AF(Alternate Function)时: 
● 输出缓冲器可以被配置成开漏或推挽; 
● 输出缓冲器被片上外设信号驱动; 
● 施密特触发器输入被激活; 
● 根据寄存器GPIOx_PUPDR中的值选择引脚为弱上拉或弱下拉或悬空输出; 
● I/O脚上的数据在每个AHB1时钟周期被采样到输入数据寄存器; 
● 对输出数据寄存器的读访问得到最后一次写的值。

 


● 输出缓冲器被禁止; 
● 施密特触发器输入被暂停,0功耗,并且输出一直维持在0值状态; 
● 管脚的弱上拉和下拉被禁止; 
● 访问输入数据寄存器得到的数值为0;

五、GPIO引脚作为一般IO输入时,引脚的状态和端口输入寄存器GPIOx_IDR的状态是否一致?

在学习51核单片机时,由于51单片机I/O接口电路结构的原因,I/O输入时,I/O的引脚状态会出现与锁存器不一样的情况。所以,往往在I/O上拉输入前,提前向锁存器写入“1”,指令上也分为读引脚和读锁存器指令。

那么,基于Cortex-M内核的MCU的I/O引脚输入时是否也有与51单片机同样的问题呢??

答案是否定的!因为Cortex-M内核的MCU的GPIO引脚在被配置为I/O输入时,其输出电路是断开的。这样,输出电路就不会影响到引脚的状态。所以,引脚上的状态和输入寄存器GPIOx_IDR中的数据始终一致。
 

 

为什么要配置端口?

因为GPIO中端口的作用很多,没有固定的一种模式,因此需要配置.

每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。

本文引用地址:http://www.eepw.com.cn/article/201611/318989.htm

GPIO端口的每个位可以由软件分别配置成多种模式。每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问(不允许半字或字节访问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问;这样,在读和更改访问之间产生IRQ时不会发生危险。

配置为输出模式 , 驱动led , 配置思路是什么样的?

使能端口时钟;
选定需要配置的管脚;
配置端口的模式;
初始化端口; 
代码如下:

#include "led.h"
#include "sys.h"
void LED_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;//结构体变量定义

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOF时钟

  GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_9|GPIO_Pin_10); //LED0=PF9,LED1=PF10
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//输出模式
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//50M
  GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIOF
}
以下是配置按键的接口

程序如下:

/按键初始化函数
void KEY_Init(void) //IO初始化

     GPIO_InitTypeDef GPIO_InitStructure;
 
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);//使能PORTA,PORTE时钟

    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;//KEY0-KEY2
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
     GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE2,3,4

    //初始化 WK_UP-->GPIOA.0      下拉输入
    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0设置成输入,默认下拉      
    GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.0

}

 

以下是配置ds18b20的接口

//IO方向设置
#define DS18B20_IO_IN()  {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=8<<12;}
#define DS18B20_IO_OUT() {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=3<<12;}
IO操作函数                                               
#define    DS18B20_DQ_OUT PGout(11) //数据端口    PA0 
#define    DS18B20_DQ_IN  PGin(11)  //数据端口    PA0 


//IO方向设置  gpio13  每4个位控制1个IO。
//#define DS18B20_IO_IN()  {GPIOG->CRH&=0XFFF0FFFFF;GPIOG->CRH|=8<<20;}
//#define DS18B20_IO_OUT() {GPIOG->CRH&=0XFFF0FFFFF;GPIOG->CRH|=3<<20;}
//IO操作函数                                               
//#define    DS18B20_DQ_OUT PGout(13) //数据端口    PA0 
//#define    DS18B20_DQ_IN  PGin(13)  //数据端口    PA0 
 

 

 

再看GPIO功能很强大:

1.通用I/O(GPIO):最最基本的功能,可以驱动LED、可以产生PWM、可以驱动蜂鸣器等等;

2.单独的位设置或位清除:方便软体作业,程序简单。端口配置好以后只需GPIO_SetBits(GPIOx, GPIO_Pin_x)就可以实现对GPIOx的pinx位为高电平;

3.外部中断/唤醒线:端口必须配置成输入模式时,所有端口都有外部中断能力;

4.复用功能(AF):复用功能的端口兼有IO功能等。复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式:(CNFx[1:0]=01b,MODEx[1:0]=00b)。

5.软件重新映射I/O复用功能:为了使不同器件封装的外设I/O功能的数量达到最优,可以把一些复用功能重新映射到其他一些脚上。这可以通过软件配置相应的寄存器来完成。这时,复用功能就不再映射到它们的原始引脚上了;

6.GPIO锁定机制:主要针对复位设定的,当某端口位lock后,复位后将不改变的此端口的位配置。

GPIO基本设置

GPIOMode_TypeDef GPIO mode定义及偏移地址

GPIO_Mode_AIN = 0x0,//模拟输入

GPIO_Mode_IN_FLOATING = 0x04, //悬空输入

GPIO_Mode_IPD = 0x28,//下拉输入

GPIO_Mode_IPU = 0x48,//上拉输入

GPIO_Mode_Out_OD = 0x14, //开漏输出

GPIO_Mode_Out_PP = 0x10,//推挽输出

GPIO_Mode_AF_OD = 0x1C,//开漏复用

GPIO_Mode_AF_PP = 0x18//推挽复用

GPIO输入输出速度选择:

typedef enum

{

GPIO_Speed_10MHz = 1,

GPIO_Speed_2MHz,

GPIO_Speed_50MHz

}

GPIOSpeed_TypeDef;

#define IS_GPIO_SPEED(SPEED) ((SPEED == GPIO_Speed_10MHz) || (SPEED == GPIO_Speed_2MHz) ||(SPEED == GPIO_Speed_50MHz))

做一个GPIO输出的试验

当I/O端口被配置为推挽模式输出时:输出寄存器上的0激活N-MOS,而输出寄存器上的1将激活P-MOS。

用这段程序实现:GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

int main(void)

{

#ifdef DEBUG

debug();

#endif

RCC_Configuration();

NVIC_Configuration();

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOC, &GPIO_InitStructure);

while (1)

{

GPIO_SetBits(GPIOC, GPIO_Pin_4); //设置PC.04 pin为高电平,点亮LED1

Delay();

GPIO_ResetBits(GPIOC, GPIO_Pin_4); //设置PC.04 pin为低电平,熄灭LED1

Delay();

}

}

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于stm32的GPIO的操作 的相关文章

  • STM32F4 通过软复位跳转到引导加载程序,无需 BOOT0 和 BOOT1 引脚

    我问这个问题是因为可以在这里找到类似问题的答案 通过应用程序跳转到 STM32 中的引导加载程序 即从用户闪存在引导模式下使用引导 0 和引导 1 引脚 用户 JF002 JF002回答 当我想跳转到引导加载程序时 我在其中一个备份寄存器中
  • 匹配 STM32F0 和 zlib 中的 CRC32

    我正在研究运行 Linux 的计算机和 STM32F0 之间的通信链路 我想对我的数据包使用某种错误检测 并且由于 STM32F0 有 CRC32 硬件 并且我在 Linux 上有带有 CRC32 的 zlib 所以我认为在我的项目中使用
  • 物联网网关

    物联网网关是 连接物联网设备和互联网的重要桥梁 它负责将物联网设备采集到的数据进行处理 存储和转发 使其能够与云端或其它设备进行通信 物联网网关的作用是实现物联网设备与云端的无缝连接和数据交互 物联网网关功能 数据采集 物联网网关可以从物联
  • STM32F103概要

    The STM32F103x4 STM32F103x6 STM32F103xC STM32F103xD and STM32F103xE are a drop in replacement for STM32F103x8 B medium d
  • VS Code 有没有办法导入 Makefile 项目?

    正如标题所说 我可以从现有的 Makefile 自动填充 c cpp properties json 吗 Edit 对于其他尝试导入 makefile 的人 我找到了一组脚本 它们完全可以实现我想要实现的目标 即通过 VS Code 管理
  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n
  • 擦除后无法写入闪存

    所以我不能在擦除后直接写入内部闪存 如果写操作之前没有擦除操作 那么我可以 有什么想法吗 编程函数返回 成功写入 值 但查看内存时 没有写入任何数据 这是代码 uint32 t pageAddress 0x08008000 uint16 t
  • mmap 比 ioremap 慢

    我正在为运行 Linux 2 6 37 的 ARM 设备进行开发 我正在尝试尽快切换 IO 引脚 我制作了一个小内核模块和一个用户空间应用程序 我尝试了两件事 使用以下命令直接从内核空间操作 GPIO 控制寄存器ioremap mmap G
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • 毕设开题分享 单片机智能教室系统(智能照明+人数统计)

    1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 单片机智能教室系统 智能照明 人数统计 大家可用于 课程设计 或 毕业设计 项目分享 https gitee com feifei1122 simulation project
  • STM32F4XX的12位ADC采集数值超过4096&右对齐模式设置失败

    文章目录 一 前言 二 问题1 数值超过4096 三 问题1的排错过程 四 问题2 右对齐模式设置失败 五 问题2的解决方法 5 1 将ADC ExternalTrigConv设置为0 5 2 使用ADC StructInit 函数 一 前
  • Arm:objcopy 如何知道 elf 中的哪些部分要包含在二进制或 ihex 中?

    我正在开发一个项目 其中涉及解析arm elf 文件并从中提取部分 显然 elf 文件中有很多部分没有加载到闪存中 但我想知道 objcopy 到底如何知道要在二进制文件中包含哪些部分以直接闪存到闪存中 以arm elf文件的以下reade
  • STM32H5 Nucleo-144 board开箱

    文章目录 开发板资料下载 目标 点亮LD1 绿 LD2 黄 和LD3 红 三个LED灯 开箱过程 博主使用的是STM32CubeMX配置生成代码 具体操作如下 打开STM32CubeMX File gt New project 选择开发板型
  • Cortex-M3与M4权威指南

    处理器类型 所有的ARM Cortex M 处理器是32位的精简指令集处理器 它们有 32位寄存器 32位内部数据路径 32位总线接口 除了32位数据 Cortex M处理器也可以有效地处理器8位和16位数据以及支持许多涉及64位数据的操作
  • 通过JTAG恢复STM32 MCU磨掉的标记

    我有一块可能带有 STM32 MCU 的板 我想为该板制作定制固件 因为库存板有很多问题 不幸的是 电路板制造商很友善地磨掉了所有标记 有没有办法通过 jtag 获取设备 系列 ID 并将其交叉引用到型号 我能找到的一切都是关于获取芯片的唯
  • 嵌入式 C++11 代码 — 我需要 volatile 吗?

    采用 Cortex M3 MCU STM32F1 的嵌入式设备 它具有嵌入式闪存 64K MCU固件可以在运行时重新编程闪存扇区 这是由闪存控制器 FMC 寄存器完成的 所以它不像a b那么简单 FMC 获取缓冲区指针并将数据刻录到某个闪存
  • 如何检查您的内核是否支持硬件上的 GPIO?

    我的目标是控制 Intel 主板 带 C1037U 处理器的 NM70 芯片组 上 Peppermint 4 Linux 内核版本 3 8 0 中的 GPIO 引脚 如何检查您的内核是否支持硬件上的 GPIO 背景 主板 Intel NM7
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015
  • GCC 变量映射和 MISRA-C

    我主要知道两种使用 GCC 声明内存映射寄存器的方法 有许多变体 使用双字段 每个外设的数据结构等 要么使用初始化为正确地址的指针 例如volatile uint32 t pMyRegister uint32 t 0xDEADBEEFUL

随机推荐

  • DXLAM、ubuntu16、tf1.13、anaconda环境配置

    DXSLAM环境的点点滴滴 配置该代码环境有两种方法 方法一 利用docker 方法二 直接配置 配置流程 1 配置ORBSLAM2环境 1 1ORB SLAM2配置 1 2测试单目并处理RGBD的数据集 2 配置tf环境 2 1 配置an
  • Sqoop MySQL 8 迁移Hadoop 3 提示:master:9000/sqoop/base-house already exists

    今天尝试使用Sqoop 将MySQL 8 指定库表数据 迁移至Hadoop 3 提示如下错误 2023 03 01 14 52 20 547 ERROR tool ImportTool Import failed org apache ha
  • 李航-机器学习-感知机(perceptron)-原始形式

    机器学习 感知机 perceptron 感知机模型 感知机模型 感知机学习策略 感知机算法实现 代码实现 运行程序可得 运行程序 感知机模型 感知机是一种线性的 二类分类模型 可以将空间划分为正类和负类 是一种判别模型 输入为具体的实例 输
  • 数字图像处理——实验一 离散傅里叶变换(代码)

    clc clear close all a imread Lena512C bmp f rgb2gray a 原图为三维图像 转为二维图像 figure 1 subplot 2 2 1 imshow f title 原图像 H fft2 f
  • python 绘制箱型图(boxplot)时如何去掉出现的连续散点

    问题如上所示 绘制箱型图时发现在箱型图的上下边界出现许多散点 如何去除呢 只需要在绘制时添加一个命令即可 ax boxplot data h 0 就是这一步就可以去除连续的散点 showmeans True vert True vertic
  • java jdk8 使用stream实现两个list集合合并成一个list集合(对象属性的合并)

    java使用stream实现list中对象属性的合并 根据两个List中的某个相同字段合并成一条List 包含两个List中的字段 目录 一 前言 二 示例 示例1 java8 合并两个 list map 示例2 java8 合并两个 li
  • ES6 Set 转换成 Array

    用 操作符 可以实现将 Set 转成 Array let a new Set 1 2 3 4 5 let arr a console log arr 运行结果 1 2 3 4 5
  • python怎么编写模拟交易_python简单区块链模拟详解

    最近学习了一点python 那就试着做一做简单的编程练习 首先是这个编程的指导图 如下 对的 类似一个简单区块链的模拟 代码如下 class DaDaBlockCoin index 索引 timestamp 时间戳 data 交易记录 se
  • [QT_000]学习Qt的最好途径(个人记录)

    00 先通过相关书籍 网上视频了解基础 可以通过某位大神的系列博客总结去学习 这样相对全面一些 达到最好能了解到整个Qt的全貌 不求甚解 01 当了解完基础以后 把Qt自带的案例例子运行一遍 搞懂案例 这是非常有用的一步 现实中好多小功能都
  • 数字水印技术的原理及应用研究

    一 问题分析 随着计算机和网络技术的普及 数字产品的保密性及版权保护等问题逐渐凸显出来 这使得数字水印技术成为热点问题 一些别有企图的个人和团体在没有得到原作者的同意的情况下复制和传播有版权的数据文件或作品 所以 数字媒体的信息安全 知识产
  • 【ARIMA-SSA-LSTM】合差分自回归移动平均方法-麻雀优化-长短期记忆神经网络研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 1 1 ARIMA模型 1 2 鲸鱼优化算法 1 3 LSTM 模型 2 运行结果 3 参考文献 4 Py
  • 计算机网络 五、 五层协议体系结构-----网络层(上)

    网络层 network layer 主要包括以下两个任务 1 负责为分组交换网上的不同主机提供通信服务 在发送数据时 网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送 在TCP IP体系中 由于网络层使用IP协议 因此分组也叫做
  • 了解chat-GPT必须要读的论文汇总

    前言 今年在nlp领域 最靓的仔要数chat gpt了 未来也可能颠覆搜索行业 甚至其他行业也会慢慢的被颠覆被取代 作为技术人员 为了保证饭碗 必须跟进相关技术的发展 目前梳理了一下chat gpt技术的脉络 通过该脉络可以比较系统的了解c
  • 开发uniapp苹果app,苹果签名证书的创建方法

    在uniapp云打包界面 打包苹果app 需要私钥证书p12文件 还需要证书profile文件和证书密码 这两个文件到底是从什么地方获取的呢 答案是这两个证书需要在苹果开发者中心生成 下面我们这篇教程 将教会大家如何创建这两个打包所需的证书
  • C语言基础(五)自定义类型与宏定义

    自定义类型与宏定义 一 自定义类型 二 宏定义 三 枚举 一 自定义类型 自定义类型 typedef用新的类型名代替原有的类型名 例如 指定用u8为类型名 作用与unsigned char相同 typedef unsigned char u
  • 自定义Dynamics 365实施和发布业务解决方案 - 7. 报表

    在每个组织中 决策者都依赖于各种报告来推动业务取得成功 因此 每个软件开发项目都需要开发报告 Dynamics365配备了最先进的报告功能 这些报告的范围从简单的查询到具有复杂查询的更高级的报告 此外 Dynamics365的一个关键功能是
  • Qt 串口发送0x00

    应用场景 大恒光电的平移台 GCD 040101M 先看看要发什么东西 这是串口监听软件截取的结果 绿色的字 串口协议主要包括三个部分 前面是固定的 后面是key 后面是 0x00 最后面是数据 错误版本1 bool MoveStage w
  • Windows10点击睡眠之后不锁屏?

    一些用户反馈自己在使用win10系统笔记本电脑过程中 突然碰到了无法睡眠的情况 不管是盖上屏幕还是在系统中选择睡眠 电脑都无法进行睡眠 根本没有任何反应 该怎么办呢 接下来 系统城小编就为大家带来该问题的具体解决方法 首先可以按方法一进行设
  • Deepin 系统安装并开启本地远程使Windos系统访问

    思路 1 系统安装 2 安装xrdp Linux和Windows间的远程桌面访问 coder i 的博客 CSDN博客 linux远程连接windows桌面 sudo apt install xrdp 然后启动xrdp服务 sudo sys
  • 关于stm32的GPIO的操作

    首先先了解一下输出的模式 比较常用的是 推挽输出 1 GPIO Mode AIN 模拟输入 2 GPIO Mode IN FLOATING 浮空输入 3 GPIO Mode IPD 下拉输入 4 GPIO Mode IPU 上拉输入 5 G