STM32笔记(十三)---ADC

发布者:悠闲时光最新更新时间:2022-05-26 来源: eefocus关键字:STM32  ADC  外部通道 手机看文章 扫描二维码
随时随地手机看文章

一、ADC简介

以STM32f103 系列为例,3 个 ADC,精度为 12 位,每个 ADC 最多有 16 个外部通道。其中ADC1 和 ADC2 都有 16 个外部通道, ADC3 根据 CPU 引脚的不同通道数也不同,一般都有8 个外部通道。 ADC 的模式非常多,功能非常强大,具体的我们在功能框图中分析每个部分的功能。


ADC功能框图

图1 单个ADC功能框图

①电压输入范围

ADC 输入范围为: VREF- ≤ VIN ≤ VREF+。由 VREF-、 VREF+ 、 VDDA 、 VSSA、这四个外部引脚决定。


在设计原理图的时候一般把 VSSA 和 VREF-接地,把 VREF+和 VDDA 接 3V3,得到ADC 的输入电压范围为: 0~3.3V。


如果想让输入的电压范围变宽,去到可以测试负电压或者更高的正电压,可以在外部加一个电压调理电路,把需要转换的电压抬升或者降压到 0~3.3V,这样 ADC 就可以测量。


②输入通道

确定好 ADC 输入电压之后,那么电压怎么输入到 ADC?这里我们引入通道的概念,STM32 的 ADC 多达 18 个通道,其中外部的 16 个通道就是框图中的 ADCx_IN0、ADCx_IN1…ADCx_IN5。这 16 个通道对应着不同的 IO 口, 具体是哪一个 IO 口可以从手册查询到。其中 ADC1/2/3 还有内部通道: ADC1 的通道 16 连接到了芯片内部的温度传感器, Vrefint 连接到了通道 17。 ADC2 的模拟通道 16 和 17 连接到了内部的 VSS。ADC3 的模拟通道 9、 14、 15、 16 和 17 连接到了内部的 VSS。

图2 STM32F103VET6 ADC 通道

外部的 16 个通道在转换的时候又分为规则通道和注入通道,其中规则通道最多有 16路,注入通道最多有 4 路。那这两个通道有什么区别?在什么时候使用?

规则通道

规则通道:顾名思意,规则通道就是很规矩的意思,我们平时一般使用的就是这个通道,或者应该说我们用到的都是这个通道。


注入通道

注入,可以理解为插入,插队的意思,是一种不安分的通道。它是一种在规则通道转换的时候强行插入要转换的一种。如果在规则通道转换过程中,有注入通道插队,那么就要先转换完注入通道,等注入通道转换完成后,再回到规则通道的转换流程。这点跟中断程序很像,都是不安分的主。所以,注入通道只有在规则通道存在时才会出现。


③转换顺序

规则序列

规则序列寄存器有 3 个,分别为 SQR3、 SQR2、 SQR1。 SQR3 控制着规则序列中的第一个到第六个转换,对应的位为: SQ1[4:0]~SQ6[4:0],第一次转换的是位 4:0 SQ1[4:0],如果通道 16 想第一次转换,那么在 SQ1[4:0]写 16 即可。 SQR2 控制着规则序列中的第 7 到第12 个转换,对应的位为: SQ7[4:0]~SQ12[4:0],如果通道 1 想第 8 个转换,则 SQ8[4:0]写 1即可。 SQR1 控制着规则序列中的第 13 到第 16 个转换,对应位为: SQ13[4:0]~SQ16[4:0],如果通道 6 想第 10 个转换,则 SQ10[4:0]写 6 即可。具体使用多少个通道,由 SQR1 的位L[3:0]决定,最多 16 个通道。

图3 规则序列寄存器

注入序列

