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

初学STM32之简单认识IO口配置(学习笔记)

     在使用51单片机的时候基本上不需要额外的配置IO,不过在使用特定的IO的时候需要额外的设计外围电路,比如PO口它是没有内置上拉电阻的。因此若想P0输出高电平,它就需要外接上拉电平。(当然这不是说它输入不需要上拉电阻,主要是它作为输入端的时候接收高电平就是共外围电路的上拉电阻)。

操作目标是控制STM32F103C8T6上某个IO口让其置1或者置0.

GPIO是APB2上的外设资源。

APB2是AMBA总线结构中的一种,主要用于低带宽的周边外设之间的连接。

APB2(Advanced Peripheral Bus 2)是ARM公司提出的AMBA总线结构之一,属于一种片上总线结构。APB2主要用于连接低速外设,如I2C、UART、SPI等,这些外设通常具有低带宽和低功耗的需求。

APB2的特点

  1. 低带宽‌:APB2主要用于连接低速外设,适合那些不需要高速数据传输的外设。
  2. 非流水作业‌:APB2的传输至少需要两个时钟周期,且数据在时钟的上升沿变化,不需要等待周期和回应信号。
  3. 控制逻辑简单‌:APB2只有四个控制信号,传输可以采用状态机表示,控制逻辑相对简单。

APB2与其他总线的区别

  • 与AHB的区别‌:AHB是高级高性能总线,主要用于连接高性能模块如CPU、DMA和高速存储器。APB2则是用于连接低速外设。
  • 与APB3和APB4的区别‌:APB3增加了PREADY和PSLVERR信号,用于反馈读和写的状态;APB4增加了PPROT和PSTRB信号,用于提供保护机制和字节选通功能。

   在51单片机中如果我们要是某个IO口,比如P1.0端口输出高电平 ,直接赋值即可。但作为输入端就稍微麻烦点需要先赋值P1.0为高电平,再读取P1.0端口的电压。需要两步走。

GPIO作为一种外设资源,在使用它的时候要经过这么几步走,

  • 第一步:假设要是能PC13使其输出高电平,经查得知PC13是GPIOC的编号13的IO口(按照顺序因该是第14位IO,是从0开始编的)所以第一步使能能APB2外设总线时钟寄存器

APB2这个外设使能时钟寄存器名字是RCC_APB2ENR,作为32位的单片机它的特殊功能寄存器一般也是32位,点一下APB2上的外设个数,刚好是16个,GPIOC是其中的一位,然后我们看一下手册上的描述(库函数里有21个)

确实是0-15位可控制,后16位是保留的。从他的复位值可知默认的都是0;详细查看可知

可知位4(是第5位)至1,即可使能GPIOC I/O口。即 RCC->APB2EBR = 0x00000010

 = 0B 0000 0000 0000 0000 0000 0000 0001 0000

  • 第二步:GPIO和51单片机的IO口的不同之处是它的输入输出是分开的需要额外的进行功能选择的,而且对应IO口处于什么结构模式也是需要选择的,

在STM32中控制这些功能,每个IO口需要4位,16个IO就是64位,因此这些IO口的功能选择控制寄存器就分成了两个,端口控制高寄存器(CRH)和端口控制低寄存器(CRL),PC13应是由CRH控制,打开手册得知:

先看一下它的复位值:0x4444 4444 = 0b0100 0100 0100 0100 0100 0100 0100 0100

可以看到0100代表的是浮空输入模式,即STM32上电后的复位状态都是浮空输入模式。

浮空输入(GPIO_Mode_IN_FLOATING)

  • 电路结构:无内部上下拉电阻,引脚悬空。
  • 特点
    • 电平由外部电路决定。
    • 未连接外部电路时,电平可能不稳定(易受干扰)。

因此控制这个IO口我们选择0011 (通用推挽输出模式速度50HZ) 即我们赋值寄存器

GPIOC->CRH = 0x0030 0000;当然这个写法是不太对,其它位我们都赋值为0了,

一般来说需要先把该处的控制位清0;即GPIOC->CRH &= 0x1101 1111;

然后再通过或运算给控制位赋值:即GPIOC->CRH |= 0x0030 0000;(1个16进制数代表4个2进制数)

第三步:选择输出高电平还是低电平,在51机中我们直接就是使用赋值语句进行赋值,如:P1.0 = 0;但是在STM32中是在专用的寄存器里操作的而且分输入和输出,端口输出数据寄存器(GPIOx_ODR) (x=A..E),端口输入数据寄存器(GPIOx_IDR) (x=A..E),目前是需要输出一个低电平,

我们是需要在位13处写0,正常情况下还是需要经过与或运算才是正确的赋值方式,这边就直接赋值其它位都置0:

