16:(标准库)ADC三:使用外部触发启动ADC/模拟看门狗

使用外部触发启动ADC

  • 1、外部中断线EXTI11触发ADC
  • 2、外部定时器TIM2_CH2触发ADC
  • 3、ADC中模拟看门狗的使用

1、外部中断线EXTI11触发ADC

ADC的触发方式有很多,一般情况都是使用软件触发反式启动ADC转换。除了软件触发方式还能使用外部事件触发启动ADC转换。如下图所示:
在这里插入图片描述

①EXTI.c文件的代码如下:

#include "EXTI.h"/*** 初始化外部中断线EXTI11,将配置为上升沿触发事件模式*/
void EXTI11_Init(void)
{/* 1、使能GPIOA时钟,AFIO时钟 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);/* 2、配置PA11为下拉输入 */GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;GPIO_Init(GPIOA, &GPIO_InitStructure);/* 3、配置EXTI11为上升沿触发事件 */GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource11);	//选择PA11通道进行外部中断EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line = EXTI_Line11;					//选择EXTI11EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Event;             //触发事件模式EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;		//上升沿触发EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);/* 4、配置NVIC *///事件无需配置NVIC
//    NVIC_InitTypeDef NVIC_InitStructure;
//    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
//    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
//    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
//    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//    NVIC_Init(&NVIC_InitStructure); 
}

②ADC.c文件的代码如下:

#include "ADC.h"
#include "UART.h"/*** ADC1初始化函数*/
void ADC1_Init(void)
{/* 1、使能GPIOA和ADC时钟 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);  //使能ADC1时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6);                     //对ADC时钟源分频/* 2、对PA0(ADC1的通道0引脚)进行引脚配置 */GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;     //PA0 作为模拟通道输入引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚GPIO_Init(GPIOA, &GPIO_InitStructure);/* 3、配置ADC1工作模式 */ADC_InitTypeDef ADC_InitStructure;ADC_DeInit(ADC1);                                                       //将外设ADC1的全部寄存器重设为缺省值ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;                      //ADC1和ADC2工作在独立模式ADC_InitStructure.ADC_ScanConvMode = DISABLE;                           //非扫描(单通道)模式ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;                     //非连续模式
//  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;     //使用软件触发ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO;     //使用外部中断线EXTI11触发ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;                  //ADC1数据右对齐ADC_InitStructure.ADC_NbrOfChannel = 1;                                 //转换的ADC通道的数目,只有PA0ADC_Init(ADC1, &ADC_InitStructure);                                     //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器/* 4、配置规则组*/ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5); //ADC1,ADC通道,盒子序列1,采样时间为55.5周期/* 5、使能EOC中断,NVIC的配置 */ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);NVIC_InitTypeDef NVIC_InitStruct;NVIC_InitStruct.NVIC_IRQChannel = ADC1_2_IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStruct);/* 使能ADC的外部触发转换 */ADC_ExternalTrigConvCmd(ADC1,ENABLE);			//这一步很重要,不要忘记ADC_Cmd(ADC1, ENABLE);               			//使能ADC1/* 5、ADC校准 */ADC_ResetCalibration(ADC1);                     //使能复位校准while (ADC_GetResetCalibrationStatus(ADC1));    //等待复位校准结束ADC_StartCalibration(ADC1);                     //开启AD校准while (ADC_GetCalibrationStatus(ADC1));         //等待校准结束//    /* 6、软件触发 */
//    ADC_SoftwareStartConvCmd(ADC1, ENABLE);       //启动ADC转换
}/*** ADC单通道转换完成的中断服务函数*/
uint16_t Data = 0;
uint8_t Satatus_Flag = 0;
void ADC1_2_IRQHandler (void)
{if(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == SET)//转换完成标志位EOC置1{ADC_ClearFlag(ADC1, ADC_FLAG_EOC);  		//清除标志位EOCData = ADC_GetConversionValue(ADC1);		//获取结果寄存器中的数据Satatus_Flag = 1;                   		//转换完成标志位}
}

③ADC.h文件的代码如下:

#ifndef __ADC_H
#define __ADC_H
#include "stm32f10x.h" extern uint16_t Data;
extern uint8_t Satatus_Flag;
void ADC1_Init(void);#endif

④主函数main.c文件的代码如下:

#include "stm32f10x.h"                 
#include "UART.h"
#include "ADC.h"
#include "EXTI.h"int main(void)
{float ADC_Value = 0;UART1_Init();ADC1_Init();EXTI11_Init();printf("ADC电压测量\r\n");while(1){if(Satatus_Flag){Satatus_Flag = 0;printf("结果寄存器数值为:%d\r\n",Data);ADC_Value = Data * 3.3 / 4095;              //将二进制计数为电压电压值printf("测量到的电压为:%0.2f\r\n",ADC_Value); }}
}

在这里插入图片描述

2、外部定时器TIM2_CH2触发ADC

①TIM.c文件的代码如下:

#include "TIM.h"/*** 定时器TIM2的初始化:使用PWM模式1产生上升沿触发ADC*/
void TIM2_Init(void)
{/* 1、使能TIM2的时钟 */RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);/* 2,对时基单元的初始化 */TIM_InternalClockConfig(TIM2);                                 //选择内部时钟源TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;       //时钟源分频,则为72MHzTIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;   //向上计数TIM_TimeBaseInitStruct.TIM_Prescaler = 7200 - 1;               //预分频器,计数分辨率为0.1msTIM_TimeBaseInitStruct.TIM_Period = 10000 - 1;                 //重装载值为10000,则计数周期为1sTIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;              //重复计数器(高级定时器才配置)TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);               /* 3、对TIM2的输出比较单元CH2进行配置 */TIM_OCInitTypeDef TIM_OCInitStruct;TIM_OCStructInit(&TIM_OCInitStruct);                            //给结构体默认初始值TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;                  //选择PWM1模式TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;          //有效值配置极性为低电平TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;      //通道使能TIM_OCInitStruct.TIM_Pulse = 5000;                              //CCR的初始值TIM_OC2Init(TIM2, &TIM_OCInitStruct);                           //配置CH2TIM_Cmd(TIM2,ENABLE);                                           //使能定时器}

②ADC.c文件的代码如下:

#include "ADC.h"/*** ADC1初始化函数*/
void ADC1_Init(void)
{/* 1、使能GPIOA和ADC时钟 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);  //使能ADC1时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6);                     //对ADC时钟源分频/* 2、对PA0(ADC1的通道0引脚)进行引脚配置 */GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;     //PA0 作为模拟通道输入引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚GPIO_Init(GPIOA, &GPIO_InitStructure);/* 3、配置ADC1工作模式 */ADC_InitTypeDef ADC_InitStructure;ADC_DeInit(ADC1);                                                       //将外设ADC1的全部寄存器重设为缺省值ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;                      //ADC1和ADC2工作在独立模式ADC_InitStructure.ADC_ScanConvMode = DISABLE;                           //非扫描(单通道)模式ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;                     //非连续模式
//  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;     //使用软件触发ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2;   //使用TIM2_CH2触发ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;                  //ADC1数据右对齐ADC_InitStructure.ADC_NbrOfChannel = 1;                                 //转换的ADC通道的数目,只有PA0ADC_Init(ADC1, &ADC_InitStructure);                                     //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器/* 4、配置规则组*/ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5); //ADC1,ADC通道,盒子序列1,采样时间为55.5周期/* 5、使能EOC中断,NVIC的配置 */ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);NVIC_InitTypeDef NVIC_InitStruct;NVIC_InitStruct.NVIC_IRQChannel = ADC1_2_IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStruct);/* 使能ADC的外部触发转换 */ADC_ExternalTrigConvCmd(ADC1,ENABLE);//这一步很重要,不要忘记ADC_Cmd(ADC1, ENABLE);               //使能ADC1/* 5、ADC校准 */ADC_ResetCalibration(ADC1);                     //使能复位校准while (ADC_GetResetCalibrationStatus(ADC1));    //等待复位校准结束ADC_StartCalibration(ADC1);                     //开启AD校准while (ADC_GetCalibrationStatus(ADC1));         //等待校准结束//    /* 6、软件触发 */
//    ADC_SoftwareStartConvCmd(ADC1, ENABLE);       //启动ADC转换
}/*** ADC单通道转换完成的中断服务函数*/
uint16_t Data = 0;
uint8_t Satatus_Flag = 0;
void ADC1_2_IRQHandler (void)
{if(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == SET)//转换完成标志位EOC置1{ADC_ClearFlag(ADC1, ADC_FLAG_EOC);  //清除标志位EOCData = ADC_GetConversionValue(ADC1);//获取结果寄存器中的数据Satatus_Flag = 1;                   //转换完成标志位}
}

③主函数main.c文件的代码如下:

#include "stm32f10x.h"                 
#include "UART.h"
#include "ADC.h"
#include "TIM.h"int main(void)
{float ADC_Value = 0;UART1_Init();ADC1_Init();TIM2_Init();printf("ADC电压测量\r\n");while(1){if(Satatus_Flag){Satatus_Flag = 0;printf("结果寄存器数值为:%d\r\n",Data);ADC_Value = Data * 3.3 / 4095;              //将二进制计数为电压电压值printf("测量到的电压为:%0.2f\r\n",ADC_Value); }}
}

在这里插入图片描述
使用定时器的PWM模式触发,每隔1s触发一次,因为定时器的定时器周期配置的为1s。

3、ADC中模拟看门狗的使用

在这里插入图片描述
如图:在ADC中有一个模拟看门狗,用于监测着结果寄存器的数值。用户可以设定一个寄存器的上限值和下限值,当寄存器的值大于上限值/小于下限值时,看门狗就会将标志位AWD置1,若开启了模拟看门狗中断,则会进入ADC中断。
①ADC.c文件的代码如下:

#include "ADC.h"
#include "UART.h"/*** ADC1初始化函数*/
void ADC1_Init(void)
{/* 1、使能GPIO和ADC时钟 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);  //使能ADC1时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6);//对ADC时钟源分频/* 2、对PA0(ADC1的通道0引脚)进行引脚配置 */GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;     //PA0 作为模拟通道输入引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚GPIO_Init(GPIOA, &GPIO_InitStructure);/* 3、配置ADC1工作模式 */ADC_InitTypeDef ADC_InitStructure;ADC_DeInit(ADC1);                                                       //将外设ADC1的全部寄存器重设为缺省值ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;                      //ADC1和ADC2工作在独立模式ADC_InitStructure.ADC_ScanConvMode = DISABLE;                           //非扫描(单通道)模式ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;                      //连续模式ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;     //转换由软件而不是外部触发启动ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;                  //ADC1数据右对齐ADC_InitStructure.ADC_NbrOfChannel = 1;                                 //转换的ADC通道的数目,只有PA0ADC_Init(ADC1, &ADC_InitStructure);                                     //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器/* 4、配置规则组*/ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5); //ADC1,ADC通道,盒子序列1,采样时间为55.5周期/* 5、配置模拟看门狗:上限为3.0v,下限为2.0v */ADC_AnalogWatchdogThresholdsConfig(ADC1,0x09B1,0x0EBA);         //配置监测的上下限,注意:监测的是结果寄存器的值ADC_AnalogWatchdogSingleChannelConfig(ADC1,ADC_Channel_0);      //监测通道0ADC_AnalogWatchdogCmd(ADC1,ADC_AnalogWatchdog_SingleRegEnable); //使能单个规则组模拟看门狗/* 6、使能EOC和AWD中断,NVIC的配置 */ADC_ITConfig(ADC1, ADC_IT_AWD, ENABLE);             //使能看门狗中断ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);             //使能ADC转换完成中断NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);NVIC_InitTypeDef NVIC_InitStruct;NVIC_InitStruct.NVIC_IRQChannel = ADC1_2_IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStruct);ADC_Cmd(ADC1, ENABLE);                          //使能ADC1/* 7、ADC校准 */ADC_ResetCalibration(ADC1);                     //使能复位校准while (ADC_GetResetCalibrationStatus(ADC1));    //等待复位校准结束ADC_StartCalibration(ADC1);                     //开启AD校准while (ADC_GetCalibrationStatus(ADC1));         //等待校准结束/* 8、软件触发 */ADC_SoftwareStartConvCmd(ADC1, ENABLE);         //启动ADC转换
}/*** ADC单通道转换完成和模拟看门狗的中断范围函数*/
void ADC1_2_IRQHandler (void)
{/* 转换完成 */if(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC))   //转换完成标志位EOC置1{ADC_ClearFlag(ADC1, ADC_FLAG_EOC);      //清除标志位EOCprintf("结果寄存器数值为:%d\r\n",ADC_GetConversionValue(ADC1));                //打印结果寄存器的值printf("测量到的电压为:%0.2f\r\n",ADC_GetConversionValue(ADC1) * 3.3 / 4095);  //打印电压值}/* 模拟看门狗监测到超过阈值 */if(ADC_GetFlagStatus(ADC1, ADC_FLAG_AWD)){ADC_ClearFlag(ADC1, ADC_FLAG_AWD);      //清除标志位AWD//LED翻转  }
}

②主函数main.c文件的代码如下:

#include "stm32f10x.h"                 
#include "ADC.h"int main(void)
{ADC1_Init();printf("ADC电压监测\r\n");while(1){}
}

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

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

相关文章

Linux之管道,system V的共享内存,消息队列和信号量

Linux之管道,systemV共享内存和信号量 一.进程间通信1.1进程间通信的目的1.2进程间通信的方式 二.管道2.1管道的概念2.2匿名管道2.3命名管道 三.system V3.1共享内存3.2消息队列3.3信号量 一.进程间通信 在我们之前有关Linux指令的学习时我们使用过“|”这个命令&a…

使用ChatGPT生成和优化电子商务用户需求规格说明书

在电子商务项目开发中,用户需求规格说明书(User Requirement Specification, URS)是团队沟通与项目成功的基石。然而,面对复杂多变的需求,如何快速生成清晰、完整且具备说服力的文档?这正是AI工具的用武之地…

1+X应急响应(网络)常见网络攻击-SQL注入:

常见网络攻击-SQL注入: SQL注入概述: 动态网站的工作流程: SQL注入的起源: SQL典型的攻击手段: SQL注入的危害: SQL注入的函数: SQL注入类型: 提交方式分类: Get注入&am…

Spire.PDF for .NET【页面设置】演示:打开 PDF 时自动显示书签或缩略图

用户打开 PDF 文档时,他们会看到 PDF 的初始视图。默认情况下,打开 PDF 时不会显示书签面板或缩略图面板。在本文中,我们将演示如何设置文档属性,以便每次启动文件时都会打开书签面板或缩略图面板。 Spire.PDF for .NET 是一款独…

[Docker-显示所有容器IP] 显示docker-compose.yml中所有容器IP的方法

本文由Markdown语法编辑器编辑完成。 1. 需求背景: 最近在启动一个服务时,突然发现它的一个接口,被另一个服务ip频繁的请求。 按理说,之前设置的是,每隔1分钟请求一次接口。但从日志来看,则是1秒钟请求一次&#xff…

单片机GPIO的8种工作模式

1、输入 GPIO_MODE_AIN:模拟输入 GPIO_MODE_IN_FLOATING:浮空输入 GPIO_MODE_IPD:下拉输入 GPIO_MODE_IPU:上拉输入 2、输出 GPIO_MODE_OUT_OD:开漏输出(特殊情况使用) GPIO_MODE_OUT_PP:推挽输出-----点灯(通用&#…

Azkaban部署

首先我们需要现在相关的组件,在这里已经给大家准备好了相关的安装包,有需要的可以自行下载。 只需要启动hadoop集群就可以,如果现在你的hive是打开的,那么请你关闭!!! 如果不关会造成证书冲突…

时钟使能、

时钟使能 如果正确使用,时钟使能能够显著地降低系统功耗,同时对面积或性能的影响极小。但是如果不正确地使用时钟使能, 可能会造成下列后果: • 面积增大 • 密度减小 • 功耗上升 • 性能下降 在许多使用大量控制集的…

视觉经典神经网络与复现:深入解析与实践指南

目录 引言 经典视觉神经网络模型详解 1. LeNet-5:卷积神经网络的先驱 LeNet-5的关键特点: 2. AlexNet:深度学习的突破 AlexNet的关键特点: 3. VGGNet:深度与简洁的平衡 VGGNet的关键特点: 4. ResNe…

【CSS in Depth 2 精译_060】9.3 详解 CSS 作用域的相关概念、最新 @scope 规则的应用及注意事项

当前内容所在位置(可进入专栏查看其他译好的章节内容) 【第九章 CSS 的模块化与作用域】 ✔️ 9.1 模块的定义 9.1.1 模块和全局样式9.1.2 一个简单的 CSS 模块9.1.3 模块的变体9.1.4 多元素模块 9.2 将模块组合为更大的结构 9.2.1 模块中多个职责的拆分…

uniapp实现开发遇到过的问题(持续更新中....)

1. 在ios模拟器上会出现底部留白的情况 解决方案: 在manifest.json文件,找到开源码视图配置,添加如下: "app-plus" : {"safearea":{"bottom":{"offset" : "none" // 底部安…

React(六)——Redux

文章目录 项目地址基本理解一、配置Redux store二、创建slice配置到store里并使用三、给Slice配置reducers,用来修改初始值 项目地址 教程作者:教程地址: 代码仓库地址: 所用到的框架和插件: dbt airflow基本理解 s…

国家级资质!同驭汽车获得CNAS实验室认证

近日,同驭汽车科技顺利通过中国合格评定国家认可委员会(简称CNAS)评审,获得《中国合格评定国家认可委员会实验室认可证书》。这标志着同驭已建立国际标准的实验室管理体系,产品的试验与检测技术能力达到了国际认可的准…

HTML5好看的音乐播放器多种风格(附源码)

文章目录 1.设计来源1.1 音乐播放器风格1效果1.2 音乐播放器风格2效果1.3 音乐播放器风格3效果1.4 音乐播放器风格4效果1.5 音乐播放器风格5效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者&…

快速简单的视频下载器——lux

文章目录 前言1.环境检查1.1 检查 lux 安装1.2 检查FFmpeg安装1.3 备注 2. lux指令2.1 无OPTIONS2.2 -i 指令2.3 - f 指令2.4 -c 指令2.5 -o 指令2.6 备注 3.结语 前言 在学习之余,发现了一个简单并且高效的视频下载器lux,能够帮你快速且高效的下载文件&#xff08…

linux ubuntu的脚本知

目录 一、变量的引用 二、判断指定的文件是否存在 三、判断目录是否存在 四、判断最近一次命令执行是否成功 五、一些比较符号 六、"文件"的读取和写入 七、echo打印输出 八、ubuntu切换到root用户 N、其它可以参考的网址 脚本功能强大,用起来也…

Python爬虫进阶实战项目:使用青果网代理高效爬取某手办网详情数据

1 引言 计算机,获取数据,还在慢慢复制粘贴?聪明的朋友都已经用爬虫高效获取数据,但是经常搞爬虫遇见ip管控防爬,咱们怎么处理?在我看来随着数据需求增加,爬虫成为高效获取数据的工具。然而&…

大语言模型---Llama7B和Llama8B的区别;模型参数量;权重文件的不同;嵌入层权重的不同;输入序列长度的不同;应用场景

文章目录 1.概要2. 模型参数量3. 权重文件的不同4. 嵌入层权重的不同5. 输入序列长度的不同6. 应用场景 1.概要 LLaMA(Large Language Model Meta AI)是由Meta开发的一系列语言模型,其中不同版本的参数量(如7B、8B等)…

Linux命令思维导图

看到一个很不错的Linux命令思维导图,用机器翻译了一下,建议收藏备用。 附上英文版:

C++自动化测试:GTest 与 GitLab CI/CD 的完美融合

在现代软件开发中,自动化测试是保证代码质量和稳定性的关键手段。对于C项目而言,自动化测试尤为重要,它能有效捕捉代码中的潜在缺陷,提高代码的可维护性和可靠性。本文将重点介绍如何在C项目中结合使用Google Test(GTe…