18 串口通讯

news2024/11/20 4:51:43

文章目录

  • 18.0 前言
  • 18.1 串口通讯协议简介
    • 18.1.1 物理层
  • 18.2 RT1052 的 LPUART 简介
  • 18.3 UART 功能框图
    • 18.3.1 中断控制
  • 18.4 UART 初始化结构体详解
    • 18.4.1 baudRate_Bps
    • 18.4.2 parityMode
    • 18.4.3 dataBitsCount
    • 18.4.4 isMsb
    • 18.4.5 stopBitCount
    • 18.4.6 txFifoWatermark与rxFifoWatermark
    • 18.4.7 enableRxRTS
    • 18.4.8 txCtsSource
    • 18.4.9 txCtsConfig
    • 18.4.10 rxIdleType
    • 18.4.11 rxIdleConfig
    • 18.4.12 enableTx与enableRx
  • 18.5 UART1 收发
    • 18.5.1 编程要点
    • 18.5.2 代码分析
      • 18.5.2.1 GPIO 和 UART 宏定义
      • 18.5.2.2 UART 初始化配置
        • 18.5.2.2.1 设置引脚的复用模式
        • 18.5.2.2.2 初始化串口相关 IOMUXC 的 MUX 复用配置
        • 18.5.2.2.3 配置串口参数
    • 18.5.3 字节发送函数
    • 18.5.4 字符串发送
    • 18.5.5 UART 中断服务函数
    • 18.5.6 主函数

18.0 前言

配合《IMXRT1050RM》第 39 章 LPUART 章节一起食用

18.1 串口通讯协议简介

18.1.1 物理层

在这里插入图片描述两个通讯设备的“DB9 接口”之间通过串口信号线建立起连接

  • 串口信号线中使用“RS-232 标准”传输数据信号

RS-232 电平标准的信号不能直接被控制器直接识别

  • 这些信号会经过一个“电平转换芯片”转换成控制器能识别的“TTL 校准”的电平信号

在这里插入图片描述
因为控制器一般使用 TTL 电平标准,所以常常会使用 MA3232 芯片对 TTL 及 RS-232 电平的信号进行互相转换。

18.2 RT1052 的 LPUART 简介

RT1052 芯片具有多达 8 个 LPUART 外设用于串口通讯。

  • Low Power Universal AsynchronousReceiver Transmitter 的缩写,即低功耗异步收发器

UART 是在 USART 基础上裁剪掉了同步通信功能,只支持异步通信。

  • 简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是 UART

UART 满足外部设备对工业标准 NRZ 异步串行数据格式的要求

  • 使用了小数波特率发生器,可以提供多种波特率
  • UART 支持异步单向通信和半双工单线通信
  • UART 支持使用 DMA,可实现高速数据通信

18.3 UART 功能框图

串口发送
在这里插入图片描述串口接收
在这里插入图片描述

18.3.1 中断控制

在这里插入图片描述

18.4 UART 初始化结构体详解

UART 初始化结构体 (fsl_lpuart.h)

1 typedef struct _lpuart_config {
2 uint32_t baudRate_Bps; // 波特率
3
4 /* 奇偶校验方式,无校验(默认值),奇校验,偶校验 */
5
6 lpuart_parity_mode_t parityMode;
7 /* 数据位位数 , 8 位 ( 默认值 ),7 位 */
8 lpuart_data_bits_t dataBitsCount;
9 bool isMsb; // 数据位顺序 , LSB ( 默认值 ) ,MSB
10
11 /* 如果两位长停止位是可用的并且 */
12 #if defined(FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT) &&
13 FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT
14 /* 停止位 ,1 位 ( 默认值 ),2 位 */
15 lpuart_stop_bit_count_t stopBitCount;
16 #endif
17
18 /*
19 发送接收 FIFO 的容量 ( 条目数 )FSL_FEATURE_LPUART_HAS_FIFO 为真,
20 则表示 FIFO 条目数不为零
21 */
22 #if defined(FSL_FEATURE_LPUART_HAS_FIFO) &&
23 FSL_FEATURE_LPUART_HAS_FIFO
24 uint8_t txFifoWatermark; //TX FIFO watermark 接收 FIFO 数量
25 uint8_t rxFifoWatermark; //RX FIFO watermark 发送 FIFO 数量
26 #endif
27 /* 如果支持硬件流控 */
28 #if defined(FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT) &&
29 FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT
30 bool enableRxRTS; // 使能接收硬件流控
31 bool enableTxCTS; // 使能发送硬件流控
32 /*
33 发送硬件流控信号源,串口的 CTS 引脚或者其他外部 I/O
34 */
35 lpuart_transmit_cts_source_t txCtsSource;
36 /* LPUART 获取 CTS 硬件流控状态配置 */
37 lpuart_transmit_cts_config_t txCtsConfig;
38 #endif
39 /* 空闲计数开始位置定义 . */
40 lpuart_idle_type_select_t rxIdleType;
41 /* 空载字符数量定义 */
42 lpuart_idle_config_t rxIdleConfig;
43 bool enableTx; // 使能发送 TX
44 bool enableRx; // 使能接收 RX
45 } lpuart_config_t;