GPIOC->ODR = 0x0000 0000;//输出低电平

GPIOC->ODR = 0x0000 2000//输出高电平

经过这三步我们就成功使PC13端口输出低电平或者高电平(通用推挽输出方式,50MHZ)

这是使用寄存器的方式进行操作。还有使用库函数的,库函数就不叙述了。

笔者的资料来自B站江协科技。


模式电平特性驱动能力适用场景注意事项
模拟输入模拟信号-ADC/DAC禁用数字功能
浮空输入由外部决定-外部有上下拉的总线避免悬空
下拉输入默认低电平-检测高电平有效信号外部信号需强驱动
上拉输入默认高电平-检测低电平有效信号外部信号需强驱动
推挽输出主动驱动高 / 低电平LED、高速信号避免总线冲突
开漏输出需外部上拉I2C、电平转换必须外接上拉电阻
复用推挽外设驱动高 / 低电平定时器 PWM、USART_TX需配置外设功能
复用开漏外设驱动 + 外部上拉I2C、CAN 总线需配置外设功能

一、输入模式

1. 模拟输入(GPIO_Mode_AIN)

  • 电路结构:引脚直连 ADC/DAC 模块,断开内部上下拉电阻。
  • 特点
    • 无施密特触发器,直接传递模拟信号。
    • 禁止数字信号输入(无法读取高低电平)。
  • 应用
    • ADC 电压采集(如传感器信号)。
    • DAC 模拟输出(某些引脚支持)。

2. 浮空输入(GPIO_Mode_IN_FLOATING)

  • 电路结构:无内部上下拉电阻,引脚悬空。
  • 特点
    • 电平由外部电路决定。
    • 未连接外部电路时,电平可能不稳定(易受干扰)。
  • 应用
    • 需要外部上拉或下拉的场景(如总线通信:I2C 的 SDA/SCL 需外部上拉)。
    • 电平由外部设备驱动(如中断信号线)。
3. 下拉输入(GPIO_Mode_IPD)

  • 电路结构:内部连接下拉电阻(约 20-50kΩ),默认低电平。
  • 特点
    • 引脚悬空时,默认读取低电平。
    • 外部高电平可覆盖下拉。
  • 应用
    • 避免引脚悬空引发误触发(如按键检测低电平有效)。
4. 上拉输入(GPIO_Mode_IPU)

  • 电路结构:内部连接上拉电阻(约 20-50kΩ),默认高电平。
  • 特点
    • 引脚悬空时,默认读取高电平。
    • 外部低电平可覆盖上拉。
  • 应用
    • 避免引脚悬空引发误触发(如按键检测高电平有效)。

二、输出模式

5. 推挽输出(GPIO_Mode_Out_PP)

  • 电路结构:P-MOS 和 N-MOS 组合,可主动输出高 / 低电平。
  • 特点
    • 高电平:P-MOS 导通,输出 VDD。
    • 低电平:N-MOS 导通,输出 GND。
    • 驱动能力强,适合高速切换。
  • 应用
    • 驱动 LED、继电器等负载。
    • 高频信号(如 PWM、SPI 时钟)。

6. 开漏输出(GPIO_Mode_Out_OD)

  • 电路结构:仅 N-MOS,需外部上拉电阻输出高电平。
  • 特点
    • 高电平:N-MOS 关闭,电平由外部上拉电阻决定。
    • 低电平:N-MOS 导通,输出 GND。
    • 支持 “线与” 逻辑,但上升沿较慢。
  • 应用
    • I2C、SMBUS 等总线通信。
    • 电平转换(如 5V 与 3.3V 设备通信)。

7. 复用推挽(GPIO_Mode_AF_PP)

  • 电路结构:与普通推挽相同,但输出由外设控制(如 USART、SPI)。
  • 特点
    • 外设自动管理电平输出(如定时器 PWM、串口 TX)。
    • 高驱动能力,适合高频外设。
  • 应用
    • 外设功能引脚(如 TIMx_CHx、USART_TX)。
    • 需要硬件自动控制的场景。

8. 复用开漏(GPIO_Mode_AF_OD)

  • 电路结构:与普通开漏相同,但输出由外设控制。
  • 特点
    • 需外部上拉电阻,支持 “线与” 逻辑。
    • 由外设自动管理电平(如 I2C 的 SDA/SCL)。
  • 应用
    • I2C、CAN 总线等复用功能。
    • 多设备共享总线通信。

这是驱动电路,然后我们调用端口各个功能测试一下他们的区别:

  • GPIO_Mode_IPU 使PC13处于输入状态,并且内部设置上拉电阻,LED熄灭,端口电压3.2V