注入序列寄存器 JSQR 只有一个,最多支持 4 个通道,具体多少个由 JSQR 的 JL[2:0]决定。如果 JL 的 值小于 4 的话,则 JSQR 跟 SQR 决定转换顺序的设置不一样,第一次转换的不是 JSQR1[4:0],而是 JCQRx[4:0] , x = (4-JL),跟 SQR 刚好相反。如果 JL=00(1 个转换),那么转换的顺序是从 JSQR4[4:0]开始,而不是从 JSQR1[4:0]开始。当 JL 等于 4 时,跟 SQR 一样。

图4 注入序列寄存器

image-20200706223510963

④触发源

ADC 转换可以由ADC 控制寄存器 2: ADC_CR2 的 ADON 这个位来控制,写 1 的时候开始转换,写 0 的时候停止转换,这个是最简单也是最好理解的开启 ADC 转换的控制方式。

除了这种庶民式的控制方法, ADC 还支持触发转换,这个触发包括内部定时器触发和外部 IO 触发。触发源有很多,具体选择哪一种触发源,由 ADC 控制寄存器 2:ADC_CR2 的EXTSEL[2:0]和 JEXTSEL[2:0]位来控制。 EXTSEL[2:0]用于选择规则通道的触发源,JEXTSEL[2:0]用于选择注入通道的触发源。选定好触发源之后,触发源是否要激活,则由ADC 控制寄存器 2:ADC_CR2 的 EXTTRIG 和 JEXTTRIG 这两位来激活。其中 ADC3 的规则转换和注入转换的触发源与 ADC1/2 的有所不同,在框图上已经表示出来。


⑤转换时间

ADC 时钟

ADC 输入时钟 ADC_CLK 由 PCLK2 经过分频产生,最大是 14M,分频因子由 RCC 时钟配置寄存器 RCC_CFGR 的位 15:14 ADCPRE[1:0]设置,可以是 2/4/6/8 分频,注意这里没有 1 分频。一般我们设置 PCLK2=HCLK=72M。

采样时间

ADC 使用若干个 ADC_CLK 周期对输入的电压进行采样,采样的周期数可通过 ADC采样时间寄存器 ADC_SMPR1 和 ADC_SMPR2 中的 SMP[2:0]位设置, ADC_SMPR2 控制的是通道 0~9, ADC_SMPR1 控制的是通道 10~17。每个通道可以分别用不同的时间采样。其中采样周期最小是 1.5 个,即如果我们要达到最快的采样,那么应该设置采样周期为 1.5个周期,这里说的周期就是 1/ADC_CLK。


ADC 的转换时间跟 ADC 的输入时钟和采样时间有关,公式为: Tconv = 采样时间 +12.5 个周期。 当 ADCLK = 14MHZ (最高),采样时间设置为 1.5 周期(最快),那么总的转换时间(最短) Tconv = 1.5 周期 + 12.5 周期 = 14 周期 = 1us。

一般我们设置 PCLK2=72M,经过 ADC 预分频器能分频到最大的时钟只能是 12M,采样周期设置为 1.5 个周期,算出最短的转换时间为 1.17us,这个才是最常用的。


⑥中断

转换结束中断

数据转换结束后,可以产生中断,中断分为三种:规则通道转换结束中断,注入转换通道转换结束中断,模拟看门狗中断。其中转换结束中断很好理解,跟我们平时接触的中断一样,有相应的中断标志位和中断使能位,我们还可以根据中断类型写相应配套的中断

服务程序。

模拟看门狗中断

当被 ADC 转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断,前提是我们开启了模拟看门狗中断,其中低阈值和高阈值由 ADC_LTR 和 ADC_HTR 设置。例如我们设置高阈值是 2.5V,那么模拟电压超过 2.5V 的时候,就会产生模拟看门狗中断,反之低阈值也一样。

DMA 请求

规则和注入通道转换结束后,除了产生中断外,还可以产生 DMA 请求,把转换好的数据直接存储在内存里面。要注意的是只有 ADC1 和 ADC3 可以产生 DMA 请求。有关DMA 请求需要配合《STM32F10X-中文参考手册》 DMA 控制器这一章节来学习。一般我们在使用 ADC 的时候都会开启 DMA 传输。


