FPGA与STM32_FSMC总线通信实验

FPGA与STM32_FSMC总线通信实验

  • 内部存储器IP核的参数设置
  • 创建IP核
  • FPGA代码
  • STM32标准库的程序

STM32F407 上自带 FSMC 控制器,通过 FSMC 总线的地址复用模式实现STM32 与 FPGA 之间的通信,FPGA 内部建立 RAM 块,FPGA 桥接 STM32 和 RAM 块,通过 FSMC 总线从 STM32 向 RAM 块中写入数据(数据为 0 到 511),然后读取 RAM出来的数据并进行验证。原理图如下图所示:

内部存储器IP核的参数设置

单端口RAM参数介绍
在这里插入图片描述
在这里插入图片描述

创建IP核

请添加图片描述
①框是设置输出数据端口的位宽,②框是设置存储器容量的大小,这两个选项大家可根据实际的设计进行设置。这里我们设置数据位宽 16bit,存储容量为 512words,即我们设置的 RAM 的最大存储量为 512 个 16bit 数据。
③框是存储单元类型的选择,这里我们保持 Auto(软件自动选择)即可。
④框中是选择使用的时钟模式,可选择单时钟或双时钟。选择单时钟时:用一个时钟信号控制存储块的所有寄存器。选择双时钟时:输入时钟控制地址寄存器,输出时钟控制数据输出寄存器。大家可根据设计需求进行选择,这里我们选择默认选项 Single clock(单时钟)。

设置完之后点击 Next 进入下一界面:
请添加图片描述
①框是选择是否输出“q”输出寄存器。这里把输出端口的寄存器去掉(如果不去掉的话,就会使输出延迟一拍。如果没有特别的需求的话我们是不需要延迟这一拍的,所以这里我们把它去掉)。
②框是询问我们是否选择为时钟信号创建响应的使能信号,这里我们不需要,不勾选。
③框是询问我们为端口A创建字节使能,这里我们不需要,不勾选。
④框是选择是否创建“aclr”异步复位信号以及是否创建“rden”读使能信号,大家可根据实际的设计需求进行勾选,这里我们把它们都勾选上。设置完之后点击 Next 进入下一界面:

请添加图片描述
如上图所示,是进行 Read During Write Operation 项配置,选择某个地址即将被写入数据时读该地址的数据输出类型:有 Don’t Care(不关心)、 New Data(写入的新数据)和Old Data(原有数据),我们保持默认的 New Data 即可,也就是说,某个地址将被写入新数据时,同时进行读操作会读出新的数据。点击 Next 进入下一页面:
请添加图片描述
①框是选择是否为存储器配置初始化文件,与 ROM 不同的是,RAM 可以选择不配置初始化文件,这里我们选择不配置初始化文件。
②框是选择是否允许系统内存储器内容编辑器在于与系统时钟无关的情况下捕获和更新存储器的内容,这里我们不勾选。
设置完后点击 Next 进入下一界面:

请添加图片描述
如上图所示,该界面没有什么要配置的参数,但显示了我们在仿真 ROM IP 核时所需要的 Altera 仿真库,这里提示了我们单独使用第三方仿真工具时需要添加名为“altera_mf”的库。这里保持默认,直接点击“Next”。

请添加图片描述
RAM 输出的文件,除了灰色必选文件,默认还勾选上了rom_256x8_bb.v,这里我们去掉 rom_256x8_bb.v 文件,加入my_ram_ints.v(例化模板文件)即可。最后点击“Finish”完成整个 IP 核的创建。接下来 Quartus II 软件会在我们创建的 IP 核文件目录下生成 RAM IP 文件。

FPGA代码

使用RAM IP核构成FSMC,可以从示意图中看出 我们恰好对得上,需要地址线和数据线、读写使能线以及,将IP核的分配到实在的引脚
模块

FSMC模块

 module FSMC_Ctrl(
	ab,
	db,
	wrn,
	rdn,
	csn,
	PLL_100M,
	RST_n,
	nadv
 	);
	
	input [8:0]ab;	//地址
	inout [15:0]db;	//数据
	input wrn;		//写使能
	input rdn;		//读使能
	input csn;		//使能
	input PLL_100M;	//时钟
	input RST_n; 	//复位
	input nadv; 	//复用功能
	
	wire rd;
	wire wr;
	
	assign rd = (csn | rdn);//使能和读使能共同有效时
	assign wr = (csn | wrn);//使能和写使能共同有效时
	
	wire [15:0]DB_OUT;
	
	assign db = !rd ? DB_OUT : 16'hzzzz;//在读数据的时候,将端口全部设置成高阻态

	reg wr_clk1,wr_clk2;
	
	always @(posedge PLL_100M or negedge RST_n)
		begin
			if(!RST_n)
				begin
					wr_clk1 <= 1'd1;
					wr_clk2 <= 1'd1;
				end
			else
				{wr_clk2,wr_clk1} <= {wr_clk1,wr};	//提取写时钟
		end
		
	wire clk = (!wr_clk2 | !rd);
						