可以设置端口电压为低电平,这时LED会点亮不过亮度不够端口电压为1V。

  • GPIO_Mode_IPD 使PC13处于输入状态,并且内部设置下拉电阻,LED依然会点亮不过亮度不够

端口电压1V

  • GPIO_Mode_IN_FLOATING  LED熄灭端口电压1.3V,推测是是驱动电流不够
  • 当设置IO输出端口的时候如果忘记设置频率将无法正确使IO工作,同理如果忘记设计其它参数IO口也无法正确使能?从测试结果看电压是1.3V即端口状态是之前的浮空输入状态。

使用库函数配置IO口使PC13端口输出低电平

#include "stm32f10x.h"                  // Device header
int main(void)
{//RCC->APB2ENR = 0x00000010; //APB2 外设时钟使能寄存器//GPIOC->CRH = 0x00300000; //端口配置高寄存器//GPIOC->ODR = 0X00000000; //端口输出数据寄存器RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStructure);//GPIO_SetBits(GPIOC,GPIO_Pin_13);//端口设置为1GPIO_ResetBits(GPIOC,GPIO_Pin_13); //端口设置为0while(1){}
}

GPIOpin的选择上可以用或运算:

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_6 | GPIO_Pin_7 ;				//GPIO引脚,赋值为0,2,3,4,6,7

库函数与对应的寄存器列举

下面的程序是PB14外部中断的初始化过程

void CountSensor_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//GPIOB时钟使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//AFIO时钟使能/*GPIO初始化 */GPIO_InitTypeDef  GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;//上拉GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 ;  //14位GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);    //使能GPIOB_14设置/*AFIO选择引脚*/GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);///*EXIT初始化*/EXTI_InitTypeDef EXIT_InitStructure;EXIT_InitStructure.EXTI_Line = EXTI_Line14 ;EXIT_InitStructure.EXTI_LineCmd = ENABLE ;EXIT_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //选择外部中断EXIT_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling ;//下降沿EXTI_Init(&EXIT_InitStructure);//使能外部中断设置/*设置NVIC,中断优先级设置  */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 = 2 ;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2 ;NVIC_Init(&NVIC_InitStructure); //使能NVIC中断设置

配置外部中断PB14、上拉电阻、下降沿触发。中断优先级 抢占2 响应2

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//GPIOB时钟使能

  寄存器   APB2ENR bit 3

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//AFIO时钟使能

 寄存器   APB2ENR bit 0

GPIO_InitTypeDef  GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;//上拉GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 ;  //14位GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);    //使能GPIOB_14设置

见前文的说明不赘述,其中的上下拉模式要特别说明一下

由手册发现上拉/下来输入模式由同一组控制位控制,怎么区分设置呢?

输入模式下的上拉电阻和下拉电阻寄存器配置  由GPIOx_ODR寄存器控制,为0则为下拉,为1则为上拉。ODR寄存器原先是数据输出寄存器。由上述的两图可以看到当配置为GPIO_Mode_IPU;时ODR14为1,下拉时为0.

/*AFIO选择引脚*/GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);//

AFIO(Alternate Function Input/Output)复用端口选择寄存器配置

该端口,本例采用的是中断配置因此不设置默认。

端口复用功能配置,本案都是使用主功能因此也不配置。

外部中断配置寄存器 1~4(AFIO_EXTICR1) 
   外部中断配置寄存器共4个,pb14使用的是第4个
AFIO_EXTICR4
因为是配置PB14因此控制的是8-11 EXTI14[3:0]位共4位控制位,因为是GPIOB 因此这4位是
0001 =0x01

EXTI_InitTypeDef EXIT_InitStructure;EXIT_InitStructure.EXTI_Line = EXTI_Line14 ;EXIT_InitStructure.EXTI_LineCmd = ENABLE ;EXIT_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //选择外部中断EXIT_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling ;//下降沿EXTI_Init(&EXIT_InitStructure);//使能外部中断设置

配置外部中断寄存器:

● 配置 20个中断线的屏蔽位(EXTI_IMR)   IMR( Interrupt Mask Register )
EXIT_InitStructure.EXTI_Line = EXTI_Line14 ;EXIT_InitStructure.EXTI_LineCmd = ENABLE ;
EXIT_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //选择外部中断

默认是全屏蔽的,程序是使能bit14

默认是全屏蔽的即复位值是0x0000 0000. EMR(Event Mask Interrupt)

● 配置所选中断线的触发选择位 (EXTI_RTSR EXTI_FTSR)

RTSR(Rising Trigger Selection Register),我们选择的是下降沿因此无需设置即默认。