电压转换

模拟电压经过 ADC 转换后,是一个 12 位的数字值,如果通过串口以 16 进制打印出来的话,可读性比较差,那么有时候我们就需要把数字电压转换成模拟电压,也可以跟实际的模拟电压(用万用表测)对比,看看转换是否准确。

我们一般在设计原理图的时候会把 ADC 的输入电压范围设定在: 0~3.3v,因为 ADC是 12 位的,那么 12 位满量程对应的就是 3.3V, 12 位满量程对应的数字值是: 2^12。数值0 对应的就是 0V。 如果转换后的数值为 X , X 对应的模拟电压为 Y,那么会有这么一个等式成立: 2^12 / 3.3 = X / Y, => Y = (3.3 * X ) / 2^12。


二、ADC独立模式单通道中断采集实验

初始 ADC 用到的 GPIO;

设置 ADC 的工作参数并初始化;

设置 ADC 工作时钟;

设置 ADC 转换通道顺序及采样时间;

配置使能 ADC 转换完成中断,在中断内读取转换完数据;

使能 ADC;

使能软件触发 ADC 转换。

头文件相关宏定义

/*************ADC GPIO相关宏定义**************/

#define ADC_GPIO_APBxCLock_FUN RCC_APB2PeriphClockCmd

#define ADC_GPIO_CLK RCC_APB2Periph_GPIOC

#define ADC_PORT GPIOC

#define ADC_PIN     GPIO_Pin_1


/*************ADC 相关宏定义**************/

//选择ADC1

#define ADC_APBxCLock_FUN RCC_APB2PeriphClockCmd

#define ADC_CLK RCC_APB2Periph_ADC1

#define ADCx ADC1


//根据ADC引脚图 PC1为通道11

#define ADC_CHANNEL ADC_Channel_11


// ADC 中断相关宏定义

#define ADC_IRQ ADC1_2_IRQn

#define ADC_IRQHandler ADC1_2_IRQHandler


ADC配置

__IO uint16_t ADC_ConvertedValue;


static void ADCx_GPIO_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

// 打开ADC IO端口时钟

ADC_GPIO_APBxCLock_FUN(ADC_GPIO_CLK, ENABLE);

// 配置ADC IO引脚模式为模拟输入模式

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

GPIO_InitStructure.GPIO_Pin = ADC_PIN;

// ADC为模拟输入,无需配置速度

GPIO_Init(ADC_PORT, &GPIO_InitStructure);


static void ADCx_Mode_Config(void)

{

ADC_InitTypeDef ADC_InitStructure;

// 打开ADC时钟

ADC_APBxCLock_FUN(ADC_CLK,ENABLE);

// 连续转换模式

ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

// 转换结果右对齐

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

// 不用外部触发转换,软件开启即可

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

// 只使用一个 ADC,属于独立模式

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;

// 转换通道 1 个

ADC_InitStructure.ADC_NbrOfChannel = 1;

// 禁止扫描模式,多通道才要,单通道不需要

ADC_InitStructure.ADC_ScanConvMode = DISABLE;

ADC_Init(ADCx, &ADC_InitStructure);

//配置ADC-CLK为6分频 72/6=12M

RCC_ADCCLKConfig(RCC_PCLK2_Div6);

// 配置 ADC 通道转换顺序为 1,第一个转换,采样时间为 55.5 个时钟周期

ADC_RegularChannelConfig(ADCx, ADC_CHANNEL, 1, ADC_SampleTime_55Cycles5);

//开启ADC转换结束中断,在中断服务函数中读取转换值☆

ADC_ITConfig(ADCx, ADC_IT_EOC, ENABLE);//EOC--规则通道

//开启ADC,并开始转换

ADC_Cmd(ADCx, ENABLE);

//初始化ADC校准寄存器

ADC_ResetCalibration(ADCx);

//等待校准寄存器初始化完成

while(ADC_GetResetCalibrationStatus(ADCx));

/***********ADC校准开启(不开启也可)**********/

//ADC开始校准

ADC_StartCalibration(ADCx);

//等待校准完成

while(ADC_GetCalibrationStatus(ADCx));

//由于没有采用外部触发,所以使用软件触发ADC转换

ADC_SoftwareStartConvCmd(ADCx, ENABLE);

}


