STM32应用开发进阶--SPI总线(7脚OLED中景园ss1306+HAL库_硬件SPI/软件模拟SPI)

实现目标

1、掌握SPI总线基础知识;

2、会使用软件模拟SPI总线和STM32硬件SPI总线;

3、 学会STM32CubeMX软件关于SPI的配置;

4、掌握OLED显示屏驱动;

5、具体目标:(1)用STM32硬件SPI驱动OLED显示“你好哇,王小波!”;(2)用软件模拟SPI总线驱动OLED显示“你好哇,王小波!”(只提供代码)。


一、SPI概述

1.1 SPI简介

        SPI串行外设接口(Serial Peripheral Interface)的缩写,是美国摩托罗拉公司(Motorola)最先推出的一种同步串行传输规范,也是一种单片机外设芯片串行扩展接口,是一种高速全双工同步通信总线。它被广泛地使用在 ADC、LCD 等设备与 MCU 间,要求通讯速率较高的场合。

        SPI有主、从两种模式(一主一从,一主多从),通常由一个主模块和一个或多个从模块组成(SPI不支持多主机),主模块选择一个从模块进行同步通信,从而完成数据的交换。提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),SPI接口的读写操作,都是由主设备发起,当存在多个从设备时,通过各自的片选信号进行管理。

1.2 SPI通信原理

SPI总线通信原理很简单,需要至少4根线,单向传输时3根线,它们是MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)和CS/SS(片选):

MOSI(Master Out Slave In):主设备 --->从设备(主设备发送,从设备接收)
MISO(Master In Slave Out):从设备 --->主设备(主设备接收,从设备发送)
SCLK(Serial Clock):传输时钟信号,用于主从设备的同步
CS      (chip select):片选信号,用于选择从设备

SPI主机与从机通讯实际上时两者的移位寄存器交换数据的过程,在时钟信号SCL的推动下,主机发送一位,从机也发送一位,两者互换数据,交换8次之后,便完成了一个字节的传输。

SPI数据通信的流程可以分为以下几步:

1、主设备发起信号,将CS/SS拉低,启动通信。

2、主设备通过发送时钟信号,来告诉从设备进行写数据或者读数据操作(采集时机可能是时钟信号的上升沿(从低到高)或下降沿(从高到低),因为SPI有四种模式,后面会讲到),它将立即读取数据线上的信号,这样就得到了一位数据(1bit)。

3、主机(Master)将要发送的数据写到发送数据缓存区(Menory),缓存区经过移位寄存器(缓存长度不一定,看单片机配置),串行移位寄存器通过MOSI信号线将字节一位一位的移出去传送给从机,同时MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区。

4、从机(Slave)也将自己的串行移位寄存器(缓存长度不一定,看单片机配置)中的内容通过MISO信号线返回给主机。同时通过MOSI信号线接收主机发送的数据,这样,两个移位寄存器中的内容就被交换。

例如,下图示例中简单模拟SPI通信流程,主机拉低NSS片选信号,启动通信,并且产生时钟信号,上升沿触发边沿信号,主机在MOSI线路一位一位发送数据0X53,在MISO线路一位一位接收数据0X46,如下图所示:

        说明:SPI只有主模式和从模式之分,没有读和写的说法,外设的写操作和读操作是同步完成的。若只进行写操作,主机只需忽略接收到的字节(虚拟数据);反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据

1.3 通信特性

1.3.1、设备选择
        SPI是单主设备(Single Master)通信协议,只有一支主设备能发起通信,当SPI主设备想读/写从设备时,它首先拉低从设备对应的SS线(SS是低电平有效)。接着开始发送工作脉冲到时钟线上,在相应的脉冲时间上,主设备把信号发到MOSI实现“写”,同时可对MISO采样而实现“读”。如下图所示:

1.3.2、设备时钟

SPI时钟特点主要包括:时钟速率时钟极性时钟相位三方面。

(1) 时钟速率
        SPI总线上的主设备必须在通信开始时候配置并生成相应的时钟信号。从理论上讲,只要实际可行,时钟速率就可以是你想要的任何速率,当然这个速率受限于每个系统能提供多大的系统时钟频率,以及最大的SPI传输速率。