my_ram      u1(											//ram块例化
					.address(ab),
					.clock(clk),
					.data(db),
					.wren(!wr),
					.rden(!rd),
					.q(DB_OUT),
					);
	
	
endmodule

复位模块

//--------------------Timescale------------------------------//
`timescale 1 ns / 1 ps

//--------------------RST_Ctrl------------------------//
module RST_Ctrl(
				input FPGA_CLK,	//输入板载晶振FPGA_CLK,25M
				output RST_n			//输出全局复位信号
				);
//--------------------RST_n----------------------------------//
	reg [3:0] cnt_rst = 4'd0;
	always @(posedge FPGA_CLK)
		if (cnt_rst == 4'd10)
			cnt_rst <= 4'd10;
		else
			cnt_rst <= cnt_rst + 1'd1;

	assign RST_n = (cnt_rst == 4'd10);//复位信号,10个周期后RST_n为1

//--------------------endmodule------------------------------//
endmodule

顶层文件

//-------------------------Timescale----------------------------//
`timescale 1 ns / 1 ps
//--------------------FSMC_SIG---------------------//
module FSMC_INDEP(
	FPGA_CLK,	//输入板载晶振GPGA_CLK,25M
	FPGA_LEDR,
	FPGA_LEDG,
	FPGA_LEDB,
	WR,			//FSMC写信号
	RD,			//FSMC读信号
	CS0,			//FSMC片选
	A,				//FSMC地址总线
	DB,			//FSMC数据总线
	NADV,			//FSMC的NADV
	);

	input FPGA_CLK,NADV;
	input WR,RD,CS0;
	inout [15:0]DB;
	input [24:16]A;
	output FPGA_LEDB,FPGA_LEDG,FPGA_LEDR;
	
	assign FPGA_LEDR = 1'd1;
	assign FPGA_LEDG = 1'd0;
	assign FPGA_LEDB = 1'd1;
//-------------------------MY_PLL-------------------------------//
	wire PLL_100M;
	MY_PLL 				U1(
								.inclk0(FPGA_CLK),
								.c0(PLL_100M)
								);//例化MY_PLL模块,输出50M时钟
//------------------------RST_Ctrl-----------------------------//
	wire RST_n;
	RST_Ctrl				U2(
								.FPGA_CLK(FPGA_CLK),
								.RST_n(RST_n)
								);	//例化RST_Ctrl模块,输出全局复位信号RST_n

//-------------------------FSMC_Ctrl ------------------------------//
	FSMC_Ctrl			U3(									//FSMC总线测试模块
								.ab(A[24:16]),
								.db(DB),
								.wrn(WR),
								.rdn(RD),
								.csn(CS0),
								.PLL_100M(PLL_100M),
								.RST_n(RST_n),
								.nadv(NADV)
								);
								
//------------------------enmodule ---------------------------//

endmodule

STM32标准库的程序

fsmc.h

//------------------------define---------------------------//
#ifndef __fsmc_h__
#define __fsmc_h__

//---------------------Include files-----------------------//

//----------------------- Define --------------------------//
#define fpga_write(offset,data)	*((volatile unsigned short int *)(0x60000000 + (offset << 17))) = data

#define fpga_read(offset)	*((volatile unsigned short int *)(0x60000000 + (offset << 17)))

//----------------- Typedef -----------------------------//
typedef struct{
	int (* initialize)(void);
}FSMC_T;

//---------------- Extern -------------------------------//

extern FSMC_T fsmc;

#endif //__fsmc_h__

fsmc.c

/*
 * FILE								: fsmc.c
 * DESCRIPTION				: This file is iCore3 fsmc driver.
 * Author							: XiaomaGee@Gmail.com
 * Copyright					:
 *
 * History
 * --------------------
 * Rev								: 0.00
 * Date								: 01/03/2016
 *
 * create.
 * --------------------
 */
//---------------- Include files ------------------------//
#include "..\include\fsmc.h"
#include "..\fwlib\inc\stm32f4xx_rcc.h"
#include "..\fwlib\inc\stm32f4xx_gpio.h"
#include "..\fwlib\inc\stm32f4xx_fsmc.h"