static void ADC_NVIC_Config(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

NVIC_InitStructure.NVIC_IRQChannel = ADC_IRQ;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}


void ADCx_Init(void)

{

ADCx_GPIO_Config();

ADCx_Mode_Config();

ADC_NVIC_Config();

}


‘main函数’

extern __IO uint16_t ADC_ConvertedValue;

float ADC_ConvertedValueLocal;

int main(void)

{

USART_Config();

//ADC初始化

ADCx_Init();

printf("rn ----这是一个ADC实验(DMA传输)----rn");

while(1)

{

ADC_ConvertedValueLocal =(float) ADC_ConvertedValue/4096*3.3; 

printf("rn The current AD value = 0x%04X rn", 

       ADC_ConvertedValue); 

printf("rn The current AD value = %f V rn",

       ADC_ConvertedValueLocal); 

printf("rnrn");

        //简易延时

Delay(0xffffee); 

}

}


三、ADC独立模式多通道DMA采集实验

多通道与单通道ADC,DMA传输区别

IO口定义


DMA存储器地址与地址增量


DMA缓冲区数量


ADC转化通道数量


ADC扫描模式


ADC转化顺序与采样时间


ADC相关宏定义


/*************ADC GPIO相关宏定义**************/

#define ADC_GPIO_APBxCLock_FUN RCC_APB2PeriphClockCmd

#define ADC_GPIO_CLK RCC_APB2Periph_GPIOC

#define ADC_PORT GPIOC

#define ADC_PIN     GPIO_Pin_1


/*************ADC 相关宏定义**************/

//选择ADC1

#define ADC_APBxCLock_FUN RCC_APB2PeriphClockCmd

#define ADC_CLK RCC_APB2Periph_ADC1

#define ADCx ADC1


//C1为通道11

#define ADC_CHANNEL ADC_Channel_11


// ADC 中断相关宏定义

#define ADC_IRQ ADC1_2_IRQn

#define ADC_IRQHandler ADC1_2_IRQHandler


// ADC1 对应 DMA1 通道 1, ADC3 对应 DMA2 通道 5, ADC2 没有 DMA 功能

#define ADC_DMA_CHANNEL DMA1_Channel1

#define ADC_DMA_APBxClock_FUN RCC_AHBPeriphClockCmd

#define ADC_DMA_CLK RCC_AHBPeriph_DMA1


// 转换通道个数

#define CHANNELNUM 5

#define ADC_PIN1 GPIO_Pin_0

#define ADC_CHANNEL1 ADC_Channel_10

#define ADC_PIN2 GPIO_Pin_1

#define ADC_CHANNEL2 ADC_Channel_11

#define ADC_PIN3 GPIO_Pin_3

#define ADC_CHANNEL3 ADC_Channel_13

#define ADC_PIN4 GPIO_Pin_4

#define ADC_CHANNEL4 ADC_Channel_14

#define ADC_PIN5 GPIO_Pin_5

#define ADC_CHANNEL5 ADC_Channel_15


ADC相关配置

__IO uint16_t ADC_ConvertedValue[CHANNELNUM] = {0,0,0,0,0};


static void ADCx_GPIO_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

// 打开ADC IO端口时钟

ADC_GPIO_APBxCLock_FUN(ADC_GPIO_CLK, ENABLE);

// 配置 ADC IO 引脚模式

GPIO_InitStructure.GPIO_Pin = ADC_PIN1|ADC_PIN2|ADC_PIN3|ADC_PIN4|ADC_PIN5;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

// ADC为模拟输入,无需配置速度

GPIO_Init(ADC_PORT, &GPIO_InitStructure);


static void ADCx_Mode_Config(void)