(2)时钟极性
        根据硬件制造商的命名规则不同,时钟极性通常写为CKP或CPOL。时钟极性和相位共同决定读取数据的方式,比如信号上升沿读取数据还是信号下降沿读取数据。

        CKP可以配置为1或0。这意味着你可以根据需要将时钟的默认状态(IDLE)设置为高或低。极性反转可以通过简单的逻辑逆变器实现。你必须参考设备的数据手册才能正确设置CKP和CKE。

CKP = 0:时钟空闲IDLE为低电平 0;
CKP = 1:时钟空闲IDLE为高电平1。
(3)时钟相位
        根据硬件制造商的不同,时钟相位通常写为CKE或CPHA。顾名思义,时钟相位/边沿,也就是采集数据时是在时钟信号的具体相位或者边沿;

CKE = 0:在时钟信号SCK的第一个跳变沿采样;
CKE = 1:在时钟信号SCK的第二个跳变沿采样。

1.3.3  SPI的四种模式

        根据SPI的时钟极性时钟相位特性可以设置4种不同的SPI通信操作模式,它们的区别是定义了在时钟脉冲的哪条边沿转换(toggles)输出信号,哪条边沿采样输入信号,还有时钟脉冲的稳定电平值(就是时钟信号无效时是高还是低),详情如下所示:

            CPOL=0            CPOL=1
CPHA=0空闲态时,SCK处于低电平,数据采样是在第1个边沿,也就是SCK由低电平到高电平的跳变,所以数据采样是在上升沿(准备数据),(发送数据)数据发送是在下降沿。当空闲态时,SCK处于低电平,数据发送是在第2个边沿,也就是SCK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。
CPHA=1当空闲态时,SCK处于高电平,数据采集是在第1个边沿,也就是SCK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。当空闲态时,SCK处于高电平,数据发送是在第2个边沿,也就是SCK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。

(1)相位(CPHA):表示时钟线空闲时的状态;
(2)极性(CPOL):表示设备从数据线采样的时刻;

(3)四种模式编号:[00]:Mode0 、[01]:Mode1、[10]:Mode2  、[11]:Mode3 

黑线为采样数据的时刻,蓝线为SCK时钟信号

举个例子,下图是SPI Mode0读/写时序,可以看出SCK空闲状态为低电平,主机数据在第一个跳变沿被从机采样,数据输出同理。

下图是SPI Mode3读/写时序,SCK空闲状态为高电平,主机数据在第二个跳变沿被从机采样,数据输出同理。

1.4、多从机模式

多从机模式有两种:多片选菊花链片选

1.4.1多片选

通常,每个从机都需要一条单独的SS线。如果要和特定的从机进行通讯,可以将相应的NSS信号线拉低,并保持其他SS信号线的状态为高电平;如果同时将两个SS信号线拉低,则可能会出现乱码,因为从机可能都试图在同一条MISO线上传输数据,最终导致接收数据乱码。

1.4.2菊花链片选

菊花链的最大缺点是信号串行传输,一旦数据链路中的某设备发生故障的时候,它下面优先级较低的设备就不可能得到服务了。另一方面,距离主机越远的从机,获得服务的优先级越低,所以需要安排好从机的优先级,并且设置总线检测器,如果某个从机超时,则对该从机进行短路,防止单个从机损坏造成整个链路崩溃的情况。

1.5 SPI优缺点

1.5.1 优点

  • 高速数据传输速率;
  • 没有像I2C这样复杂的从设备寻址系统;
  • 分离的MISO和MOSI信号线,全双工通信;
  • 极其灵活的数据传输,不限于8位,它可以是任意大小的字;
  • 非常简单的硬件结构。从站不需要唯一地址(与I2C不同)。从机使用主机时钟,不需要精密时钟振荡器/晶振(与UART不同)。不需要收发器(与CAN不同)。

1.5.2 缺点

  • 使用四根信号线(I2C和UART使用两根信号线);
  • 无法确认是否已成功接收数据(I2C拥有此功能);
  • 没有任何形式的错误检查,如UART中的奇偶校验位;
  • 只允许一个主设备;
  • 没有硬件从机应答信号(主机可能在不知情的情况下无处发送);
  • 没有定义硬件级别的错误检查协议;
  • 与RS-232和CAN总线相比,只能支持非常短的距离;