18.4.1 baudRate_Bps

波特率设置。一般设置为 2400、9600、19200、115200。SDK 库函数会根据设定值完成具体寄存器的设置。

18.4.2 parityMode

校验方式选择:可选奇校验、偶校验、无校验。默认选择无校验。

18.4.3 dataBitsCount

数据帧字长,可选 8 位或 7 位。一般使用 8 数据位;默认是 8 位数据位。

18.4.4 isMsb

数据位顺序,MSB 表示先发送高位,LSB 表示先发送低位。默认是 LSB 模式,isMsb为 0。

18.4.5 stopBitCount

代码第 13 行:条件编译,判断是否支持长停止位,默认是支持的。所以 #if 与 #endif 之间的代码会被编译进工程。

  • stopBitCount:停止位设置,可选 1 个、2 个停止位,一般设置一位停止位,默认值为 1 位。

18.4.6 txFifoWatermark与rxFifoWatermark

代码第 23 行:条件编译,系统默认 FSL_FEATURE_LPUART_HAS_FIFO(用于定义是否使
用接收发送缓存)默认值为 1。#if 与 #endif 之间的代码会被编译进工程。

  • FIOF 是“First-InFirst-Out”的缩写,是一个先进先出的数据缓冲区。
  • 当收到的数据来不及处理则会存储到缓冲区,这样有效的避免数据的覆盖造成的数据丢失。提高串口的通信性能。

txFifoWatermark:发送 FIFO 数量,默认为 0。
rxFifoWatermark:接收 FIFO 数量,默认为 0。

18.4.7 enableRxRTS

代码第 29 行:条件编译,判断系统是否支持硬件控制流。默认是支持的。

  • enableRxRTS:使能接收硬件控制流,一般不使用硬件控制流。默认不使能。

18.4.8 txCtsSource

txCtsSource:发送硬件流控信号源,选择使用外部 I/O 引脚还是串口默认的 CTS 引脚。

18.4.9 txCtsConfig

txCtsConfig:CTS 硬件流控状态配置。

18.4.10 rxIdleType

rxIdleType:空闲计数开始位置定义,空闲计数从一个有效的起始位开始计数,或者在结束
位之后开始计数。

18.4.11 rxIdleConfig

rxIdleConfig:空载字符数量定义,当串口收到一定数量的空载字符(由 rxIdleConfig 指定数
量)设置串口的接口空闲标志。

  • rxIdleType 设置什么时后开始记录空载字符,rxIdleConfig 设置记录多少个空载字符后设置接收空闲标志。

18.4.12 enableTx与enableRx

enableTx:使能发送。
enableRx:使能接收。

18.5 UART1 收发

CH340G 是一个 USB 总线的转接芯片,实现 USB 转 UART、USB 转 IrDA 红外或者 USB 转打印机接口

18.5.1 编程要点

(1) 使能串口的接收和发送功能;
(2) 初始化 GPIO,并将 GPIO 复用到 UART 上;
(3) 配置 UART 参数;
(4) 配置中断控制器并使能 USART 接收中断;
(5) 在 UART 接收中断服务函数实现数据接收和发送

18.5.2 代码分析

18.5.2.1 GPIO 和 UART 宏定义