{

ADC_InitTypeDef ADC_InitStructure;

DMA_InitTypeDef DMA_InitStructure;

// DMA的时钟

ADC_DMA_APBxClock_FUN(ADC_DMA_CLK, ENABLE);

// 打开ADC时钟

ADC_APBxCLock_FUN(ADC_CLK,ENABLE);

/*****************DMA模式配置*******************/

// 复位 DMA 控制器

DMA_DeInit(ADC_DMA_CHANNEL);

// 配置 DMA 初始化结构体

// 外设基址为: ADC 数据寄存器地址

DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&( ADCx->DR ));

// 存储器地址

DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC_ConvertedValue;

// 数据源来自外设

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;

// 缓冲区大小,应该等于数据目的地的大小

DMA_InitStructure.DMA_BufferSize = CHANNELNUM;

// 外设寄存器只有一个,地址不用递增

DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

// 存储器地址递增

DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

// 外设数据大小为半字,即两个字节

DMA_InitStructure.DMA_PeripheralDataSize =DMA_PeripheralDataSize_HalfWord;

// 内存数据大小也为半字,跟外设数据大小相同

DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

// 循环传输模式

DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

// DMA 传输通道优先级为高,当使用一个 DMA 通道时,优先级设置不影响

DMA_InitStructure.DMA_Priority = DMA_Priority_High;

// 禁止存储器到存储器模式,因为是从外设到存储器

DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

// 初始化 DMA

DMA_Init(ADC_DMA_CHANNEL, &DMA_InitStructure);

// 使能 DMA 通道

DMA_Cmd(ADC_DMA_CHANNEL , ENABLE);

/*****************ADC模式配置*******************/

// 连续转换模式

ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

// 转换结果右对齐

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

// 不用外部触发转换,软件开启即可

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

// 只使用一个 ADC,属于独立模式

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;

// 转换通道 1 个

ADC_InitStructure.ADC_NbrOfChannel = CHANNELNUM;

// 扫描模式,多通道才要,单通道不需要

ADC_InitStructure.ADC_ScanConvMode = ENABLE;

ADC_Init(ADCx, &ADC_InitStructure);

[1] [2] [3]
关键字:STM32  ADC  外部通道 引用地址:STM32笔记(十三)---ADC

上一篇:FreeRTOS笔记(一)
下一篇:STM32笔记(十二)---SPI读写FLASH

推荐阅读最新更新时间:2024-11-13 10:22

基于STM32和机智云智能门锁的实现
1 功能实现 本系统基于STM32和机智云设计了一款新型智能门锁。该系统主要由STM32 主控制模块、数据存储器单元、矩阵键盘单元、TFT 液晶显示、手机APP 等模块组成,实现了一款拥有警报功能的控制系统。此外,结合日常生活的实用性,在此基础上增加手机无线远程解锁功能。 利用esp8266 无线传输模块将智能门锁与手机 APP 进行连接,并在同一局域网下, 机智云通过一键配置实现互通,并实时显示和控制开、关锁的状态。最终组成完整系统并完成了调试。 系统硬件设计 单片机作为控制程序的主要组成部分,为了获得最佳的性价比并且需要联网功能,所以需要选择一个比较合理的单片机型号。又考虑到单片微型计算机的内存、操作速度、性能、I/O
[单片机]
基于<font color='red'>STM32</font>和机智云智能门锁的实现
STM32头文件STM32F10x.h和STM32F10x_lib.h区别
#include stm32f10x_lib.h 是ST公司V2.0的库函数使用的头文件,用MDK3.80A打开。但是,如果你用MDK4.7/MDK5打开,就没法找到了,这也就是为什么,我们老版本的例程,存在高版本的MDK编译的时候,报找不到stm32f10x_lib.h的错误的原因了。而stm32f10x_lib.h里面,经过分析,实际可以用:stm32f10x_map.h和stm32f10x_nvic.h来替代。 #include stm32f10x.h 是ST公司V3.5及以后版本统一使用的库函数头文件了,说白了就是把原来的stm32f10x_lib.h,换成了#include stm32f10x.h ,规范了代码,不需
[单片机]
高速ADC电源设计方案详细解析
  当今许多应用要求高速采样模数转换器(ADC)具有12位或以上的分辨率,以便用户能够进行更精确的系统测量。遗憾的是,更高的分辨率也意味着系统对噪声更加敏感。系统分辨率每提高一位,例如从12位提高到13位,系统对噪声的敏感度就会提高一倍。因此,对于ADC设计,设计人员必须考虑一个常常被遗忘的噪声源——系统电源。ADC是敏感器件,为了实现数据手册所述的最佳额定性能,应当同等看待模拟、时钟和电源等所有输入端。噪声来源众多,形式多样,噪声辐射会影响性能。   当今电子业界的时髦概念是新设计在降低成本的同时还要“绿色环保”。具体到便携式应用,它要求降低功耗、简化散热管理、最大化电源效率并延长电池使用时间。然而,大多数ADC