二、STM32的SPI总线

2.1 STM32 的SPI

1.STM32内部集成了硬件SPI收发电路,可以由硬件自动执行时钟生成、数据收发等功能,减轻CPU的负担
2.可配置8位/16位数据帧、高位先行/低位先行
3.时钟频率: fPCLK / (2, 4, 8, 16, 32, 64, 128, 256)
4.支持多主机模型、主或从操作
5.可精简为半双工/单工通信
6.支持DMA
7.兼容I2S协议

2.2 STM32  SPI框图

2.3 SPI外设对应的引脚

不同型号的芯片基本都有3个SPI外设,其中SPI2,SPI3支持I2S通信因为I2S与SPI协议类似,所以他们共用一套逻辑就是上面的SPI框图。

三、OLED概述

3.1OLED简介

        OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
        OLED显示技术具有自发光的特性,采用非常薄的有机材料涂层和玻璃基板,当有电流通过时,这些有机材料就会发光,而且OLED显示屏幕可视角度大,并且能够节省电能,从2003年开始这种显示设备在MP3播放器上得到了应用。
        LCD都需要背光,而OLED不需要,因为它是自发光的。这样同样的显示,OLED效果要来得好一些。以目前的技术,OLED的尺寸还难以大型化,但是分辨率确可以做到很高。

7针OLED引脚
1.GND -- 电源地,接在板子上任意GND的引脚

2.VCC -- 电源正(3.3V~5V)接在板子上任意VCC引脚

3.D0 -- 对应的是时钟线(SCK或者SCLK)

4.D1 -- 对应的是数据线,也就是 MISO (主入从出) 或者 MOSI(主出从入)

5.RES -- 复位线,最开始是低电平,先拉低再拉高,可选择任意空IO口

6.DC -- 数据/命令控制线,高电平为1是数据线,低电平为0是命令线,可选择任意空IO口

7.CS -- 片选信号线,低电平有效,不用可以接地,用来选择从机的

四、原理图设计

五、STM32CubeMX 配置

5.1.SPI 配置(D0、D1)

(1)Mode: 模式
Full-Duplex Master 主机全双工模式
Full-Duplex Slave 从机全双工模式
Half-Duplex Master 主机半双工模式
Half-Duplex Slave 从机半双工模式
Receive Only Master 只接收主机模式
Receive Only Slave 只接收从机模式
Transmit Only Master 只发送从机模式   

(2)硬件NSS信号

  • 不使能
  • NSS输入信号
  • NSS输出信号

如果片选引脚没有连接硬件NSS信号,则需要选择软件片选

(3)基本参数

Frame Format帧格式:Motorola摩托罗拉 或 TI
Data size数据大小:8位 或 16位
First Bit:MSB/LSB先行
(4)时钟参数

波特率分配因子:

CPOL时钟极性:low or high
CPHA时钟相位:1 edge or 2 edge
(5)高级参数

CRC循环校验:使能/失能
NSS信号类型:软件

 5.2 其他管脚配置(RES、CS、DC)

PA1、PA4、PA6,配置为普通IO口,gpio_output

六、取模软件的应用(PCtoLCD2002完美版)

1. 打开软件,模式为(字符模式)

2. 点击菜单栏【选项】,打开字模选项

3.勾选【阴码点阵】、逐行式取模、逆向、C51格式。

4.输入“你好哇,王小波!”,进行取模。

软件下载地址:https://wwe.lanzoui.com/iIBEzs77lcf 

七、程序设计

7.1修改驱动函数

中景园官方驱动代码(标准库):https://download.csdn.net/download/luojuan198780/89319982

将中景园原版的 OLED_WR_Byte函数内容修改为含SPI发送函数:HAL_SPI_Transmit,两个函数如下:

//中景园原版
void OLED_WR_Byte(uint8_t dat,uint8_t cmd)
{	u8 i;			  if(cmd)OLED_DC_Set();else OLED_DC_Clr();		  OLED_CS_Clr();for(i=0;i<8;i++){			  OLED_SCL_Clr();if(dat&0x80)OLED_SDA_Set();else OLED_SDA_Clr();OLED_SCL_Set();dat<<=1;   }				 		  OLED_CS_Set();OLED_DC_Set(); }//修改后带HAL_SPI_Transmit的函数
void OLED_WR_Byte(uint8_t dat,uint8_t cmd)
{	uint8_t *data = &dat;		  if(cmd)OLED_DC_Set();elseOLED_DC_Clr();OLED_CS_Clr();HAL_SPI_Transmit(&hspi1, (uint8_t *)data, 1, 200); OLED_CS_Set();OLED_DC_Set();	
}

7.2修改 SPI的其它管脚

打开oled.h文件将CS  DC RES  标准库置高置低函数修改为HAL库函数

#define OLED_CS_Clr() HAL_GPIO_WritePin(CS_GPIO_Port,CS_Pin,GPIO_PIN_RESET)//RES
#define OLED_CS_Set() HAL_GPIO_WritePin(CS_GPIO_Port,CS_Pin,GPIO_PIN_SET)#define OLED_DC_Clr() HAL_GPIO_WritePin(DC_GPIO_Port,DC_Pin,GPIO_PIN_RESET)//DC
#define OLED_DC_Set() HAL_GPIO_WritePin(DC_GPIO_Port,DC_Pin,GPIO_PIN_SET)#define OLED_RES_Clr() HAL_GPIO_WritePin(RES_GPIO_Port,RES_Pin,GPIO_PIN_RESET)//RES
#define OLED_RES_Set() HAL_GPIO_WritePin(RES_GPIO_Port,RES_Pin,GPIO_PIN_SET)

7.3 增加  u8/u16/u32  ,并包含各个头文件

标准库是u8/u16/u32,HAL库是uint8_t/uint16_t/uint32_t .可以用下面方法实现转化,也可以直接ctr+h  替换。

typedef uint32_t  u32;
typedef uint16_t u16;
typedef uint8_t  u8;

7.4 添加中文字库

   在oledfont.h文件的  Hzk1[][32]={} 数组中添加下列“你好哇,王小波!”字模