FTSR(Falling edge Trigger Selection Register) 我们配置是bit14位因此需要设置为1

    //EXIT_InitStructure.EXTI_Line = EXTI_Line14 ;//EXIT_InitStructure.EXTI_LineCmd = ENABLE ;EXIT_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling ;//下降沿

软件中断是通过代码或者寄存器操作触发中断,之前代码中是采用GPOI触发是硬件触发中断因此无需设置即默认即可。

PR(Pull Reques),挂起寄存器是操作事件触发的,因此这里也无需设置。至此外部中断EXTI寄存器完毕。

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 = 2 ;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2 ;NVIC_Init(&NVIC_InitStructure); //使能NVIC中断设置

至于NVIC是内核中的寄存器KEIL5中有相应的查看界面,但是里面的参数好像有点问题,以本案为
例:
未使能NVIC之前的数据,可以看到优先级分组里的选项就不符合STM32F103C8t6里的分法,使能后的数据
SCB->AIRCR根据手册因是
他的掩码是0x05FA0000,分组是2组即0x500,所以结果是0x05FA0500和这个界面里显示的也不一样,因此这里面的
然后再看一张分组1的NVIC界面是1抢占3响应
记过几次设置分组的比较可以得出以下几个结果: 这里的数据代表分组是第几组(至于组内里面的响应设置变动,不会改变这个值)
这个里面是数据 1是抢占优先级,48 = 16*3 响应优先级是3,即1抢占3响应。176不清楚,这是观察结果可能只适合STM32F103C8T6
硬件事件选择
通过下面的过程,可以配置 20 个线路为事件源
● 配置 20 个事件线的屏蔽位 (EXTI_EMR)
● 配置事件线的触发选择位 (EXTI_RTSR EXTI_FTSR)
软件中断 / 事件的选择
20 个线路可以被配置成软件中断 / 事件线。下面是产生软件中断的过程:
● 配置 20 个中断 / 事件线屏蔽位 (EXTI_IMR, EXTI_EMR)
● 设置软件中断寄存器的请求位 (EXTI_SWIER)
以下来自DEEPSEEK

一、定义与核心功能

  1. 事件寄存器

    • 功能‌:用于配置和控制硬件事件的触发条件(如边沿检测)及是否允许事件信号传递到硬件模块(如DMA、ADC等)‌。
    • 典型寄存器‌:
      • EMR(事件屏蔽寄存器):控制事件触发是否有效‌。
      • RTSR/FTSR(上升沿/下降沿触发选择寄存器):配置事件的触发条件‌。
  2. 中断寄存器

    • 功能‌:管理中断请求的触发、优先级配置及中断屏蔽状态,直接关联CPU的中断响应流程‌12。
    • 典型寄存器‌:
      • IMR(中断屏蔽寄存器):控制中断请求是否被CPU响应‌。
      • EXTICR(外部中断配置寄存器):设置中断线对应的GPIO引脚及触发方式‌。

二、触发机制差异

特性事件寄存器中断寄存器
触发目标直接驱动硬件模块(如DMA、ADC)触发CPU中断服务程序(ISR)‌13
响应方式硬件自动处理,无需CPU介入需CPU保存现场并执行ISR‌12
典型应用低延迟数据传输、周期性触发操作异步任务处理、紧急事件响应‌23

三、配置流程对比

  1. 事件寄存器配置示例

    • 通过RTSR设置上升沿触发事件。
    • 通过EMR使能事件触发,信号直接传递至外设模块‌。
  2. 中断寄存器配置示例

    • 通过EXTICR绑定GPIO引脚到中断线。
    • 通过IMR使能中断请求,并设置NVIC优先级‌。

四、关键设计差异

  • 事件寄存器‌:
    • 通过硬件链路实现快速响应,适用于实时性要求高且无需复杂逻辑的场景‌。
    • 典型应用:DMA触发、定时器同步‌23。
  • 中断寄存器‌:
    • 依赖CPU介入,适合需要执行复杂逻辑或修改程序流程的场景‌。
    • 典型应用:按键检测、通信协议处理‌。

五、总结

  • 事件寄存器‌通过硬件链路实现快速响应,‌中断寄存器‌依赖CPU处理异步任务‌。
  • 两者常结合使用,例如:事件触发DMA传输,传输完成后通过中断通知CPU‌23。

● 配置对应到外部中断控制器 (EXTI) NVIC 中断通道的使能和屏蔽位,使得 20 个中断线中的
请求可以被正确地响应。

相关文章:

初学STM32之简单认识IO口配置(学习笔记)

