STM32外设AD/DA-基础及CubeMX配置

STM32外设AD/DA-基础及CubeMX配置

  • 一,什么是AD/DA
  • 二,基础概念
    • 1,模拟 vs 数字
    • 2,AD转换
        • 1,分辨率 (Resolution)
        • 2,参考电压 (Reference Voltage, Vref)
        • 3,采样率 (Sampling Rate)
    • 3,DA转换
        • 1,分辨率 (Resolution)
        • 2,参考电压 (Reference Voltage, Vref)
        • 3,转换速率与建立时间 (Settling Time)
        • 4,输出缓冲 (Output Buffer)
  • 三,硬件连接:捕捉模拟信号
    • 1,找到 ADC 输入引脚:
    • 2,连接模拟信号源:
    • 3,连接地线 (GND):
    • 4,(可选)连接 Vref:
  • 四,CobeMX配置
    • 1,模式和分辨率相关
        • 1,分辨率 (Resolution)
        • 2,数据对齐 (Data Alignment)
        • 3,转换模式 (Conversion Mode)
    • 2,时钟配置相关
        • 1,时钟来源与分频 (Clock Source & Prescaler)
        • 2,ADCCLK 与转换时间
    • 3,采样时间 (Sampling Time)
    • 4,扫描模式相关
        • 1,扫描转换模式 (Scan Conversion Mode)
        • 2,规则通道配置 (Regular Conversion Launch)
        • 3,扫描结束选择 (End of Conversion Selection - EOC)
        • 4,不连续转换模式 (Discontinuous Conversion Mode)
    • 5,外部触发配置
        • 1,定时器触发 (Timer Trigger):
        • 2,软件触发 (Software Trigger):
        • 3,外部引脚触发 (EXTI line x event):
    • 6,DMA 配置
        • 1,添加 DMA 请求 (Add DMA Request)
        • 2,DMA 通道配置 (DMA Request Settings)

一,什么是AD/DA

我们已经掌握了如何让单片机通过 UART 与外界"交流"。但是,现实世界充满了连续变化的模拟信号,比如温度、光线强度、声音大小等等。单片机内部处理的是离散的数字信号,如何让它们互相理解呢?
这时,ADC (Analog-to-Digital Converter, 模数转换器) 和 DAC (Digital-to-Analog Converter, 数模转换器) 就派上用场了!
ADC: 就像一位"翻译官",把现实世界的模拟语言(连续变化的电压)翻译成单片机能懂的数字语言(离散的数值)。

现实世界的模拟信号比如温度、光线强度、声音大小,其实都可以转化为连续的电压信号

DAC: 则反过来,把单片机的数字指令翻译成模拟世界的电压信号,用来控制模拟器件(比如驱动扬声器发出声音、控制电机速度等)。

这里A代表模拟,D代表数字,怎么记忆?
记住模拟和A的笔画相对数字和D多,就可以将二者关联起来,再记住AD就是A到D,DA就是D到A就行了

二,基础概念

1,模拟 vs 数字

想象一下调节收音机的音量旋钮和按计算器的数字键:

模拟 (Analog): 像音量旋钮,可以在一个范围内连续变化,有无限多个可能的音量值。现实世界的物理量大多是模拟的。
数字 (Digital): 像计算器的按键,只有有限的、离散的状态(0, 1, 2…)。计算机和单片机处理的是数字信号。
ADC 的任务就是把模拟信号"采样"并"量化"成数字值。

2,AD转换

1,分辨率 (Resolution)

分辨率决定了 ADC 能将模拟电压"切"成多少份,也就是它能区分多么细微的电压变化。通常用"位" (bits) 来表示。

例如,一个 12 位的 ADC,能表示 212=4096 个不同的数字级别。如果参考电压是 3.3V,那么它能分辨的最小电压变化大约是 3.3V/4096~~0.0008V或 0.8mV。

分辨率越高,测量越精确,但转换速度可能越慢,成本也越高。

2,参考电压 (Reference Voltage, Vref)

参考电压是 ADC 进行测量的"标尺"。它定义了 ADC 能够转换的模拟电压的最大值。输入的模拟电压不能超过参考电压。