//---------------- Function Prototype -------------------//
static int initialize(void);

//---------------- Variable -----------------------------//
FSMC_T fsmc = {
	.initialize = initialize
};

//-----------------Function------------------------------//
/*
 * Name										: initialize
 * Description						: ---
 * Author									: XiaomaGee.
 *
 * History
 * ----------------------
 * Rev										: 0.00
 * Date										: 01/03/2016
 *
 * create.
 * ----------------------
 */
static int initialize(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  p;
	
	//时钟使能
	RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOG, ENABLE);
	
	//IO初始化
	GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_FSMC);
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD, GPIO_PinSource3, GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD, GPIO_PinSource6, GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD, GPIO_PinSource13, GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 |
																GPIO_Pin_6 | GPIO_Pin_7 |	GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 |
																GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
	GPIO_Init(GPIOD, &GPIO_InitStructure);

	GPIO_PinAFConfig(GPIOE, GPIO_PinSource2 , GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE, GPIO_PinSource3 , GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE, GPIO_PinSource4 , GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE, GPIO_PinSource5 , GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE, GPIO_PinSource6 , GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE, GPIO_PinSource7 , GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE, GPIO_PinSource8 , GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE, GPIO_PinSource9 , GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE, GPIO_PinSource10, GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE, GPIO_PinSource11, GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE, GPIO_PinSource12, GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE, GPIO_PinSource13, GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE, GPIO_PinSource14, GPIO_AF_FSMC);
	GPIO_PinAFConfig(GPIOE, GPIO_PinSource15, GPIO_AF_FSMC);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 |
																GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
	GPIO_Init(GPIOE, &GPIO_InitStructure);
	
	GPIO_PinAFConfig(GPIOG, GPIO_PinSource13, GPIO_AF_FSMC);
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
	GPIO_Init(GPIOG, &GPIO_InitStructure);
	
	//FSMC初始化
  p.FSMC_AddressSetupTime = 1;
  p.FSMC_AddressHoldTime = 0;
  p.FSMC_DataSetupTime = 4;
  p.FSMC_BusTurnAroundDuration = 0;
  p.FSMC_CLKDivision = 0;
  p.FSMC_DataLatency = 0;
  p.FSMC_AccessMode = FSMC_AccessMode_A;

  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Enable;
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;  
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;

  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); 

  //FSMC Bank1_SRAM1 Bank使能
	FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); 

	return 0;
}

led.c

//--------------------------- Include ---------------------------//
#include "..\include\led.h"
#include "..\fwlib\inc\stm32f4xx_gpio.h"
#include "..\fwlib\inc\stm32f4xx_rcc.h"

//--------------------- Function Prototype ----------------------//
static int initialize(void);

//--------------------------- Variable --------------------------//
LED_T led = {
	.initialize = initialize
};
//--------------------------- Function --------------------------//
/*
 * Name                : initialize
 * Description         : ---
 * Author              : ysloveivy.
 *
 * History
 * --------------------
 * Rev                 : 0.00
 * Date                : 01/03/2016
 * 
 * create.
 * --------------------
 */
static int initialize(void)
{
	GPIO_InitTypeDef   GPIO_uInitStructure;

	//LED IO初始化
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOI,ENABLE);
	GPIO_uInitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;    //设置连接三色LED灯的IO端口
	GPIO_uInitStructure.GPIO_Mode = GPIO_Mode_OUT;                          //设置端口为输出模式
	GPIO_uInitStructure.GPIO_OType = GPIO_OType_PP;                         //推挽输出
	GPIO_uInitStructure.GPIO_PuPd = GPIO_PuPd_UP;                           //上拉
	GPIO_uInitStructure.GPIO_Speed = GPIO_Speed_100MHz;                     //设置速度为第三级

	GPIO_Init(GPIOI,&GPIO_uInitStructure);

	//PI5、PI6、PI7接三色LED灯,PI5、PI6、PI7置高电位,灯熄灭
	GPIO_SetBits(GPIOI,GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);

	return 0;
}

led.h

#ifndef __led_h__
#define __led_h__

//--------------------------- Define ---------------------------//
//红灯<----->PI5
#define LED_RED_OFF GPIO_SetBits(GPIOI,GPIO_Pin_5)
#define LED_RED_ON  GPIO_ResetBits(GPIOI,GPIO_Pin_5)
//绿灯<----->PI6
#define LED_GREEN_OFF GPIO_SetBits(GPIOI,GPIO_Pin_6)
#define LED_GREEN_ON  GPIO_ResetBits(GPIOI,GPIO_Pin_6)
//蓝灯<----->PI7
#define LED_BLUE_OFF GPIO_SetBits(GPIOI,GPIO_Pin_7)
#define LED_BLUE_ON  GPIO_ResetBits(GPIOI,GPIO_Pin_7)

//----------------------- Include files ------------------------//

//-------------------------- Typedef----------------------------//
typedef struct {
	int (* initialize)(void);
}LED_T;

//--------------------------- Extern ---------------------------//
extern LED_T led;

#endif //__led_h__

主函数

int main(void)
{
	int i;
	unsigned short int fsmc_read_data;
	/*初始化*/
	led.initialize();
	fsmc.initialize();
	LED_GREEN_ON;
	
	/*绿色led亮,表示测试正常
	红色led亮,表示测试失败,测试结束*/
	while(1){
		for(i = 0;i < 512;i++){
		 fpga_write(i,i);                  //向FPGA写入数据
		}	
		for(i = 0;i < 512;i++){
			fsmc_read_data = fpga_read(i);   //从FPGA读数据
			if(fsmc_read_data != i){
				LED_GREEN_OFF;
				LED_RED_ON;
				while(1);
			}			
		}
	}
}

复用模式说明
在这里插入图片描述

地址和数据线复用时,NADV是访问地址和数据的区别信号,你只需要配合时序参数,芯片会自动识别的。

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

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

相关文章

Python喜羊羊

目录 系列文章 写在前面 绘图基础 画喜羊羊 写在后面 系列文章 序号文章目录直达链接表白系列1浪漫520表白代码https://want595.blog.csdn.net/article/details/1306668812满屏表白代码https://want595.blog.csdn.net/article/details/1297945183跳动的爱心https://want5…

Linux常用命令——bzmore命令

在线Linux命令查询工具 bzmore 查看bzip2压缩过的文本文件的内容 补充说明 bzmore命令用于查看bzip2压缩过的文本文件的内容&#xff0c;当下一屏显示不下时可以实现分屏显示。 语法 bzmore(参数)参数 文件&#xff1a;指定要分屏显示的.bz2压缩包。 在线Linux命令查询…

AD9371 Crossbar 和 I、Q数据 映射JESD204B传输层

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…

Win10文件资源管理器卡顿不流畅的解决方法

在Win10电脑中&#xff0c;用户点击打开文件资源管理器&#xff0c;发现文件资源管理器变得卡顿不流畅了&#xff0c;非常影响用户的操作效率。接下来小编给大家带来了最简单的解决方法&#xff0c;解决后用户再去操作Win10系统的文件资源管理器&#xff0c;就会发现变得顺畅不…

主成分分析法(PCA)的理解(附python代码案例)

目录 一、PCA简介二、举个例子三、计算过程&#xff08;公式&#xff09;3.0 题干假设3.1 标准化3.2 计算协方差矩阵3.3 计算特征值和特征值向量3.3 多重共线性检验&#xff08;可跳过&#xff09;3.4 适合性检验&#xff08;可跳过&#xff09;3.5 计算主成分贡献率及累计贡献…

第七章 :Spring Boot web开发常用注解(二)

第七章 :Spring Boot web开发常用注解(二) 前言 本章节知识重点:作者结合自身开发经验,以及觉察到的一个现象:Springboot注解全面理解和掌握的并不多,对注解进行了全面总结,共分两个章节,可以作为web开发工程师注解参考手册,SpringBoot常用注解大全,一目了然!。本…

【码银送书第十期】《强化学习:原理与Python实战》

目录 1.什么是人工智能对齐 2.为什么要研究人工智能对齐 3.人工智能对齐的常见方法 1.什么是人工智能对齐 人工智能对齐&#xff08;AI Alignment&#xff09;指让人工智能的行为符合人的意图和价值观。 人工智能系统可能会出现“不对齐”&#xff08;misalign&#xff09;的…

助力细胞分选,“量身定做”您的磁珠

免疫磁珠因结合了固化试剂特有的优点与免疫学反应的高度特异性而渗透到病理、生理、药理、微生物、生化以及分子遗传学等各个领域。其中&#xff0c;随着细胞分选技术的不断发展&#xff0c;免疫磁珠细胞分选技术已越来越受到研究者的认可&#xff0c;磁珠细胞分选可以从异质细…

linux:使用nc(netcat)命令进行端口检测,并使用Docker管理容器

需求&#xff1a; 循环检测IP:端口是否能正常连接&#xff0c;能连接则关闭docker服务&#xff0c;不能连接则开启docker服务实现&#xff1a;  &esmp;通过创建linux可执行shell脚本文件&#xff0c;再设置crontab调度执行实现上述需求。详细步骤如下&#xff1a; 创建sh…