在使用51单片机的时候基本上不需要额外的配置IO,不过在使用特定的IO的时候需要额外的设计外围电路,比如PO口它是没有内置上拉电阻的。因此若想P0输出高电平,它就需要外接上拉电平。(当然这不是说它输入不需要上拉电阻,…...

【长安大学】苹果手机/平板自动连接认证CHD-WIFI脚本(快捷指令)

背景: 已经用这个脚本的记得设置Wifi时候,关闭“自动登录” 前几天实在忍受不了CHD-WIFI动不动就断开,一天要重新连接,点登陆好几次。试了下在网上搜有没有CHD-WIFI的自动连接WIFI自动认证脚本,那样我就可以解放双手&…...

powermock,mock使用笔记

介于日本的形式主义junit4单体测试,特记笔记,以下纯用手机打出来,因为电脑禁止复制粘贴。 pom文件 powermock-module-junit1.7.4 powermock-api-mokcito 1.7.4 spring-test 8 1,测试类头部打注解 RunWith(PowerMockRunner.class…...

大模型微调实战指南

1. 引言 在人工智能领域,大模型(如GPT、BERT、DeepSeek等)已经展现出了强大的通用能力。然而,要让这些模型在特定任务或领域中发挥最佳性能,微调(Fine-tuning)是必不可少的一步。本文将带你从零…...

计算机毕业设计Python+Django+Vue3微博数据舆情分析平台 微博用户画像系统 微博舆情可视化(源码+ 文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

HTML第四节

一.复合选择器 1.后代选择器 注:1.后代选择器会选中后代所有的要选择的标签 2.儿子选择器 3.并集选择器 注:1.注意换行,同时选中多种标签 4.交集选择器 注:1.标签选择器放在最前面,例如放在类选择器的前面 2.两个选择…...

Kubernetes 的正式安装

1.基础的网络结构说明 软件路由器 ikuai 当然同一个仅主机模式 相当于在 同一个我们所谓的广播域内 所以相当于它们的几张网卡 是被连接起来的 为了防止出现问题 我们可以把第二块网卡临时关闭一下 2.准备路由器 ikuai 爱快 iKuai-商业场景网络解决方案提供商 (ikuai8.com)…...

VS2022C#windows窗体应用程序调用DeepSeek API

目录 一、创建DeepSeek API Key 二、创建窗体应用程序 三、设计窗体 1、控件拖放布局‌‌ 2、主窗体【Form1】设计 3、多行文本框【tbContent】 4、提交按钮【btnSubmit】 5、单行文字框 四、撰写程序 五、完整代码 六、运行效果 七、其它 一、创建DeepSeek API Ke…...

7. 机器人记录数据集(具身智能机器人套件)

1. 树莓派启动机器人 conda activate lerobotpython lerobot/scripts/control_robot.py \--robot.typelekiwi \--control.typeremote_robot2. huggingface平台配置 huggingface官网 注册登录申请token(要有写权限)安装客户端 # 安装 pip install -U …...

阿里云操作系统控制台——ECS操作与性能优化

引言:在数字化时代,云服务器作为强大的计算资源承载平台,为企业和开发者提供了灵活且高效的服务。本文将详细介绍如何一步步操作云服务器 ECS,从开通到组件安装,再到内存全景诊断,帮助快速上手,…...

在飞腾E2000Q开发板上,基于RT-Thread操作系统,实现DeepSeek语音交互

目录 一 ,简介 二 ,流程与结果分享 1. Phytium E2000q demo开发板连接 2. RT-Thread Kconfig 配置选择 (1)驱动 (2)软件包 3. 主要代码 (1)录音功能,将录音结果保存…...

navicat导出postgresql的数据库结构、字段名、备注等等

1、执行sql语句 SELECT A.attnum AS "序号",C.relname AS "表名",CAST ( obj_description ( relfilenode, pg_class ) AS VARCHAR ) AS "表名描述",A.attname AS "字段名称",A.attnotnull as "是否不为null",(case when A…...

K8s 1.27.1 实战系列(三)安装网络插件

Kubernetes 的网络插件常见的有 Flannel 和 Calico ,这是两种主流的 CNI(容器网络接口)解决方案,它们在设计理念、实现方式、性能特征及适用场景上有显著差异。以下是两者的综合对比分析: 一、Flannel 和 Calico 1. 技术基础与网络实现 Flannel 核心机制:基于 Overlay …...

Python实现鼠标点击获取窗口进程信息

最近遇到挺无解的一个问题:电脑上莫名其妙出现一个白色小方块,点击没有反应,关也关不掉,想知道它和哪个软件有关还是显卡出了问题,也找不到思路,就想着要不获取一下它的进程号看看。 于是写了一个Python脚本…...

文件解析:doc、docx、pdf

1.doc解析 ubuntu/debian系统应先安装工具 apt-get install python-dev libxml2-dev libxslt1-dev antiword unrtf poppler-utils pstotext tesseract-ocr \ flac ffmpeg lame libmad0 libsox-fmt-mp3 sox libjpeg-dev swig pip install textract解析: import te…...

JDBC 完全指南:掌握 Java 数据库交互的核心技术

JDBC 完全指南:掌握 Java 数据库交互的核心技术 一、JDBC 是什么?为什么它如此重要? JDBC(Java Database Connectivity)是 Java 语言中用于连接和操作关系型数据库的标准 API。它允许开发者通过统一的接口访问不同的数…...

【STM32】STM32系列产品以及新手入门的STM32F103

📢 STM32F103xC/D/E 系列是一款高性能、低功耗的 32 位 MCU,适用于工业、汽车、消费电子等领域;基于 ARM Cortex-M3,主频最高 72MHz,支持 512KB Flash、64KB SRAM,适合复杂嵌入式应用,提供丰富的…...

esp32驱动带字库芯片TFT屏幕

前言 学习esp32单片机开发,前段时间在网上买了一块2.0寸TFT屏幕。 长这个样子,这个屏幕带汉字字库的硬件模块。我仔细看了一下这个字库模块上面写的字是25Q32FVSIG 1336 文档 卖家也发来了开发文档,是个doc文档,张这个样子。 开…...

[Python入门学习记录(小甲鱼)]第5章 列表 元组 字符串

第5章 列表 元组 字符串 5.1 列表 一个类似数组的东西 5.1.1 创建列表 一个中括号[ ] 把数据包起来就是创建了 number [1,2,3,4,5] print(type(number)) #返回 list 类型 for each in number:print(each) #输出 1 2 3 4 5#列表里不要求都是一个数据类型 mix [213,"…...

网络安全等级保护2.0 vs GDPR vs NIST 2.0:全方位对比解析

在网络安全日益重要的今天,各国纷纷出台相关政策法规,以加强信息安全保护。本文将对比我国网络安全等级保护2.0、欧盟的GDPR以及美国的NIST 2.0,分析它们各自的特点及差异。 网络安全等级保护2.0 网络安全等级保护2.0是我国信息安全领域的一…...

由麻省理工学院计算机科学与人工智能实验室等机构创建低成本、高效率的物理驱动数据生成框架,助力接触丰富的机器人操作任务

2025-02-28,由麻省理工学院计算机科学与人工智能实验室(CSAIL)和机器人与人工智能研究所的研究团队创建了一种低成本的数据生成框架,通过结合物理模拟、人类演示和基于模型的规划,高效生成大规模、高质量的接触丰富型机…...

leetcode15 三数之和

1.哈希法 为了避免重复 class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {set<vector<int>> temple;//使用 set 来存储符合条件的三元组&#xff0c;避免重复vector<vector<int>> out;//存放最终输…...

5c/c++内存管理

1. C/C内存分布 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(sizeof(int) * 4);i…...

蓝桥备赛(11)- 数据结构、算法与STL

一、数据结构 1.1 什么是数据结构&#xff1f; 在计算机科学中&#xff0c;数据结构是一种 数据组织、管理和存储的格式。它是相互之间存在一种 或多种特定关系的数据元素的集合。 ---> 通俗点&#xff0c;数据结构就是数据的组织形式 &#xff0c; 研究数据是用什么方…...

C++ 二叉搜索树代码

C 二叉搜索树代码 #include <iostream> using namespace std;template<typename T> struct TreeNode{T val;TreeNode *left;TreeNode *right;TreeNode():val(0), left(NULL), right(NULL){}TreeNode(T x):val(x), left(NULL), right(NULL){} };template<typena…...

Flask 打包为exe 文件

进入虚拟环境 激活虚拟环境 .venv\Scripts\activatepython build.py 完成标识图片 已经完成打包了&#xff0c;完成&#xff0c;下边是我自己记录的 这时候&#xff0c;我自己数据库文件夹下是没有sql 脚本的&#xff0c;要自己拷贝下这个路径下的文件 E:\开源文件\python-wi…...

JavaWeb-idea配置smart tomcat

一&#xff0c;安装smart tomcat插件 在插件市场搜索smart tomcat 点击安装&#xff0c;我已经安装成功。 二&#xff0c;web项目配置tomcat 点击这里&#xff0c;选择edit 进来之后&#xff0c;选加号 然后选tomcat 在这里&#xff0c;配置完毕后&#xff0c;点apply&…...

DELETE/ UPDATE/ INSERT 语句会自动加锁

在数据库系统中&#xff0c;DELETE、UPDATE 和 INSERT 语句通常会自动加锁&#xff0c;以确保数据的一致性和并发控制。具体的锁类型和效果取决于数据库的实现&#xff08;如 MySQL、PostgreSQL 等&#xff09;以及事务的隔离级别。以下是这些操作通常加锁的行为和效果&#xf…...

docker本地部署ollama

启动ollama容器 1.使用该命令启动CPU版运行本地AI模型 docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama 2.此命令用于启动GPU版本运行AI模型 前提是笔记本已配置NVIDIA的GPU驱动&#xff0c;可在shell中输入nvidia-smi查看详细情况…...

Linux线程机制

Linux 操作系统中的线程机制是基于 POSIX 线程&#xff08;Pthreads&#xff09; 标准实现的&#xff0c;通常称为 pthread。Linux 内核通过Native POSIX Thread Library提供了对多线程的支持。 1. 线程的基本概念 线程是进程中的一个执行单元&#xff0c;是 CPU 调度的基本单…...

LeetCode热题100JS(44/100)第八天|二叉树的直径|二叉树的层序遍历|将有序数组转换为二叉搜索树|验证二叉树搜索树|二叉搜索树中第K小的元素

543. 二叉树的直径 题目链接&#xff1a;543. 二叉树的直径 难度&#xff1a;简单 刷题状态&#xff1a;1刷 新知识&#xff1a; 解题过程 思考 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,4,5] 输出&#xff1a;3 解释&#xff1a;3 &#xff0c;取路径 [4,2,1,3] 或…...

Java与数据库

目录 一.本文焦点&#xff1a; 二.数据库常用数据类型 三.对数据库操作 四.对数据库中的表操作 五.条件表达 六. 表查询操作进阶 1.多表连接查询 1&#xff09;交叉连接查询 2&#xff09;内连接&#xff08;取两表交集&#xff09; 3&#xff09;外连接 4&#xff09…...

MySQL表中数据基本操作

1.表中数据的插入&#xff1a; 1.insert insert [into] table_name [(column [,column]...)] values (value_list) [,(value_list)] ... 创建一张学生表&#xff1a; 1.1单行指定列插入&#xff1a; insert into student (name,qq) values (‘张三’,’1234455’); values左…...

基于GeoTools的GIS专题图自适应边界及高宽等比例生成实践

目录 前言 一、原来的生成方案问题 1、无法自动读取数据的Bounds 2、专题图高宽比例不协调 二、专题图生成优化 1、直接读取矢量数据的Bounds 2、专题图成果抗锯齿 3、专题成果高宽比例自动调节 三、总结 前言 在当今数字化浪潮中&#xff0c;地理信息系统&#xff08;…...

蓝桥与力扣刷题(蓝桥 数字三角形)

题目&#xff1a; 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径&#xff0c;把路径上面的数加起来可以得到一个和&#xff0c;你的任务就是找到最大的和&#xff08;路径上的每一步只可沿左斜线向下或右斜线向下走&#xff09;。 输入描述…...

6. PromQL的metric name(在node exporter复制下来交给AI解释的)

目录 前言&#xff1a; Go 运行时指标&#xff1a; Go 内存统计指标&#xff1a; CPU 指标&#xff1a; 内存指标&#xff1a; 磁盘指标&#xff1a; 网络指标&#xff1a; 系统指标&#xff1a; 前言&#xff1a; 写这个得目的是为了后续方便查询&#xff0c;因为在pro…...

Windows设置目录及子目录大小写不敏感暨git克隆报错同名文件已存在的解决办法

在Windows系统中设置目录及其子目录为大小写不敏感&#xff0c;可以通过以下步骤完成&#xff1a; 步骤说明&#xff1a; 以管理员身份运行命令提示符或PowerShell 右键点击“开始”菜单&#xff0c;选择“命令提示符&#xff08;管理员&#xff09;”或“Windows PowerShell&…...

关于tresos Studio(EB)的MCAL配置之GPT

概念 GPT&#xff0c;全称General Purpose Timer&#xff0c;就是个通用定时器&#xff0c;取的名字奇怪了点。定时器是一定要的&#xff0c;要么提供给BSW去使用&#xff0c;要么提供给OS去使用。 配置 General GptDeinitApi控制接口Gpt_DeInit是否启用 GptEnableDisable…...

VScode 中文符号出现黄色方框的解决方法

VScode 中文符号出现黄色方框的解决方法 我的vscode的python多行注释中会将中文字符用黄色方框框处&#xff1a; 只需要打开设置搜索unicode&#xff0c;然后将这一项的勾选取消掉就可以了&#xff1a; 取消之后的效果如下&#xff1a; 另一种情况&#xff1a;中文显示出现黄色…...

WordPress使用(3)

前面文章讲述了如何利用docker进行wordpress系统的安装及相关设置&#xff0c;本文将介绍如何进行站点数据和数据库数据的备份。 1. 备份数据库 # 进入mysql容器内部 docker exec -it mysqlwp bash# 使用mysqldump 命令导出数据库 mysqldump -u root -p wordpress > wordp…...

Shell编程概述与Shell变量

目录 一、Shell编程基础 1.1、Shell脚本使用场景 1.2、Shell脚本的格式 1.3、Shell脚本的执行 1.4、Shell脚本错误调试 二、 重定向与管道符 2.1、重定向 2.2、管道符 三、Shell变量 3.1、变量分类 3.2、特殊符号 3.3、整数运算 3.4、read 3.5、局部变量与全局变量…...

使用QT + 文件IO + 鼠标拖拽事件 + 线程 ,实现大文件的传输

第一题、使用qss&#xff0c;通过线程&#xff0c;使进度条自己动起来 mythread.h #ifndef MYTHREAD_H #define MYTHREAD_H#include <QObject> #include <QThread> #include <QDebug>class mythread : public QThread {Q_OBJECT public:mythread(QObject* …...

【电路笔记】-时序逻辑电路

时序逻辑电路 文章目录 时序逻辑电路1、概述2、时序逻辑的分类3、时序逻辑SR触发器4、NAND门SR触发器5、正NAND门SR触发器6、NOR门SR触发器7、时序逻辑作为开关去抖电路8、门控或时钟SR触发器时序逻辑电路使用触发器作为存储元件,其输出取决于输入状态。 1、概述 与组合逻辑电…...

随机树算法 自动驾驶汽车的路径规划 静态障碍物(Matlab)

随着自动驾驶技术的蓬勃发展&#xff0c;安全、高效的路径规划成为核心挑战之一。快速探索随机树&#xff08;RRT&#xff09;算法作为一种强大的路径搜索策略&#xff0c;为自动驾驶汽车在复杂环境下绕过静态障碍物规划合理路径提供了有效解决方案。 RRT 算法基于随机采样思想…...

【AI深度学习基础】PyTorch初探

引言 PyTorch 是由 Facebook 开源的深度学习框架&#xff0c;专门针对 GPU 加速的深度神经网络编程&#xff0c;它的核心概念包括张量&#xff08;Tensor&#xff09;、计算图和自动求导机制。PyTorch作为Facebook开源的深度学习框架&#xff0c;凭借其动态计算图和直观的API设…...

探索.NET 10 的新特性,开发效率再升级!

前言 最近&#xff0c;.NET 10 发布啦&#xff0c;作为长期支持&#xff08;LTS&#xff09;版本&#xff0c;接下来的 3 年里它会给开发者们稳稳的幸福。今天咱就来唠唠它都带来了哪些超实用的新特性。可在指定链接下载。 新特性 下面将介绍了.NET 10的新特性&#xff0c;其…...

< 自用文儿 > CertBot 申请 SSL 证书 使用 challenge 模式 避开防火墙的阻挡

环境&#xff1a; 腾讯 VPS 腾讯会向你销售 SSL &#xff0c; 这个本是免费的。CertBot 默认申请证书要用到 80 端口&#xff0c;会蹭边什么什么条款&#xff0c;备案法律来阻止80端口的通讯&#xff0c;没有网站也一样被阻拦。 通过腾讯买的域名&#xff1a; bestherbs.cn …...

系统架构评估方法-ATAM方法

架构权衡分析方法(Architecture Tradeoff Analysis Method,ATAM) 是在SAAM的基础上 发展起来的&#xff0c;主要针对性能、实用性、安全性和可修改性&#xff0c;在系统开发之前&#xff0c;对这些质量属性 进行评价和折中。 (1)特定目标。 ATAM的目标是在考虑多个相互影响的质…...

deepseek在pycharm 中的配置和简单应用

对于最常用的调试python脚本开发环境pycharm&#xff0c;如何接入deepseek是我们窥探ai代码编写的第一步&#xff0c;熟悉起来总没坏处。 1、官网安装pycharm社区版&#xff08;免费&#xff09;&#xff0c;如果需要安装专业版&#xff0c;需要另外找破解码。 2、安装Ollama…...

硬通货用Deekseek做一个Vue.js组件开发的教程

安装 Node.js 与 Vue CLI‌ npm install -g vue/cli vue create my-vue-project cd my-vue-project npm run serve 通过 Vue CLI 可快速生成项目骨架&#xff0c;默认配置适合新手快速上手 目录结构‌ src/ ├── components/ # 存放组件文件 │ └── …...