ADC 输出的数字值通常与输入电压的关系是:
在这里插入图片描述
在很多 STM32 单片机中,Vref 通常连接到 Vdda (模拟电源电压),比如 3.3V。精确的 Vref 对于准确的 ADC 转换至关重要。
在这里插入图片描述
在这里插入图片描述

3,采样率 (Sampling Rate)

采样率表示 ADC 每秒钟进行多少次模数转换。单位通常是 SPS (Samples Per Second) 或 Hz。

根据奈奎斯特采样定理,采样率必须至少是被测模拟信号最高频率的两倍,才能无失真地还原原始信号。采样率越高,越能捕捉到快速变化的模拟信号。

3,DA转换

1,分辨率 (Resolution)

与 ADC 类似,DAC 的分辨率也决定了其输出精度的细腻程度,同样用"位" (bits) 表示。

一个 12 位的 DAC,可以将输入的数字值 (0 到
) 映射到输出电压范围内的 4096 个不同的模拟电压等级。分辨率越高,输出的模拟信号越平滑,越接近理想的模拟波形。

2,参考电压 (Reference Voltage, Vref)

DAC 的参考电压定义了其输出模拟电压的最大值。输出电压通常与输入的数字值成正比:

例如,对于 12 位 DAC,Vref = 3.3V:

输入数字值为 0 时,输出电压 ≈ 0V。
输入数字值为 4095 时,输出电压 ≈ 3.3V。
输入数字值为 2048 时,输出电压 ≈ 3.3V * (2048 / 4096) = 1.65V。
同样,稳定精确的 Vref 对 DAC 的输出精度至关重要。

3,转换速率与建立时间 (Settling Time)

DAC 将数字值转换为模拟电压需要一定的时间。建立时间是指从数字输入改变到模拟输出稳定在目标电压的一小段误差范围内所需的时间。这限制了 DAC 能够产生的模拟信号的最大频率。

4,输出缓冲 (Output Buffer)

许多 DAC 内部集成了一个输出缓冲器(运算放大器)。启用输出缓冲可以:

提高驱动能力: 使 DAC 能够驱动一定的负载(比如直接驱动小阻抗的负载或后续电路),而不会导致电压下降。
降低输出阻抗: 提供更稳定的输出电压。
在 CubeMX 中通常可以选择是否启用 DAC 通道的输出缓冲。

三,硬件连接:捕捉模拟信号

将模拟信号连接到 ADC 非常简单:

1,找到 ADC 输入引脚:

在你的 STM32 开发板上,通常会有标明如 PA0, PC1 等,并且这些引脚在 CubeMX 中可以配置为 ADC 的输入通道 (如 ADC1_IN0, ADC1_IN11)。查阅开发板原理图或引脚定义是最好的方法。
在这里插入图片描述

2,连接模拟信号源:

将你的模拟信号源(比如电位器、温度传感器、光敏电阻分压电路的输出端)连接到选定的 ADC 输入引脚。
在这里插入图片描述

3,连接地线 (GND):

确保模拟信号源的地线 (GND) 与 STM32 开发板的地线 (GND) 共地连接。这是保证测量准确的基础。

4,(可选)连接 Vref:

确保 ADC 的参考电压引脚 (Vref+ 或 Vdda) 连接到稳定、精确的参考电压源(通常是开发板上的 3.3V)。

注意: 输入到 ADC 引脚的电压绝对不能超过其允许的最大范围(通常是 0V 到 Vdda/Vref+)。GND 必须连接!

四,CobeMX配置

我的主控芯片ADC输入引脚是PC0,所以CubeMX将PC0引脚配置为ADC-IN引脚
在这里插入图片描述

1,模式和分辨率相关

1,分辨率 (Resolution)

决定 ADC 能分辨的最小电压变化,通常以位 (bits) 表示。STM32 的 ADC 通常支持 12 位、10 位、8 位或 6 位分辨率。
12 bits (常用, 0-4095)
10 bits (0-1023)
8 bits (0-255)
6 bits (0-63)

说明: 分辨率越高,精度越高,但转换时间可能越长。通常选择 12 bits 以获得最佳精度

2,数据对齐 (Data Alignment)

ADC 转换结果是一个数字值(如 12 位),但它存储在 16 位或 32 位的数据寄存器 (ADC_DR) 中。数据对齐方式决定了有效数据位在寄存器中的位置。
Right alignment (右对齐)
Left alignment (左对齐)
Right Alignment: 推荐 有效数据位位于寄存器的低位 (LSB)。例如,12 位结果存储在 bit 11 到 bit 0。读取值即为 0-4095。
Left Alignment: 有效数据位位于寄存器的高位 (MSB)。例如,12 位结果存储在 bit 15 到 bit 4。这种方式在某些需要更高精度比例计算或与 8 位系统兼容时可能有用,但读取后通常需要右移 4 位。

3,转换模式 (Conversion Mode)

定义 ADC 如何进行转换。
Single Conversion Mode (单次转换): 轮询/中断基础 每次触发(软件或硬件)只进行一次转换,然后停止。需要再次触发才能进行下一次转换。常用于轮询法或简单的中断法。
Continuous Conversion Mode (连续转换): DMA常用 首次触发后,ADC 会自动连续不断地进行转换,每次转换完成后立即开始下一次转换,直到手动停止。常用于配合 DMA 进行高速连续采样。

注意: Scan Mode (扫描模式) 和 Discontinuous Mode (不连续模式) 的配置在 “扫描模式设置” 中详述。

配置建议:
分辨率通常选 12 bits。
数据对齐选 Right alignment。
转换模式根据应用选择:需要单次读取用 Single;需要连续采样(尤其配合DMA)用 Continuous。

2,时钟配置相关

1,时钟来源与分频 (Clock Source & Prescaler)

ADC 模块通常有一个独立的可配置时钟源。这个时钟源通常来自 APB2 总线时钟 (PCLK2) 或其他专用时钟 (如 HSI, PLL 输出等),然后经过一个预分频器 (Prescaler) 进一步分频后,才作为 ADC 的工作时钟 (ADCCLK)。

ADCCLK = ADC Clock Source / Prescaler

在 CubeMX 中,通常在 “Clock Configuration” 标签页可以查看和配置 ADC 的时钟来源和频率,而在 ADC 的 “Parameter Settings” 中选择预分频系数。
PCLK2 divided by 2
PCLK2 divided by 4
PCLK2 divided by 6
PCLK2 divided by 8
… (其他可能的时钟源和分频)

2,ADCCLK 与转换时间

ADC 的总转换时间由两部分组成:采样时间 (Sampling Time) 和 固定的转换位数时间。

Total Conversion Time = Sampling Time + N * (1 / ADCCLK)

其中 N 是 ADC 的分辨率 (例如 12 位时 N=12.5 或类似值,具体查阅芯片手册)。

因此,ADCCLK 频率越高,总转换时间越短,允许的最大采样率越高。但是,ADCCLK 不能超过芯片手册规定的最大值 (通常在几十 MHz 范围)。

重要限制: 必须确保配置后的 ADCCLK 频率不超过芯片数据手册 (Datasheet) 中规定的 ADC 最大工作频率 (fADC_max)。例如,对于很多 F1 系列是 14MHz,F4 系列可能高达 36MHz。超过此限制可能导致转换结果不准确或 ADC 工作异常。
配置建议: 在满足最大频率限制的前提下,选择一个能提供所需采样率的尽可能高的 ADCCLK 频率。通常选择中间的分频值 (如 /4, /6) 是比较稳妥的选择。

3,采样时间 (Sampling Time)

在这里插入图片描述

采样时间 (Sampling Time) 指 ADC 在转换前对输入信号进行采样保持的时间长度。这个时间需要足够长,以确保 ADC 内部的采样保持电容 (Csh) 完全充电到输入引脚的电压。

配置选项:
采样时间以 ADCCLK 周期数表示。CubeMX 为每个 ADC 通道提供了多个可选的采样时间值。
1.5 Cycles
7.5 Cycles
13.5 Cycles
28.5 Cycles
55.5 Cycles
71.5 Cycles
239.5 Cycles
… (其他可能值)

选择依据:
选择合适的采样时间主要取决于模拟信号源的输出阻抗 (Rsource) 和 ADC 输入引脚的特性(内部采样电容 Csh 和输入电阻 RADC)。
为了让采样电容 Csh 充电到足够接近输入电压(例如误差小于 1/2 LSB),需要的充电时间 Tcharge 与 RC 时间常数有关。粗略地说:

Tcharge ≈ k * (Rsource + RADC) * Csh

其中 k 是一个系数(通常取 7 到 10 左右以达到足够精度)。
我们选择的采样时间 (Sampling Time Cycles / ADCCLK) 必须大于 Tcharge。

简化规则:
低阻抗信号源 (如运放输出,< 1kΩ): 可以选择较短的采样时间 (如 1.5, 7.5, 13.5 Cycles)。
中阻抗信号源 (如电位器分压,1kΩ ~ 50kΩ): 需要选择中等的采样时间 (如 28.5, 55.5 Cycles)。
高阻抗信号源 (> 50kΩ): 需要选择较长的采样时间 (如 71.5, 239.5 Cycles),或者在 ADC 输入前添加一个电压跟随器(运放)来降低信号源阻抗。

配置建议:
对于不确定的信号源,或者为了保证兼容性,选择一个稍长的采样时间通常是安全的 (例如 28.5 Cycles 或 55.5 Cycles)。
选择过短的采样时间会导致转换结果偏低或不准确。
选择过长的采样时间会增加总转换时间,降低最大采样率。
在多通道扫描模式下,可以为每个通道配置不同的采样时间。

注意: 如果信号源阻抗非常高,即使选择最长采样时间也可能不够。此时必须考虑使用外部缓冲电路。

4,扫描模式相关

当需要测量多个模拟输入通道时,需要配置 ADC 的扫描模式。这些设置决定了 ADC 如何依次转换多个通道。

1,扫描转换模式 (Scan Conversion Mode)

在这里插入图片描述

Disabled: 单通道 ADC 只转换配置的第一个通道 (Rank 1)。
Enabled: 多通道 ADC 会按照配置的 Rank 顺序,依次转换多个通道。

2,规则通道配置 (Regular Conversion Launch)

在这里插入图片描述

当 Scan Mode 启用时,需要配置以下参数来定义转换序列:

Number Of Conversion: 定义在一次扫描序列中要转换的通道总数 (1 到 16 个)。
Rank 配置: 对于序列中的每一个 Rank (位置),需要指定:
Channel: 选择要在此 Rank 转换的 ADC 通道 (e.g., Channel 0, Channel 1, Temp Sensor, Vbat)。
Sampling Time: 为此通道设置采样时间(可以每个通道不同)。
示例: 转换 PA0 (Channel 0) 和 PA1 (Channel 1)

Number Of Conversion: 2
Rank 1: Channel 0, Sampling Time: 28.5 Cycles
Rank 2: Channel 1, Sampling Time: 55.5 Cycles

3,扫描结束选择 (End of Conversion Selection - EOC)

在这里插入图片描述

这个设置决定了何时产生 EOC (转换结束) 标志或中断。

End of single conversion (单个转换结束)
End of sequence conversion (序列转换结束)
End of single conversion: 每个通道转换完成后都会产生 EOC 标志。
End of sequence conversion: DMA常用 只有当整个扫描序列中的所有通道都转换完成后,才会产生 EOC 标志。这在使用 DMA 读取整个序列结果时非常有用。

4,不连续转换模式 (Discontinuous Conversion Mode)

在这里插入图片描述

这是一个可选的高级模式,允许将扫描序列分成几个小组进行转换。每次外部触发只会转换一个小组。
如果启用,需要设置 “Number Of Discontinuous Conversions” 来指定每个小组包含的通道数量。例如,扫描 6 个通道,分成 3 组,每次触发转换 2 个通道。

应用场景: 需要以较低频率交错采样多组通道,或者在特定时间点集中采样某几个通道。

配置建议:
测量单通道:Scan Mode: Disabled。
测量多通道:Scan Mode: Enabled,并配置好 Number Of Conversion 和每个 Rank 的 Channel/Sampling Time。
配合 DMA 读取整个序列:设置 EOC Selection: End of sequence conversion。
Discontinuous Mode 使用较少,仅在特定需求时启用。

5,外部触发配置

除了软件启动转换 (调用 HAL_ADC_Start()),ADC 还可以配置为由外部事件触发启动,这对于精确控制采样时刻至关重要,尤其是在配合 DMA 使用时。

选择相应的外部触发源 (External Trigger Conversion Source),可以启动ADC转换
常见的触发源包括:

1,定时器触发 (Timer Trigger):

最常用 可以选择多个定时器 (TIM1, TIM2, TIM3, …) 的不同事件作为触发源。常用的有:
Timer x Trigger Out event (TRGO): 定时器的主要触发输出信号,通常配置为由定时器的更新事件 (Update Event - UEV) 产生。这是实现固定频率采样的关键。
Timer x Capture Compare x event: 定时器的捕获/比较匹配事件。

2,软件触发 (Software Trigger):

默认/手动 通过调用 HAL_ADC_Start() 等函数来手动启动转换。

3,外部引脚触发 (EXTI line x event):

由外部 GPIO 引脚上的边沿事件触发。
这个边沿事件什么呢
是触发边沿 (External Trigger Conversion Edge)
选择触发事件的有效边沿。
Rising edge (上升沿)
Falling edge (下降沿)
Both edges (双边沿)
Disabled (如果选择软件触发)

说明: 对于定时器触发,通常选择 Rising edge。具体选择取决于触发源信号的特性。

配置建议:
轮询法/简单中断法: 通常使用 Software Trigger (保持默认设置)。
精确固定频率采样 (配合 DMA): 推荐 选择一个定时器 (如 TIM3) 的 Trigger Out event 作为触发源,并设置边沿为 Rising edge。同时需要配置对应定时器的 TRGO 输出 (详见 “触发定时器配置”)。
确保 ADC 的 Continuous Conversion Mode 设置为 Disabled,否则外部触发可能只在第一次生效。

6,DMA 配置

使用 DMA (Direct Memory Access) 可以让 ADC 转换结果自动传输到内存,无需 CPU 干预,极大提高效率,是处理连续采样或高速采样的关键。

1,添加 DMA 请求 (Add DMA Request)

在这里插入图片描述

在 CubeMX 的 ADC 配置页面下找到 “DMA Settings” 标签页。点击 “Add” 按钮,选择 ADC 对应的 DMA 请求 (例如 ADC1)。

2,DMA 通道配置 (DMA Request Settings)

为选定的 DMA 请求配置参数:
Stream/Channel: 选择一个可用的 DMA 通道/流 (CubeMX 通常会自动分配)。
Direction: 方向。Peripheral To Memory (由 CubeMX 自动设置)。
Priority: DMA 通道优先级 (Low, Medium, High, Very High)。当多个 DMA 请求冲突时,高优先级优先。
Mode: DMA 传输模式。
Normal: 传输完指定长度的数据后停止。
Circular: 常用 传输到缓冲区末尾后自动回到缓冲区开头继续传输,形成环形缓冲区。这是 ADC 连续采样配合 DMA 的核心配置。
Increment Address: 地址自增设置。
Peripheral: 不勾选 ADC 数据寄存器地址固定。
Memory: 勾选 内存缓冲区地址需要递增。
Data Width: 数据宽度(外设 Peripheral / 内存 Memory)。

推荐配置:
Peripheral: Word, Memory: Word。
原因:
STM32 ADC 数据寄存器 (DR) 通常是 32 位的,即使有效数据只有 12 位或 16 位。
DMA 以 Word (32位) 传输可以最高效地匹配硬件,减少配置复杂度,并保证内存对齐。
虽然 ADC 结果是 16 位或 12 位,但将其存入 uint32_t 类型的缓冲区数组通常是最佳实践(代码中读取时取低位即可)。
将 Memory Width 设为 Half Word (16位) 也可以工作(需配合 uint16_t 缓冲区),但 Word-Word 是更常见且通常推荐的配置。
可选配置:
Peripheral: Half Word, Memory: Half Word (需配合 uint16_t 缓冲区)。
不推荐配置: Byte 传输效率较低。
配置建议:
进行连续采样(如定时器触发)或高速采样时,必须启用 DMA。
Mode 设置为 Circular。
Increment Address 勾选 Memory,不勾选 Peripheral。
Data Width 推荐 Peripheral: Word, Memory: Word,并使用 uint32_t 类型的 DMA 缓冲区。
关联:
DMA 的配置与 ADC 的触发方式 (External Trigger)、连续转换模式 (Continuous/Single) 以及中断配置 (NVIC) 紧密相关,需要协同设置才能正确工作。

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

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

相关文章

【软考 霍夫曼编码的文档压缩比】

霍夫曼编码的文档压缩比计算基于字符频率的最优编码分配&#xff0c;以下是详细步骤及相关案例&#xff1a; 一、压缩比计算公式 [ \text{压缩比} \frac{\text{压缩前总比特数}}{\text{压缩后总比特数 编码表存储开销}} ] 通常以 比率&#xff08;如 3:1&#xff09; 或 百分…

关闭VSCode 自动更新

参考&#xff1a;关闭VSCode 自动更新_vscode关闭自动更新-CSDN博客 vscode的设置 Update: Mode Update: Enable Windows Background Updates Extensions: Auto Check Updates Extensions: Auto Update

Flask框架搭建

1、安装Flask 打开终端运行以下命令&#xff1a; pip install Flask 2、创建项目目录 在Windows上&#xff1a; venv\Scripts\activate 执行 3、创建 app.py 文件 可以在windows终端上创建app.py文件 &#xff08;1&#xff09;终端中创建 使用echo命令 echo "fr…

5G-A和未来6G技术下的操作系统与移动设备变革:云端化与轻量化的发展趋势

目录 5G技术带来的革命性变革 云端化操作系统的实现路径 完全云端化模式 过渡性解决方案 未来操作系统的发展方向 功能架构演进 安全机制强化 移动设备的形态变革 终端设备轻量化 物联网设备简化 实施挑战与应对策略 技术挑战 商业模式创新 总结与展望 5G技术作为…

【漫话机器学习系列】261.工具变量(Instrumental Variables)

工具变量&#xff08;Instrumental Variables&#xff09;通俗图解&#xff1a;破解内生性困境的利器 在数据建模与因果推断过程中&#xff0c;我们经常遇到一个棘手问题&#xff1a;内生性&#xff08;Endogeneity&#xff09;。它会导致模型估计产生偏差&#xff0c;进而误导…

CSS:颜色的三种表示方式

文章目录 一、rgb和rgba方式二、HEX和HEXA方式&#xff08;推荐&#xff09;三、hsl和hsla方式四、颜色名方式 一、rgb和rgba方式 10进制表示方法 二、HEX和HEXA方式&#xff08;推荐&#xff09; 就是16进制表示法 三、hsl和hsla方式 语法&#xff1a;hsl(hue, satura…

支付宝授权登录

支付宝授权登录 一、场景 支付宝小程序登录&#xff0c;获取用户userId 二、注册支付宝开发者账号 1、支付宝开放平台 2、点击右上角–控制台&#xff0c;创建小程序 3、按照步骤完善信息&#xff0c;生成密钥时会用到的工具 4、生成的密钥&#xff0c;要保管好&#xff…

涂色不踩雷:如何优雅解决 LeetCode 栅栏涂色问题

文章目录 摘要描述例子&#xff1a; 题解答案&#xff08;Swift&#xff09;题解代码分析动态规划核心思路初始条件 示例测试及结果示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a; 时间复杂度空间复杂度总结实际场景联系 摘要 在用户体验和界面设计中&#xff0c;颜…

GEE计算 RSEI(遥感生态指数)

&#x1f6f0;️ 什么是 RSEI&#xff1f;为什么要用它评估生态环境&#xff1f; RSEI&#xff08;遥感生态指数&#xff0c;Remote Sensing Ecological Index&#xff09; 是一种通过遥感数据计算得到的、综合反映区域生态环境质量的指标体系。 它的设计初衷是用最少的变量&…

图像处理:预览并绘制图像细节

前言 因为最近在搞毕业论文的事情&#xff0c;要做出一下图像细节对比图&#xff0c;所以我这里写了两个脚本&#xff0c;一个用于框选并同时预览图像放大细节&#xff0c;可显示并返回框选图像的坐标&#xff0c;另外一个是输入框选图像的坐标并将放大的细节放置在图像中&…

基于javaweb的SSM驾校管理系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…

限制 MySQL 服务只能被内网 `192.168.1.*` 网段的设备访问

1. 修改 MySQL 配置文件 MySQL 默认监听所有网络接口(0.0.0.0),需要将其绑定到内网 IP 地址或限制访问范围。 (1)编辑 MySQL 配置文件 找到 MySQL 的主配置文件,通常是 /etc/my.cnf 或 /etc/mysql/my.cnf。使用文本编辑器打开: sudo vi /etc/my.cnf(2)设置 bind-a…

uniapp-商城-55-后台 新增商品(分类、验证和弹窗属性)

1、概述 在前面 &#xff0c;我们将商品页面的布局给完成了&#xff0c;这里来对表单的标签输入进行校验&#xff0c;看看这里的校验还是不是也需要兼容微信小程序&#xff0c;还有没有前面遇到的自定义正则进行校验的情况。 另外这里还需要完成商品属性的添加&#xff0c;就是…

PyInstaller 打包后 Excel 转 CSV 报错解决方案:“excel file format cannot be determined“

一、问题背景 在使用 Python 开发 Excel 转 CSV 工具时,直接运行脚本(python script.py)可以正常工作,但通过 PyInstaller 打包成可执行文件后,出现以下报错: excel file format cannot be determined, you must specify an engine manually 该问题通常发生在使用pandas…

【HTML 全栈进阶】从语义化到现代 Web 开发实战

目录 &#x1f31f; 前言&#x1f3d7;️ 技术背景与价值&#x1fa79; 当前技术痛点&#x1f6e0;️ 解决方案概述&#x1f465; 目标读者说明 &#x1f9e0; 一、技术原理剖析&#x1f4ca; 核心概念图解&#x1f4a1; 核心作用讲解&#x1f527; 关键技术模块说明⚖️ 技术选…

小结:网页性能优化

网页性能优化是提升用户体验、减少加载时间和提高资源利用率的关键。以下是针对网页生命周期和事件处理的性能优化技巧&#xff0c;结合代码示例&#xff0c;重点覆盖加载、渲染、事件处理和资源管理等方面。 1. 优化加载阶段 减少关键资源请求&#xff1a; 合并CSS/JS文件&a…

【AI学习】AI大模型技术发展研究月报的生成提示词

AI大模型技术发展研究月报生成提示词 请输出AI大模型技术发展研究月报&#xff0c;要求如下&#xff1a; —————————— 任务目标 在今天&#xff08;{{today}}&#xff09;往前连续 30 天内&#xff0c;检索已正式公开发表的、与AI大模型&#xff08;参数量 ≥10B&am…

AI 实践探索:辅助生成测试用例

背景 目前我们的测试用例主要依赖人工生成和维护&#xff0c;AI时代的来临&#xff0c;我们也在思考“AI如何赋能业务”&#xff0c;提出了如下命题&#xff1a; “探索通过AI辅助生成测试用例&#xff0c;完成从需求到测试用例生成的穿刺”。 目标 找全测试路径辅助生成测…

C#实现访问远程硬盘(附源码)

在现实场景中&#xff0c;我们经常用到远程桌面功能&#xff0c;而在某些场景下&#xff0c;我们需要使用类似的远程硬盘功能&#xff0c;这样能非常方便地操作对方电脑磁盘的目录、以及传送文件。那么&#xff0c;这样的远程硬盘功能要怎么实现了&#xff1f; 这次我们将给出…

02.Golang 切片(slice)源码分析(一、定义与基础操作实现)

Golang 切片&#xff08;slice&#xff09;源码分析&#xff08;一、定义与基础操作实现&#xff09; 注意当前go版本代码为1.23 一、定义 slice 的底层数据是数组&#xff0c;slice 是对数组的封装&#xff0c;它描述一个数组的片段。两者都可以通过下标来访问单个元素。 数…