{0x00,0x80,0x60,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,0x01,0x00,0x00,0xFF,0x00,0x10,0x0C,0x03,0x40,0x80,0x7F,0x00,0x01,0x06,0x18,0x00},/*"你",11*/
{0x10,0x10,0xF0,0x1F,0x10,0xF0,0x00,0x80,0x82,0x82,0xE2,0x92,0x8A,0x86,0x80,0x00,0x40,0x22,0x15,0x08,0x16,0x61,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00},/*"好",12*/
{0x00,0xFC,0x04,0x04,0xFC,0x00,0x40,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x40,0x00,0x00,0x0F,0x04,0x04,0x0F,0x00,0x40,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x40,0x00},/*"哇",13*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",14*/
{0x00,0x02,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00},/*"王",15*/
{0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x20,0x40,0x80,0x00,0x00,0x08,0x04,0x03,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x01,0x0E,0x00},/*"小",16*/
{0x10,0x60,0x02,0x0C,0xC0,0x00,0xF8,0x88,0x88,0x88,0xFF,0x88,0x88,0xA8,0x18,0x00,0x04,0x04,0x7C,0x03,0x80,0x60,0x1F,0x80,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00},/*"波",17*/
{0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",18*/

7.5 延时函数替换

将驱动函数中的delay_ms延时函数替换为HAL_Delay 函数。删除头文件#include "delay.h"与
#include "sys.h"

HAL_Delay(200);//delay_ms(200);

7.6 OLED初始化,显示设计

  /* USER CODE BEGIN 2 */OLED_Init();//oled初始化OLED_ColorTurn(0);//0正常显示,1 反色显示OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示/* USER CODE END 2 */while (1){OLED_ShowChinese(0,16,11,16,1);//你OLED_ShowChinese(16,16,12,16,1);//好OLED_ShowChinese(32,16,13,16,1);//哇OLED_ShowChinese(48,16,14,16,1);//,OLED_ShowChinese(64,16,15,16,1);//王OLED_ShowChinese(80,16,16,16,1);//小OLED_ShowChinese(96,16,17,16,1);//波	OLED_ShowChinese(112,16,18,16,1);//!		  OLED_Refresh();HAL_Delay(500);OLED_Clear();}

八、实验效果


总结

最终版程序(HAL硬件SPI):https://gitee.com/luojaun/qianrushi/tree/master/

最终版程序(HAL软件模拟SPI):https://gitee.com/luojaun/qianrushi

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

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

相关文章

抽烟行为检测:从传统巡查到智能算法

在当前人工智能和计算机视觉技术的迅猛发展下&#xff0c;基于视觉分析的抽烟行为检测算法成为一种高效的技术手段。此类算法通常依赖于深度学习模型&#xff0c;特别是卷积神经网络&#xff08;CNN&#xff09;&#xff0c;通过对摄像头捕捉的视频流进行实时分析&#xff0c;能…

在旧版 Nginx 官方 Dockerfile 上集成第三方模块的探索

问题背景 线上生产环境用的 nginx 1.21, 然后由于新功能引入的一个问题&#xff0c;需要使用第三方模块 ngx_http_subs_filter_module&#xff0c;目的是使用正则表达式来移除响应结果中的某些数据。 由于这个客户的环境非常重要&#xff0c;组内的大哥们也不敢随便升级 ngin…

网络安全、信息安全、数据安全的定义与区别

信息安全 信息安全是指信息的保密性、完整性、可用性和真实性的保持。从定义角度来说&#xff0c;信息安全没有严格标准定义&#xff0c;但从信息安全涉及的内容出发&#xff0c;信息安全确保信息存储或传输中的信息&#xff0c;不被他人有意或无意的窃取与破坏。这里的“信息”…

Vue3+ts(day07:pinia)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈&#xff08;笔记是根据b站上学习的尚硅谷的前端视频【张天禹老师】&#xff0c;记录一下学习笔记&#xff0c;用于自己复盘&#xff0c;有需要学…

ENVI光谱识别指导采矿管理者监测铜矿分布

圣地亚哥SRGIS的GIS专家Chile需要利用影像光谱信号勘察Chuquicamata的铜矿分布。 解决方案 Chuquicamata是世界上最大的斑岩铜矿分布区。SRGIS发现西部地区只有有限的矿物和贫瘠的岩石&#xff0c;但东部有铜矿分布。为了进一步测定矿藏的情况&#xff0c;他们开发出一套程序&a…

NoSQL Redis配置与优化

一、关系数据库与非关系型数据库 1. 关系型数据库&#xff1a; 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上&#xff0c;一般面向于记录。 SQL 语句&#xff08;标准数据查询语言&#xff09;就是一种基于关系型…

redis核心面试题一(架构原理+RDB+AOF)

文章目录 0. redis与mysql区别1. redis是单线程架构还是多线程架构2. redis单线程为什么这么快3. redis过期key删除策略4. redis主从复制架构原理5. redis哨兵模式架构原理6. redis高可用集群架构原理7. redis持久化之RDB8. redis持久化之AOF9. redis持久化之混合持久化 0. red…

穷人如何翻身赚钱?不妨试试这5个冷门生意,干好了,收入相当不错

根据统计数据&#xff0c;我国月收入超过3000元的人口已超过4亿&#xff0c;这意味着仍有约10亿人的月收入低于3000元。正因为如此&#xff0c;网络上许多人都自嘲为“穷人”。 然而&#xff0c;穷人真的无法改变自己的命运吗&#xff1f;并非如此。对于渴望赚钱的穷人来说&am…

传统蓝牙模块BR/EDR与低功耗蓝牙模块有什么区别?

传统蓝牙模块BR/EDR与低功耗蓝牙模块有什么区别&#xff1f;下面跟随美迅物联网MesoonRF从多个维度来了解。   概述&#xff1a;低功耗蓝牙采用了高斯频移键控&#xff08;GFSK&#xff09;。这里我们先抛开蓝牙的协议&#xff0c;单纯从Radio的角度看收发通信&#xff0c;Ra…

【Crypto】Url编码

文章目录 Url编码解题感悟 Url编码 Url编码 搞定 小小flag&#xff0c;拿下&#xff01; 解题感悟 有点饿了…

图数据库助力供应链柔性升级

导读 当今市场环境受短视频等流媒体影响&#xff0c;任何风险事件在社交网络中传播速度极其迅速&#xff0c;留给企业的反应时间按分秒计&#xff0c;传统供应链的年度计划面对剧烈变化的市场环境已失去意义。此外&#xff0c;受近年局势动荡的影响&#xff0c;市场需求和供应…

APISIX-简单使用

APISIX-简单使用 这个工具还是很不错的&#xff0c;可视化的配置很清晰 &#xff0c; 想用NGINX的配置模式也是可以的&#xff0c;就是要去修改配置文件了。 APISIX&#xff0c;一个很不错的可视化工具&#xff0c;用来代替Nginx相当不错&#xff0c;可作为Nginx的平替方案&…

【Python进阶】主流电商平台数据分析||数据采集返回商品详情主题链接主图SKU数据

Python是一种高级编程语言&#xff0c;广泛应用于软件开发、数据分析、人工智能、科学计算等领域。在软件开发方面&#xff0c;Python在网站开发、网络编程、桌面软件开发等方面有着广泛的应用。在数据分析和人工智能领域&#xff0c;Python的各种库如NumPy、Pandas、Matplotli…

守护者:ThingsBoard物联网网关在温室环境监测中的应用

系统设计 智慧农业温室大棚系统由传感器及执行设备、数据传输网关、智慧农业温室大棚管理平台组成。 系统支持实时采集温室大棚内的空气温湿度、土壤温湿度、光照和二氧化碳等环境参数&#xff0c;根据农作物的生长需求自动控制温室中电器设备的启停&#xff0c;从而达到植物生…

【Linux】信号集及信号集操作函数

文章目录 一、信号集是什么&#xff1f;二、信号集操作函数1. sigemptyset2. sigfillset3. sigaddset4. sigdelset5. sigismember6. sigprocmask (仅用于读取或更改block表)7. sigpending (仅用于读取pending表) 一、信号集是什么&#xff1f; 对于每个进程, 都有三个信号集, …

k8s集群部署成功后某个节点突然出现notready状态解决办法

通过&#xff1a; kubectl get nodes 查看master1节点为not ready 通过查看日志&#xff1a; journalctl -f -u kubelet.service 看到这里 查看状态&#xff1a; systemctl status kubelet.service 重启一样会报错 执行&#xff1a; swapoff -a 执行后&#xff0c;重启…

pytorch深度学习-环境搭建

1.Anaconda下载&#xff08;首先安装Anaconda不需要先安装Python了&#xff01;&#xff09; 版本 3.11. Download Anaconda Distribution | Anaconda 1.2 跳过注册直接下载 2.安装 直接next, (Install for 可以选择All Users&#xff0c;我选择的是All Users) 点击默认选项…

Qt Designer 使用笔记

目录 qt designer安装 预览 Ctrl R 使用 Qt Designer 设计的ui文件可以通过以下命令转为.py文件 命令行脚本&#xff1a; pycharm工具栏配置&#xff1b; pyqt5也是可以的&#xff1a; 2.2 测试是否配置成功 设置背景颜色&#xff1a; ui收集 qt designer安装 pip ins…

JavaEE-网络初识

文章目录 一、网络背景1.1 起源1.2 国内网络的发展 二、关键概念2.1 网络2.2 设备2.3 ip地址与端口号 三、协议3.1 协议分层3.2 OSI七层模型3.3 TCP/IP五层模型3.4 数据传输过程的简单叙述 一、网络背景 1.1 起源 在国外大概时上世纪70年代左右&#xff0c;网络就出现了&…

U-Mail邮件系统取得多项适配认证,全面支持国产化信创环境

随着信息技术的发展&#xff0c;信息化建设越来越深入到社会各个领域&#xff0c;成为驱动经济社会发展的重要力量。在此背景下&#xff0c;我国正加快构建国家信息安全保障体系&#xff0c;实现自主可控&#xff0c;形成安全可靠的信息技术体系。这正是我们所说的“信创”&…