STM32 7-8

目录

ADC

AD单通道

AD多通道

DMA

DMA转运数据

DMA+AD多通道


ADC

AD单通道

AD.c

#include "stm32f10x.h"                  // Device header/*** @brief  初始化AD所需要的所有设备* @param  无* @retval 无*/
void AD_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);RCC_ADCCLKConfig(RCC_PCLK2_Div6);//配置ADCCLK为六分频GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1, ADC_SampleTime_55Cycles5);//配置输入通道//所选ADC设备,指定ADC通道,规则组序列器中的次序,指定通道采样时间(更快就选小参数,更稳定就选大参数)//初始化ADCADC_InitTypeDef ADC_InitStructure;ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC工作模式ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//数据对齐ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部触发转换选择//单通道单次转换非扫描模式    //单通道连续转换,非扫描模式ADC_InitStructure.ADC_NbrOfChannel = 1;//通道数目ADC_InitStructure.ADC_ScanConvMode = DISABLE;//扫描转换模式ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//非连续转换模式//ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//连续转换模式ADC_Init(ADC1,&ADC_InitStructure);ADC_Cmd(ADC1,ENABLE);//开启ADC1//进行ADC校准ADC_ResetCalibration(ADC1);//复位校准while(ADC_GetResetCalibrationStatus(ADC1) == SET);//等待复位校准完成ADC_StartCalibration(ADC1);//开始校准while(ADC_GetCalibrationStatus(ADC1) == SET);//等待校准完成//ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开启软件触发转换
}/*** @brief  获取AD所得值* @param  无* @retval  转化出来的数据量最大为4095*/
uint16_t AD_GetValue(void)
{ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开启软件触发转换while (ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);//获取标志位状态(为Reset表示没有转换完成)//大约等待 (1 / 72MHz / 6) X (55.5 + 12.5) = 5.6usreturn ADC_GetConversionValue(ADC1);//调用后会自动清除EOC标志位
}

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "AD.h"uint16_t ADValue;
float Voltage;int main(void)
{OLED_Init();AD_Init();OLED_ShowString(1,1,"ADValue:");OLED_ShowString(2,1,"Voltage:0.00V");while(1){ADValue = AD_GetValue();Voltage = (float)ADValue / 4095 * 3.3;OLED_ShowNum(1,9,ADValue,4);OLED_ShowNum(2,9,Voltage,1);//输出整数部分OLED_ShowNum(2,11,(uint16_t)(Voltage * 100) % 100,2);//输出小数部分Delay_ms(100);}}
AD多通道

AD.c

#include "stm32f10x.h"                  // Device header/*** @brief  初始化AD所需设备* @param  无* @retval 无*/
void AD_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);RCC_ADCCLKConfig(RCC_PCLK2_Div6);//配置ADCCLK为六分频GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化ADCADC_InitTypeDef ADC_InitStructure;ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC工作模式ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//数据对齐ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部触发转换选择//单通道单次转换非扫描模式    ADC_InitStructure.ADC_NbrOfChannel = 1;//通道数目ADC_InitStructure.ADC_ScanConvMode = DISABLE;//扫描转换模式ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//非连续转换模式ADC_Init(ADC1,&ADC_InitStructure);ADC_Cmd(ADC1,ENABLE);//开启ADC1//进行ADC校准ADC_ResetCalibration(ADC1);//复位校准while(ADC_GetResetCalibrationStatus(ADC1) == SET);//等待复位校准完成ADC_StartCalibration(ADC1);//开始校准while(ADC_GetCalibrationStatus(ADC1) == SET);//等待校准完成}/**
*@brief  通过传入不同ADC通道,实现多通道AD,本质还是单通道
*@param  ADC_Channel:所选通道
*@retval 转化出的数据量最大为4095*/
uint16_t AD_GetValue(uint8_t ADC_Channel)
{ADC_RegularChannelConfig(ADC1,ADC_Channel,1, ADC_SampleTime_55Cycles5);//配置输入通道//所选ADC设备,指定ADC通道,规则组序列器中的次序,指定通道采样时间(更快就选小参数,更稳定就选大参数)ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开启软件触发转换while (ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);//获取标志位状态(为Reset表示没有转换完成)//大约等待 (1 / 72MHz / 6) X (55.5 + 12.5) = 5.6usreturn ADC_GetConversionValue(ADC1);//调用后会自动清除EOC标志位
}

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "AD.h"uint16_t AD0,AD1,AD2,AD3;int main(void)
{OLED_Init();AD_Init();OLED_ShowString(1,1,"AD0:");OLED_ShowString(2,1,"AD1:");OLED_ShowString(3,1,"AD2:");OLED_ShowString(4,1,"AD3:");while(1){AD0 = AD_GetValue(ADC_Channel_0);AD1 = AD_GetValue(ADC_Channel_1);AD2 = AD_GetValue(ADC_Channel_2);AD3 = AD_GetValue(ADC_Channel_3);OLED_ShowNum(1,5,AD0,4);OLED_ShowNum(2,5,AD1,4);OLED_ShowNum(3,5,AD2,4);OLED_ShowNum(4,5,AD3,4);Delay_ms(100);}}

DMA

DMA转运数据

MyDMA.c

#include "stm32f10x.h"                  // Device headeruint16_t MyDMA_Size;/*** @brief  初始化DMA* @param  无* @retval 无*/
void MyDMA_Init(uint32_t AddrA,uint32_t AddrB,uint16_t Size)
{MyDMA_Size = Size;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);//开启MDA1时钟DMA_InitTypeDef DMA_InitStructrue;DMA_InitStructrue.DMA_PeripheralBaseAddr = AddrA;//外设起始地址DMA_InitStructrue.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;//外设数据宽度DMA_InitStructrue.DMA_PeripheralInc = DMA_PeripheralInc_Enable;//外设是否自增DMA_InitStructrue.DMA_MemoryBaseAddr = AddrB;//存储器起始地址DMA_InitStructrue.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte ;//存储器数据宽度DMA_InitStructrue.DMA_MemoryInc = DMA_MemoryInc_Enable;//存储器是否自增DMA_InitStructrue.DMA_DIR = DMA_DIR_PeripheralSRC;//传输方向(外设作为源头)DMA_InitStructrue.DMA_BufferSize = Size;//传输计数器(传输次数)DMA_InitStructrue.DMA_Mode = DMA_Mode_Normal;//传输模式,是否使用自动重装(转运后停止)DMA_InitStructrue.DMA_M2M = DMA_M2M_Enable;//选择硬件触发,还是软件触发(软件触发)DMA_InitStructrue.DMA_Priority = DMA_Priority_Medium;//优先级(多个通道进行配置)DMA_Init(DMA1_Channel1,&DMA_InitStructrue);DMA_Cmd(DMA1_Channel1,DISABLE);//不让DMA初始化后立刻转运
}/*** @brief  将外设数据通过DMA写入存储器* @param  无* @retval 无*/
void MyDMA_Transfer(void)
{DMA_Cmd(DMA1_Channel1,DISABLE);//为传输计数器赋值,需先失能DMADMA_SetCurrDataCounter(DMA1_Channel1,MyDMA_Size);//重新给传输计数器写入值DMA_Cmd(DMA1_Channel1,ENABLE);//使能DMAwhile(DMA_GetFlagStatus(DMA1_FLAG_TC1) == RESET);//检查DMA1通道1转换完成的标志位(完成标志位置一)//未完成则一直空循环等待DMA_ClearFlag(DMA1_FLAG_TC1);//需要手动清除标志位
}

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "MyDMA.h"uint8_t DataA[] = {0x01,0x02,0x03,0x04};
uint8_t DataB[] = {0,0,0,0};uint8_t i;int main(void)
{OLED_Init();MyDMA_Init((uint32_t)DataA,(uint32_t)DataB,4);//DataA 转运至 DataOLED_ShowString(1,1,"DataA");OLED_ShowString(3,1,"DataA");OLED_ShowHexNum(1,8,(uint32_t)DataA,8);OLED_ShowHexNum(3,8,(uint32_t)DataB,8);for(i = 0;i < 4;i++){OLED_ShowHexNum(2,3*i+1,DataA[i],2);}for(i = 0;i < 4;i++){OLED_ShowHexNum(4,3*i+1,DataB[i],2);}while(1){DataA[0] ++;DataA[1] ++;DataA[2] ++;DataA[3] ++;for(i = 0;i < 4;i++){OLED_ShowHexNum(2,3*i+1,DataA[i],2);}for(i = 0;i < 4;i++){OLED_ShowHexNum(4,3*i+1,DataB[i],2);}Delay_s(1);MyDMA_Transfer();//开始转运for(i = 0;i < 4;i++){OLED_ShowHexNum(2,3*i+1,DataA[i],2);}for(i = 0;i < 4;i++){OLED_ShowHexNum(4,3*i+1,DataB[i],2);}Delay_s(1);}}
DMA+AD多通道

AD.c

#include "stm32f10x.h"                  // Device headeruint16_t AD_Value[4];/*** @brief  初始化AD以及DMA* @param  无* @retval 无*/
void AD_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);//开启MDA1时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6);//配置ADCCLK为六分频GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1, ADC_SampleTime_55Cycles5);//配置输入通道ADC_RegularChannelConfig(ADC1,ADC_Channel_1,2, ADC_SampleTime_55Cycles5);//配置输入通道ADC_RegularChannelConfig(ADC1,ADC_Channel_2,3, ADC_SampleTime_55Cycles5);//配置输入通道ADC_RegularChannelConfig(ADC1,ADC_Channel_3,4, ADC_SampleTime_55Cycles5);//配置输入通道//所选ADC设备,指定ADC通道,规则组序列器中的次序,指定通道采样时间(更快就选小参数,更稳定就选大参数)//初始化ADCADC_InitTypeDef ADC_InitStructure;ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC工作模式ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//数据对齐ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部触发转换选择//ADC扫描模式+数据转运 //ADC连续扫描+DMA循环转运ADC_InitStructure.ADC_NbrOfChannel = 4;//通道数目ADC_InitStructure.ADC_ScanConvMode = ENABLE;//扫描转换模式(设置为扫描模式)//ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//是否为连续模式ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;ADC_Init(ADC1,&ADC_InitStructure);//配置DMADMA_InitTypeDef DMA_InitStructrue;DMA_InitStructrue.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR;//外设起始地址DMA_InitStructrue.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//外设数据宽度(16位)DMA_InitStructrue.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设是否自增(始终转运同一位置数据)DMA_InitStructrue.DMA_MemoryBaseAddr =  (uint32_t)AD_Value;//存储器起始地址DMA_InitStructrue.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//存储器数据宽度DMA_InitStructrue.DMA_MemoryInc = DMA_MemoryInc_Enable;//存储器是否自增DMA_InitStructrue.DMA_DIR = DMA_DIR_PeripheralSRC;//传输方向(外设作为源头)DMA_InitStructrue.DMA_BufferSize = 4;//传输计数器(传输次数)//DMA_InitStructrue.DMA_Mode = DMA_Mode_Normal;//传输模式,是否使用自动重装(转运后停止)DMA_InitStructrue.DMA_Mode = DMA_Mode_Circular;//循环模式DMA_InitStructrue.DMA_M2M = DMA_M2M_Disable;//选择硬件触发,还是软件触发(硬件触发)DMA_InitStructrue.DMA_Priority = DMA_Priority_Medium;//优先级(多个通道进行配置)DMA_Init(DMA1_Channel1,&DMA_InitStructrue);//这里的通道必须使用DMA1_Channel1,详情查表DMA_Cmd(DMA1_Channel1,ENABLE);//让DMA初始化后立刻转运ADC_DMACmd(ADC1,ENABLE);//开启ADC触发DMA信号ADC_Cmd(ADC1,ENABLE);//开启ADC1//进行ADC校准ADC_ResetCalibration(ADC1);//复位校准while(ADC_GetResetCalibrationStatus(ADC1) == SET);//等待复位校准完成ADC_StartCalibration(ADC1);//开始校准while(ADC_GetCalibrationStatus(ADC1) == SET);//等待校准完成ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开启软件触发转换
}/**
*@brief  通过传入不同ADC通道,实现多通道AD,本质还是单通道
*@param  ADC_Channel:所选通道
*@retval 转化出的数据量最大为4095*/
//void AD_GetValue(void)
//{
//    DMA_Cmd(DMA1_Channel1,DISABLE);//为传输计数器赋值,需先失能DMA
//    DMA_SetCurrDataCounter(DMA1_Channel1,4);//重新给传输计数器写入值
//    DMA_Cmd(DMA1_Channel1,ENABLE);//使能DMA
//    
//    //ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开启软件触发转换
//    
//    while(DMA_GetFlagStatus(DMA1_FLAG_TC1) == RESET);//检查DMA1通道1转换完成的标志位(完成标志位置一)
//    //未完成则一直空循环等待
//    DMA_ClearFlag(DMA1_FLAG_TC1);//需要手动清除标志位
//}

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "AD.h"int main(void)
{OLED_Init();AD_Init();OLED_ShowString(1,1,"AD0:");OLED_ShowString(2,1,"AD1:");OLED_ShowString(3,1,"AD2:");OLED_ShowString(4,1,"AD3:");while(1){//AD_GetValue();OLED_ShowNum(1,5,AD_Value[0],4);OLED_ShowNum(2,5,AD_Value[1],4);OLED_ShowNum(3,5,AD_Value[2],4);OLED_ShowNum(4,5,AD_Value[3],4);Delay_ms(100);}}

7

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

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

相关文章

Java 集合、迭代器

Java 集合框架主要包括两种类型的容器&#xff0c;一种是集合&#xff08;Collection&#xff09;&#xff0c;存储一个元素集合&#xff0c;另一种是图&#xff08;Map&#xff09;&#xff0c;存储键/值对映射。Collection 接口又有 3 种子类型&#xff0c;List、Set 和 Queu…

使用Cargo创建、编译与运行Rust项目

在 Rust 开发中&#xff0c;Cargo 是一个非常重要的工具&#xff0c;它负责项目的构建、管理和依赖管理。以下是如何使用 Cargo 创建、编译和运行 Rust 项目的详细步骤。 1. 创建新项目 首先确保你已经在计算机上安装了 Rust 和 Cargo。然后&#xff0c;在命令行中输入以下命…

Github 2024-02-12 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2024-02-12统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Rust项目3Python项目3JavaScript项目1TypeScript项目1C项目1C项目1PowerShell项目1非开发语言项目1 SubQuery…

3秒实现无痛基于Stable Diffusion WebUI安装ComfyUI!无需重复安装环境!无需重复下载模型!安装教程

标题略有夸张的表达了接下来这一套确实很简单&#xff0c;相较于直接下载或者通过秋叶包更新而言。大大节省磁盘空间&#xff0c;和下载时间。 这篇教程不需要你有&#xff1a; 代码基础。都是复制粘贴就完事。魔法。 这篇教程默认你已经有&#xff1a; 1. 本地能够正常使用…

【python5】闭包/装饰器,json/configparser/optparse,walk/split/getattr/bin//lspci/ethtool

文章目录 1.闭包和装饰器&#xff1a;函数里return就是闭包2.解析eeprom&#xff1a;如下是二进制文件&#xff0c;C8是一个字节3.json/configparser/optparse&#xff1a;json.dumps&#xff08;将字典转化为字符串&#xff0c;将json信息写进文件&#xff09;&#xff0c;jso…

使用securecrt+xming通过x11访问ubuntu可视化程序

windows使用securecrtxming通过x11访问ubuntu可视化程序 windows机器IP&#xff1a;192.168.9.133 ubuntu-desktop20.04机器IP&#xff1a;192.168.9.190 windows下载xming并安装 按照图修改xming配置 开始->xming->Xlaunch 完成xming会在右下角后台运行 windows在…

前端 > JS 笔试题面试考题(21-25)

简述请看下面的代码片段并回答以下问题 &#xff1f; for (var i 0; i< 5; i){var btn document.createElement(button);btn.appendChild(document.createTextNode(Button i));btn.addEventListener(click, function(){ console.log(${i} );});document.body.appendChild…

C/C++模板初阶

目录 1. 泛型编程 2. 函数模板 2.1 函数模板概念 2.1 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3. 类模板 3.1 类模板的定义格式 3.2 类模板的实例化 1. 泛型编程 如何实现一个通用的交换函数呢&#xff1f; void Swap(int&…

【每日一题】牛客网——链表分割

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…

C++新特性“CPU优化对齐”

哈喽 各位读者伙伴大家好 本篇文章讲一下C新特性 alignas&alignof 在这之前 我们大家应该先了解一下数据对齐的问题 什么是数据对齐问题呢&#xff1f; 以下是两个结构体在内存中的分布图: 为什么要数据对齐呢&#xff1f; 首先是CPU 电脑中的CPU&#xff08;单核或者多核…

opencv mat用法赋值克隆的操作和一些基本属性

//Mat基本结构 (头部 数据部分) //赋值的话 就是修改了指针位置 但还是指向了原来数据 并没创建数据 本质上并没有变 //只有克隆或者拷贝时 它才会真正复制一份数据 //代码实现 //创建方法 - 克隆 //Mat m1 src.clone(); //复制 //Mat m2; //src.copyTo(m2); //赋值法 …

2023 IoTDB Summit:华润电力技术研究院副院长郭为民《新型时序数据库在智能发电领域的应用探索与展望》...

12 月 3 日&#xff0c;2023 IoTDB 用户大会在北京成功举行&#xff0c;收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题&#xff0c;多位学术泰斗、企业代表、开发者&#xff0c;深度分享了工业物联网时序数据库 IoTDB 的技术创新…

备战蓝桥杯---组合数学基础1

让我们来几道高中的组合题吧&#xff1a; 1.我们一定有n个向下&#xff0c;为 2.我们挑最大的两个&#xff0c;条件是他们奇偶性相同&#xff0c;为2*A10,2; 3.用捆绑法即可。 4.我们用隔板法&#xff0c;为 5.问题等价于23个相同的球放到3个盒子里&#xff0c;每个盒子至少…

Python 中的异步编程:提升程序性能的利器

随着互联网应用的迅猛发展&#xff0c;越来越多的应用程序需要处理大量的并发请求。传统的同步编程模型在处理大量并发请求时往往效率低下&#xff0c;造成程序响应速度变慢。为了解决这个问题&#xff0c;Python 提供了异步编程这一强大的工具&#xff0c;可以在单线程环境下实…

BKP寄存器与RTC实时时钟

BKP寄存器 BKP寄存器简介 BKP&#xff08;Backup Registers&#xff09;备份寄存器 BKP可用于存储用户应用程序数据。当VDD&#xff08;2.03.6V&#xff09;电源被切断&#xff0c;他们仍然由VBAT&#xff08;1.83.6V&#xff09;维持供电。当系统在待机模式下被唤醒&#xf…

Vue核心基础3:计算属性和监视属性

1 计算属性 这边以姓名案例&#xff0c;来介绍计算属性 <body><div id"root"><!-- 姓&#xff1a;<input type"text" v-model:value"firstName"><br>名&#xff1a;<input type"text" v-model:value&…

立体视觉几何 (三)

立体视觉系统概述 误差分析 考虑对应于深度 Z 的视差 d 的匹配对。我们想要评估 ΔZ&#xff0c;即视差误差引起的深度误差。将 Z 对 d 求导&#xff0c;得到&#xff1a; 立体视觉中基线&#xff08;baseline&#xff09;、焦距&#xff08;focal length&#xff09;和立体重…

黑马程序员——html css基础——day10day11day12——小兔鲜儿

目录&#xff1a; 底部盒子制作 底部服务模块制作底部帮助模块底部版权模块banner-轮播图 HTML结构CSS样式banner图片模块 htmlcssbanner小圆点制作 htmlcssbanner-侧导航 HTML结构CSS样式新鲜好物-hd HTML结构CSS样式新鲜好物-bd HTML结构CSS样式溢出文字显示省略号人气推荐 …

每日五道java面试题之java基础篇(三)

第一题. switch 是否能作⽤在 byte/long/String 上&#xff1f; Java5 以前 switch(expr)中&#xff0c;expr 只能是 byte、short、char、int。从 Java 5 开始&#xff0c;Java 中引⼊了枚举类型&#xff0c; expr 也可以是 enum 类型。从 Java 7 开始&#xff0c;expr 还可以…

《UE5_C++多人TPS完整教程》学习笔记9 ——《P10 创建会话(Creating A Session)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P10 创建会话&#xff08;Creating A Session&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是译者&…