[电源管理]
高速<font color='red'>ADC</font>电源设计方案详细解析
解决STM32+FreeRTOS的printf重定向打印凌乱的问题
本内容基于正点原子STM32F103系列开发板开发调试。 由于引入了FreeRTOS后,出现了任务调度,就出现了打印之间互相穿插,杂乱无章的情况。 打印如下所示: LED Running! Task test tTask test wo! Task tethree! st one! Task test tTask test wo! Task tethree! st one! LED Running! Task test tTask test wo! Task tethree! st one! Task test tTask test wo! Task tethree! st one! Task test tTask tes
[单片机]
stm32 低功耗下使用看门狗(不喂狗)
在项目中需要低功耗处理,而使用看门狗可以保证程序不会跑死。但使用看门狗有一个问题,打开看门狗以后关闭不了,必须一直喂狗进行操作,那有啥好的办法呢?狗是必须养的,养这条狗花费了我半天时间,在此记录。 我能想到的有两种方案: 一、 使用独立看门狗,在低功耗下唤醒进行喂狗操作后继续休眠。 该方法可以通过增大看门狗的时钟分频,最大256分频,即可达到最大限度的喂狗时间,如果按照40K的时钟来算,(1 / (40K / 256)) * 4096 = 26.2144S, 在二十多秒起来喂狗在功耗方面可以接受,这种方法比较简单,不过二十多秒需唤醒一次。 二、利用复位关闭看门狗,在低功耗下不进行喂狗操作 使用的前提是需要判断复
[单片机]
<font color='red'>stm32</font> 低功耗下使用看门狗(不喂狗)
如何选择支持GUI的STM32
作为嵌入式系统核心的MCU,以往由于性能受限,难于支持GUI所需的图形显示的要求。而现在这已经成为了历史,一大波图形显示MCU已经来了! ★ 硬件功能配置 ★ 从2011年推出高性能STM32F4产品以来,ST不断在图形显示MCU上投入研发资源,先后推出了STM32F7、STM32H7、STM32L4+等产品系列,目前STM32具有图形显示接口(LCD-TFT接口或MIPI-DSI接口)的子产品线已有6条之多。大家可以从图1中看到STM32图形显示产品的全貌。 图1,STM32图形产品一览 为了支持HMI/GUI中的图形处理的需要,STM32图形显示MCU产品中包含一些列特殊功能: √ Chrom-ART加速器:用于提升2
[单片机]
如何选择支持GUI的<font color='red'>STM32</font>
STM32串口通信详解
一.数据通信方式 1.串行与并行通信 按数据传送的方式,通讯可分为串行通讯与并行通讯。 串行通讯:是指设备之间通过一根数据信号线,地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式,同一时刻只能传输一位(bit)数据。 并行通讯:是指使用 8、16、32 及 64 根或更多的数据线(有多少信号为就需要多少信号位)进行传输的通讯方式,可以同一时刻传输多个数据位的数据。 串行通讯与并行通讯的特性对比: 并行可以同时发送多位数据所以速度比串行的速度要快很多,但并行要的数据线也更多相对成本会更高,而且并行传输对同步要求较高,且随着通讯速率的提高,信号干扰的问题会显著影响通讯性能。 2.全双工、半双工及单工通讯 单工通信:
[单片机]
<font color='red'>STM32</font>串口通信详解
CRC校验、STM32中CRC计算单元、CRC应用
从这一段时间后台反馈的问题可以看得出来,好些朋友对CRC没有什么概念,今天就在这里讲述一下关于CRC校验、STM32中CRC计算单元相关内容。 1关于CRC校验 CRC:Cyclic Redundancy Check,即循环冗余校验码。 CRC是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。 循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。 ---来自百度百科 学电子、计算机相关专业的同学都应该学习过CRC的基础原理。其原理说难不难,可以说就是一个公式。同时,
[单片机]
CRC校验、<font color='red'>STM32</font>中CRC计算单元、CRC应用