1 /*********************************************************
2 * UART1 GPIO 端口、引脚号及 IOMUXC 复用宏定义
3 *********************************************************/
4 #define UART_RX_GPIO GPIO1
5 #define UART_RX_GPIO_PIN (13U)
6 #define UART_RX_IOMUXC IOMUXC_GPIO_AD_B0_13_LPUART1_RX
7
8 #define UART_TX_GPIO GPIO1
9 #define UART_TX_GPIO_PIN (12U)
10 #define UART_TX_IOMUXC IOMUXC_GPIO_AD_B0_12_LPUART1_TX
11
12 /*******************************************
13 * UART1 串口号、中断服务函数、中断号重定义
14 ********************************************/
15
16 #define DEBUG_UARTx LPUART1
17 #define DEBUG_UART_IRQ LPUART1_IRQn
18 #define DEBUG_UART_IRQHandler LPUART1_IRQHandler
19
20 /***********************************************
21 * UART1 串口配置参数定义,默认参数如下 :
22 *****************************************/
23 #define DEBUG_UART_BAUDRATE 115200U
24 #define DEBUG_UART_STOP_BIT kLPUART_OneStopBit
25 #define DEBUG_UART_ENABLE_SEND true
26 #define DEBUG_UART_ENABLE_RESIVE true
27
28 /********************************
29 * uart 引脚配置
30 **********************************/
31 #define UART_RX_PAD_CONFIG_DATA (SRE_0_SLOW_SLEW_RATE| \
32 DSE_6_R0_6| \
33 SPEED_1_MEDIUM_100MHz| \
34 ODE_0_OPEN_DRAIN_DISABLED| \
35 PKE_1_PULL_KEEPER_ENABLED| \
36 PUE_1_PULL_SELECTED| \
37 PUS_3_22K_OHM_PULL_UP| \
38 HYS_0_HYSTERESIS_DISABLED)
39 /* 配置说明 : */
40 /* 转换速率 : 转换速率慢
41 驱动强度 : R0/6
42 带宽配置 : medium(100MHz)
43 开漏配置 : 关闭
44 拉 / 保持器配置 : 使能
45 拉 / 保持器选择 : 上下拉
46 上拉 / 下拉选择 : 22K 欧姆上拉 ( 选择了保持器此配置无
47 效 )
48 滞回器配置 : 禁止 */
50 #define UART_TX_PAD_CONFIG_DATA (SRE_0_SLOW_SLEW_RATE| \
51 DSE_6_R0_6| \
52 SPEED_1_MEDIUM_100MHz| \
53 ODE_0_OPEN_DRAIN_DISABLED| \
54 PKE_1_PULL_KEEPER_ENABLED| \
55 PUE_0_KEEPER_SELECTED| \
56 PUS_3_22K_OHM_PULL_UP| \
57 HYS_0_HYSTERESIS_DISABLED)
58 /* 配置说明 : */
59 /* 转换速率 : 转换速率慢
60 驱动强度 : R0/6
61 带宽配置 : medium(100MHz)
62 开漏配置 : 关闭
63 拉 / 保持器配置 : 使能
64 拉 / 保持器选择 : 保持器
65 上拉 / 下拉选择 : 22K 欧姆上拉 ( 选择了保持器此配置无效 )
66 滞回器配置 : 禁止 */

18.5.2.2 UART 初始化配置

1 /**
2 * @brief 初始化 uart 相关 IOMUXC 的 PAD 属性配置
3 * @param 无
4 * @retval 无
5 */
6 void UART_IOMUXC_PAD_Config(void)
7 {
8 IOMUXC_SetPinConfig(UART_RX_IOMUXC, UART_RX_PAD_CONFIG_DATA);
9 IOMUXC_SetPinConfig(UART_TX_IOMUXC, UART_TX_PAD_CONFIG_DATA);
10 }
11
12 /**
13 * @brief 初始化 uart 引脚功能
14 * @param 无
15 * @retval 无
16 */
17 void UART_IOMUXC_MUX_Config(void)
18 {
19 /* RX 和 TX 引脚 */
20 IOMUXC_SetPinMux(UART_RX_IOMUXC, 0U);
21 IOMUXC_SetPinMux(UART_TX_IOMUXC, 0U);
22 }
23
24 /**
25 * @brief 初始化 uart 配置参数
26 * @param 无
27 * @retval 无
28 */
29 void UART_ModeConfig(void)
30 {
31 /* 定义串口配置参数结构体变量,
32 用于保存串口的配置信息 */
33 lpuart_config_t config;
34
35 /* 调用固件库函数得到默认的串口配置参数,
36 在默认的配置参数基础上修改 */
37 LPUART_GetDefaultConfig(&config);
38 config.baudRate_Bps = DEBUG_UART_BAUDRATE;// 波特率
39 // 是否允许接收数据
40 config.enableRx = DEBUG_UART_ENABLE_RESIVE;
41 // 是否允许发送数据
42 config.enableTx = DEBUG_UART_ENABLE_SEND;
43
44 /* 调用固件库函数,
45 将修改好的配置信息写入到串口的配置寄存器中 */
46 LPUART_Init(DEBUG_UARTx, &config, BOARD_DEBUG_UART_CLK_FREQ);
47
48 /* 允许接收中断 */
49 LPUART_EnableInterrupts(DEBUG_UARTx, kLPUART_RxDataRegFullInterruptEnable);
51 EnableIRQ(DEBUG_UART_IRQ);
52
53 }
54
55 /**
56 * @brief 初始化 uart, 并开启了收发功能
57 * @param 无
58 * @retval 无
59 */
60 void UART_Config(void)
61 {
	62 USART_IOMUXC_MUX_Config();
	63 USART_IOMUXC_PAD_Config();
	64 USART_ModeConfig();
65 }
18.5.2.2.1 设置引脚的复用模式

根据 TX,RX 对应的 PAD(LPUART1_TX 对应 GPIO_AD_B0_12,LPUART1_RX 对应GPIO_AD_B0_13) 可以在 fsl_iomuxc.h 文件中找到引脚功能 ID。

  • 将引脚功能 ID 作为实参,调用函数 void IOMUXC_SetPinMux(引脚功能 ID,0) 完成引脚复用模式的初始化。
18.5.2.2.2 初始化串口相关 IOMUXC 的 MUX 复用配置

GPIO 和 USART 宏定义第 10 行和 31~49 行所示

  • 这两个宏定义分别定义了 uart 引脚对应的功能 ID 和引脚配置参数。
  • 引脚配置参数包括了转换速率、驱动强度、带宽配置、开漏配置、拉/保持器配置、拉/保持器选择、上拉/下拉选择、滞回器配置。
18.5.2.2.3 配置串口参数

串口参数的配置使用到 LPUART 结构体,该结构体在上一小节 (UART 初始化结构体详解) 有过详细介绍。

  • 代码UART 初始化配置第 30~54 行所示。

特别提醒:如果串口外部没有接上拉电阻,则配置引脚时要配置为上拉模式。建议外接上拉电阻。

  • 因为 RT1052 最小的上拉电阻为 22K 欧姆,串口的上拉电阻一般为 4.7K 欧姆。

18.5.3 字节发送函数

字节发送函数 (bsp_uart.c)

1 void Uart_SendByte(LPUART_Type *base, uint8_t data)
2 {
3 LPUART_WriteByte( base, data);
4 while (!(base->STAT & LPUART_STAT_TDRE_MASK));
5 }
  • Uart_SendByte 函数用来发送一个字符,它实际是调用LPUART_WriteByte 函数。
  • 使用循环检测发送完成的事件标志来实现保证数据发送完成后才退出函数。

18.5.4 字符串发送

列表 5: 代码清单 18‑5 字符串发送函数 (bsp_uart.c)

1 void Uart_SendString( LPUART_Type *base, const char *str)
2 {
3 LPUART_WriteBlocking( base, (const uint8_t *)str, strlen(str));
4 }
  • Uart_SendString 函数用来发送一个字符串,它实际是调用 LPUART_WriteBlocking 函数(这是一个阻塞的发送函数,无需重复判断串口是否发送完成)发送每个字符,直到遇到空字符才停止发送。
  • strlen(str) 函数用于计算字符串长度。

18.5.5 UART 中断服务函数

UART 中断服务函数 (bsp_uart.c)

1 void DEBUG_UART_IRQHandler(void)
2 {
4 uint8_t ucCh;
5
6 /* 串口接收到数据 */
7 if ((kLPUART_RxDataRegFullFlag)&LPUART_GetStatusFlags(DEBUG_UARTx) )
8 {
9 /* 读取数据 */
10 ucCh = LPUART_ReadByte( DEBUG_UARTx );
11
12 /* 将读取到的数据写入到缓冲区 */
13 push_data_to_queue(&resive_fifo_struct,ucCh);
14 }
15
16 }

代码使能了 UART 接收中断

  • 当 UART 有接收到数据就会执行 DEBUG_UART_IRQHandler 函数。
  • 使用 if 语句来判断是否是真的产生 UART 数据接收这个中断事件
    • 如果是真的就使用 UART 数据读取函数读取数据赋值给 ucCh, 读取过程会软件清除接收中断标志位。
    • 最后再调用 UART 写函数 push_data_to_queue 把数据又发送给源设备。

18.5.6 主函数

列表 7: 代码清单 18‑7 主函数 (main.c)

1 int main(void)
2 {
3
4 /* 初始化内存保护单元 */
5 BOARD_ConfigMPU();
6 /* 初始化开发板引脚 */
7 BOARD_InitPins();
8 /* 初始化开发板时钟 */
9 BOARD_BootClockRUN();
10 /* 初始化调试串口 */
11 BOARD_InitDebugConsole();
12 /* 打印系统时钟 */
13 PRINTF("\r\n");
15 PRINTF("CPU: %d Hz\r\n", CLOCK_GetFreq(kCLOCK_CpuClk));
16 PRINTF("AHB: %d Hz\r\n", CLOCK_GetFreq(kCLOCK_AhbClk));
17 PRINTF("SEMC: %d Hz\r\n", CLOCK_GetFreq(kCLOCK_SemcClk));
18 PRINTF("SYSPLL: %d Hz\r\n", CLOCK_GetFreq(kCLOCK_SysPllClk));
19 PRINTF("SYSPLLPFD0: %d Hz\r\n", CLOCK_GetFreq(kCLOCK_
,→ SysPllPfd0Clk));
20 PRINTF("SYSPLLPFD1: %d Hz\r\n", CLOCK_GetFreq(kCLOCK_
,→ SysPllPfd1Clk));
21 PRINTF("SYSPLLPFD2: %d Hz\r\n", CLOCK_GetFreq(kCLOCK_
,→ SysPllPfd2Clk));
22 PRINTF("SYSPLLPFD3: %d Hz\r\n", CLOCK_GetFreq(kCLOCK_
,→ SysPllPfd3Clk));
23 PRINTF("\r\n");
24 /* 初始化 LED 引脚 */
25 LED_GPIO_Config();
26
27 /* 初始化 uart1*/
28 UART_Config();
29
30 /* 输出提示信息 */
31 Uart_SendString( DEBUG_UARTx," 这是一个串口中断接收回显实验 \r\n");
32 Uart_SendString( DEBUG_UARTx, "在接收中断服务函数中接收并发送收到的数据\r\n");
33 Uart_SendString( DEBUG_UARTx, "RGB 灯交替显示红色、绿色表示主循环正在运行\r\n
,→ ");
34 while (1) {
	35 /* 亮红灯 */
	36 RGB_RED_LED_ON;
	37 RGB_GREEN_LED_OFF
	38 delay(LED_DELAY_COUNT);
	39
	40 /* 亮绿灯 */
	41 RGB_RED_LED_OFF
	42 RGB_GREEN_LED_ON;
	43 delay(LED_DELAY_COUNT);
44 }
45
46 }

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

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

相关文章

计算机体系结构基础复习

1. 计算机系统可划分为哪几个层次,各层次之间的界面是什么? 你认为这样划分层次的意义何在? 答: 计算机系统可划分为四个层次,分别是:应用程序、 操作系统、 硬件系统、 晶体管四个大的层次。 注意把这四个层次联系起来的三个界面。各层次…

WIndows系统重装、备份与恢复实操问题笔记

一 windows重装 1.1 基本步骤 下载大白菜根据官网使用教程制作启动u盘从MSDN或者微软官网下载Windows镜像根据查询的快捷键进入BIOS系统,设置U盘为第一启动 重装 1.2 Windows 11 激活 微软其实在2023年9月20日的公告中宣布停掉免费升级,数字激活工具…

使用pygame实现简单的烟花效果

import pygame import sys import random import math# 初始化 Pygame pygame.init()# 设置窗口大小 width, height 800, 600 screen pygame.display.set_mode((width, height)) pygame.display.set_caption("Fireworks Explosion")# 定义颜色 black (0, 0, 0) wh…

YOLOv7涨点改进:多层次特征融合(SDI),小目标涨点明显,| UNet v2,比UNet显存占用更少、参数更少

💡💡💡本文全网独家改进:多层次特征融合(SDI),能够显著提升不同尺度和小目标的识别率 💡💡💡在YOLOv7中如何使用 1)iAFF加入Neck替代Concat; 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c ✨✨✨前沿最新计算机顶会复现 🚀🚀🚀YOL…

Linux远程登陆协议ssh

目录 一、SSH服务 1. ssh基础 2. 原理 3. 服务端配置 3.1 常用配置项 3.2 具体操作 3.2.1 修改默认端口号 3.2.2 禁止root用户登录 3.2.3 白名单列表 3.2.4 黑名单列表 3.2.5 使用秘钥对及免交互验证登录 3.2.6 免交互式登录 一、SSH服务 1. ssh基础 SSH&…

Microsoft Excel 直方图

Microsoft Excel 直方图 1. 数据示例2. 打开 EXCEL3. settings4. 单击直方图柱,右键“添加数据标签”References 1. 数据示例 2. 打开 EXCEL 数据 -> 数据分析 -> 直方图 3. settings 输入区域样本值、接受区域分类间距,输出选项选择“新工作表组…

玩转Mysql 八 (MySQ优化入门篇)

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。如有侵权,请留言,我及时删除! 前言: 一个高性能,稳定的数据库集群并不是指的某一特性优化,就…

3 - AOP

1. 快速入门 1.1 基本说明 AOP(aspect oriented programming) ,面向切面编程 切面类中声明通知方法: 前置通知:Before返回通知:AfterReturning异常通知:AfterThrowing后置通知:After环绕通知&#xff1…

并发List源码剖析

并发包中的并发List只有CopyOnWriteArrayList。 CopyOnWriteArrayList是一个线程安全的ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的,也就是使用了写时复制策略。 在CopyOnWriteArrayList的类图中,每个CopyOnWriteArrayList对…

(学习日记)2024.01.05:一份关于自行车定位的调研

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

电流检测方法

电路检测电路常用于:高压短路保护、电机控制、DC/DC换流器、系统功耗管理、二次电池的电流管理、蓄电池管理等电流检测等场景。 对于大部分应用,都是通过感测电阻两端的压降测量电流。 一般使用电流通过时的压降为数十mV~数百mV的电阻值&…

BLDC 电机和 PMSM 的结构区别

BLDC 电机和 PMSM 的结构类似,其永磁体均置于转子,并被定义为同步电机。在同步电机中,转子与定子磁场同步,即转子的旋转速度与定子磁场相同。它们的主要区别在于其反电动势(反 EMF)的形状。电机在旋转时充当…

NPS配置https访问web管理页面

因为NPS默认也支持http的访问,所以在部署完后就一直没在意这个事情。 因为服务器是暴露在公网内的,所以还是要安全一点才行。不然一旦远控的机器被破解了就很危险了 一、使用nginx反向代理访问 1、首先在nps的配置文件里关闭使用https选项,…

midjourney教程【--niji 5】

博客底部扫码加微信,免费领mj Niji Model Version 5还可以使用不同的美学使用--style选项,以实现独特的外观。试试 --style cute, --style scenic, --style original , or --style expressive mj,a boy sitting on the ground looking soci…

Logstash:迁移数据到 Elasticsearch

在生产环境中,不使用 Apache Kafka 等流平台进行数据迁移并不是一个好的做法。 在这篇文章中,我们将详细探讨 Apache Kafka 和 Logstash 的关系。 但首先让我们简单了解一下 Apache Kafka 的含义。 Apache Kafka 是分布式流平台,擅长实时数据…

计算机找不到vcomp140.dll怎样修复?马上教会你修复dll问题

在计算机系统运行过程中,遭遇“vcomp140.dll丢失”的场景并不少见,这一问题的出现往往伴随着软件无法正常启动、运行时错误提示或者系统性能下降等现象。具体场景可能包括但不限于:用户在尝试打开某个依赖于Visual C Redistributable库的应用…

有趣的事,讲给有趣的人听

哈哈哈,今天不写技术了,今天分享一下生活,技术我们什么时候都可以学,但是生活更值得我们现在就去更好的体验! 两年多的涤生大数据,认识了形形色色的小伙伴,陆续沟通下来6000多人,彼时…

代码随想录算法训练营第三十二天|122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II

题目&#xff1a;122.买卖股票的最佳时机II 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:122.买卖股票的最佳时机|| 题目链接&#xff1a;力扣题目链接 图释&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {// 查看…

【笔记】书生·浦语大模型实战营——第四课(XTuner 大模型单卡低成本微调实战)

【参考&#xff1a;tutorial/xtuner/README.md at main InternLM/tutorial】 【参考&#xff1a;(4)XTuner 大模型单卡低成本微调实战_哔哩哔哩_bilibili-【OpenMMLab】】 总结 学到了 linux系统中 tmux 的使用 了解了 XTuner 大模型微调框架的使用 pth格式参数转Hugging …

如何挖掘过期老域名并注册一个 DA 为 10 的高价值老域名

原文来源&#xff1a;https://guomuyu.com/registered-a-high-value-domain.html 最近有一些有意从事外贸的朋友阅读了《2024最新外贸建站&#xff1a;WordPress自建外贸独立站教程》这篇文章。然而&#xff0c;当他们尝试注册与自己所从事行业相关的域名时&#xff0c;却发现…