matlab中的iddata函数的初步理解和使用程序举例

matlab中的iddata函数的初步理解和程序举例 一、iddata函数功能 iddata函数常用于系统识别分析领域数据分析方面。该函数在时域或频域中&#xff0c;将用于系统识别的输入输出数据及其特性数据的生成对象数据类型。即&#xff0c;可以使用iddata函数封装要标识的系统的输入和…

文件扩展名批量修改:txt文件扩展名批量修改为doc文档,高效办公的方法

在我们的日常工作中&#xff0c;经常需要处理大量的文本文件&#xff0c;这些文件可能以.txt为扩展名&#xff0c;而我们需要将其修改为.doc扩展名以方便进一步的操作。这种情况下&#xff0c;我们引用云炫文件管理器来将扩展名批量修改&#xff0c;提升办公的效率。在进行文件…

万物皆数——用matlab求解二阶微分方程

一、背景 毕达哥拉斯的“万物皆数”哲学观点表达了一个理念&#xff0c;即宇宙万物都可以通过数学语言来描述&#xff0c;数是万物的本原。 勾股定理就是毕达哥拉斯提出&#xff0c;因此在西方勾股定理也被叫做毕达哥拉斯定理。 工科类的专业&#xff0c;越到后面越感觉到数学…

从开源项目聊鱼眼相机的“360全景拼接”

目录 概述 从360全景的背景讲起 跨过参数标定聊透视变化 拼接图片后处理 参考文献 概述 写这篇文章的原因完全源于开源项目(GitHub参阅参考文献1)。该项目涵盖了环视系统的较为全貌的制作过程&#xff0c;包含完整的标定、投影、拼接和实时运行流程。该篇文章主要是梳理全…

Wincc flexible SMART v4 报警蜂鸣器的基本使用方法示例

Wincc flexible SMART v4 报警蜂鸣器的基本使用方法示例 WinCC flexible SMART V4 SP1 软件针对SMART LINE V4 面板新增了触发蜂鸣器报警功能,但要注意该功能仅支持固件版本为 4.0.1.0 及以上的设备。 可通过配置以下两个系统函数来触发蜂鸣器: 举例说明: 组态离散量报警,在…

xss 通过秘籍

终极测试代码 <sCr<ScRiPt>IPT>OonN"\/(hrHRefEF)</sCr</ScRiPt>IPT> 第一关&#xff08;没有任何过滤&#xff09; 使用终极测试代码&#xff0c;查看源码 发现没有任何过滤&#xff0c;直接使用javascrupt中的alert弹框 <script>aler…

树之二叉排序树(二叉搜索树)

什么是排序树 说一下普通二叉树可不是左小右大的 插入的新节点是以叶子形式进行插入的 二叉排序树的中序遍历结果是一个升序的序列 下面是两个典型的二叉排序树 二叉排序树的操作 构造树的过程即是对无序序列进行排序的过程。 存储结构 通常采用二叉链表作为存储结构 不能 …

口水战,余承东从没输过,小鹏最终只能低头和解

小鹏汽车创始人何小鹏近日发言称与余承东握手言和&#xff0c;感谢余总的大度&#xff0c;还表示与余承东探讨了技术路线&#xff0c;双方成为好朋友&#xff0c;可以看出这场口水战最终的赢家还是余承东。 这场口水战先以何小鹏吐槽友商的AEB误触太多&#xff0c;还声言99%是假…

基于springboot实现家具商城管理系统项目【项目源码】计算机毕业设计

基于springboot实现家具商城管理系统演示 Java语言简介 Java是由SUN公司推出&#xff0c;该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称&#xff0c;也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备了显著的…

VMware部署CentOS7

一、创建虚拟机 1、点击新建虚拟机 2、选择自定义 下一步 3、点击下一步 4、选择稍后安装操作系统 5、选择linux 下一步 6、选择要安装的centos 版本 这里选择centos7 7、自定义虚拟机名称 设置虚拟机运行空间 8、配置处理器&#xff0c;使用默认 1个处理器 1核 9、修改虚拟机…

企业级操作之STM32项目版本管理方法

在MCU开发过程中&#xff0c;有时候需要软件的迭代&#xff0c;比如从V1.9升级到V1.10&#xff0c;或者从V23.09.23升级到V23.09.24&#xff0c;我们常常通过手动改动字符串或者数组来实现这个功能&#xff0c;从现在开始&#xff0c;我们会使用Keil的内置宏__DATE__和__TIME__…