推荐帖子

基于MCU的家庭防盗报警系统
基于MCU的家庭防盗报警系统基于MCU的家庭防盗报警系统
fish001 微控制器 MCU
【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A (3.5)ncnn的使用BUG补充
上一篇文章笔者试用NCNN出了大问题,模型训练完不能进行图像识别【玄铁杯第三届RISC-V应用创新大赛】LicheePi4A(3)ncnn训练和使用测试-平头哥芯片开放社区-平头哥(t-head.cn)本篇文章再次尝试试用NCNN模型识别固定图像,使用的硬件是荔枝派4a,训练平台是MAIXHUB。ncnn官方模型验证再次参考官方例程,先对官方WIKI里使用的模型进行验证下载GITHUB中的压缩包,提取其中的nanodet_m.bin和nanodet_m.pa
电子烂人 玄铁RISC-V活动专区
【得捷电子Follow me第1期】+基础练习
//内容一:3-5分钟短视频//短视频:https://training.eeworld.com.cn/video/37028已完成,后续补充一个GPS定位的视频(已补充)由于是第一次录视频,质量可能不太行,如果不合格的麻烦指出重新录制。//内容二:项目总结报告//购买的模块简单介绍本次任务要求必须包含五个部分,分别为:主控板-PICOW,扩展板,屏幕,蜂鸣器,GPS模块。主控板为PICOW,其特性如下:采用了RaspberryP
白无常120 DigiKey得捷技术专区
谁知道这是什么太阳能板附图 急急急
这是什么种类的太阳能板,效率怎么样,最好给推荐生产厂家,谢谢!谁知道这是什么太阳能板附图急急急
齐齐123 综合技术交流
D/A转换
数模转换器(D/A)就是一种把数字信号转换成为模拟电信号的器件。实际上,D/A转换器输出的电量并不真正能连续可调,而是以所用D/A转换器的绝对分辨率为单位递减,所以这实际上是准模拟量输出。1.D/A转换器的基本原理D/A转换器用来将数字量转换成模拟量。它的基本要求是输出电压Uo应该和输入数字量D成正比,即Uo=DVR式中VR———参考电压。每一个数字量都是数字代码的按位组合,每一位数字代码都有一定的“权”,对
一世轮回 综合技术交流
网络视频传输设计
随着网络视频服务器,光纤网的迅速普及,网上多媒体应用(如视频会议,数字监控等)正为传统的计算机应用注入新的技术和内容。网络多媒体技术的发展也导致了基于IP技术的网络远程现场视频浏览应运而生。从模拟监控到数字监控,实现了监控技术的一次飞跃,目前最先进的技术就是通过专用视频服务器(瘦服务器)把模拟图像信号转化为数字图像信号后上网,同时通过管理程序对多个视频流进行统一管理,获得授权的用户便可以通过网络看到任何一个监控现场的实时图象,并且可以控制监视器的视角和焦距。针对实时图像
wuyugwz 安防电子
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved