【STM32】DMA基本原理、寄存器、库函数

嵌入式ARM 2021-09-22 22:32

DMA的基本介绍


1
DMA的基本定义


DMA,全称Direct Memory Access,即直接存储器访问。


DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实现和完成的。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场过程,通过硬件为RAM和IO设备开辟一条直接传输数据的通道,使得CPU的效率大大提高。


2
DMA的主要特征


  • 每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过软件来配置;

  • 在同一个DMA模块上,多个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),优先权设置相等时由硬件决定(请求0优先于请求1,依此类推);

  • 独立数据源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐;

  • 支持循环的缓冲器管理;

  • 每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错),这3个事件标志逻辑或成为一个单独的中断请求;

  • 存储器和存储器间的传输、外设和存储器、存储器和外设之间的传输;

  • 闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和目标;

  • 可编程的数据传输数目:最大为65535。


3
STM33F10x系列芯片DMA控制器


STM32F10x系列芯片最多有2个DMA控制器(DMA2仅存在大容量产品中),DMA1有7个通道。DMA2有5个通道。每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁起来协调各个DMA请求的优先权。


从外设(TIMx[x=1、2、3、4]、ADC1、SPI1、SPI/I2S2、I2Cx[x=1、2]和USARTx[x=1、2、3])产生的7个请求,通过逻辑或输入到DMA1控制器,这意味着同时只能有一个请求有效。各个通道的DMA1请求一览见下图:



从外设(TIMx[5、6、7、8]、ADC3、SPI/I2S3、UART4、DAC通道1、2和SDIO)产生的5个请求,经逻辑或输入到DMA2控制器,这意味着同时只能有一个请求有效。各个通道的DMA2请求一览见下图:




DMA的基本原理


DMA控制器和Cortex™-M3核心共享系统数据总线,执行直接存储器数据传输。当CPU和DMA同时访问相同的目标(RAM或外设)时,DMA请求会暂停CPU访问系统总线达若干个周期,总线仲裁器执行循环调度,以保证CPU至少可以得到一半的系统总线(存储器或外设)带宽。


0
DMA的工作框图



DMA模块的框图看起来比较复杂,接下来会一点一点地对它进行分析。


1
DMA处理


在发生一个事件后,外设向DMA控制器发送一个请求信号。DMA控制器根据通道的优先权处理请求。当DMA控制器开始访问发出请求的外设时,DMA控制器立即发送给它一个应答信号。当从DMA控制器得到应答信号时,外设立即释放它的请求。一旦外设释放了这个请求,DMA控制器同时撤销应答信号。如果有更多的请求时,外设可以启动下一个周期。


总之,每次DMA传送由3个操作组成:

  • 从外设数据寄存器或者从当前外设/存储器地址寄存器指示的存储器地址取数据,第一次传输时的开始地址是DMA_CPARx或DMA_CMARx寄存器指定的外设基地址或存储器单元;

  • 存数据到外设数据寄存器或者当前外设/存储器地址寄存器指示的存储器地址,第一次传输时的开始地址是DMA_CPARx或DMA_CMARx寄存器指定的外设基地址或存储器单元;

  • 执行一次DMA_CNDTRx寄存器的递减操作,该寄存器包含未完成的操作数目。


2
仲裁器


仲裁器根据通道请求的优先级来启动外设/存储器的访问。


优先权管理分2个阶段:

  • 软件:每个通道的优先权可以在DMA_CCRx寄存器中设置,有4个等级:最高优先级、高优先级、中等优先级、低优先级;

  • 硬件:如果2个请求有相同的软件优先级,则较低编号的通道比较高编号的通道有较高的优先权。比如:如果软件优先级相同,通道2优先于通道4。 


注意:在大容量产品和互联型产品中,DMA1控制器拥有高于DMA2控制器的优先级。


3
DMA通道


每个通道都可以在有固定地址的外设寄存器和存储器地址之间执行DMA传输。DMA传输的数据量是可编程的,最大达到65535。包含要传输的数据项数量的寄存器,在每次传输后递减。


4
可编程的数据量


外设和存储器的传输数据量可以通过DMA_CCRx寄存器中的PSIZE和MSIZE位编程。


6
指针增量


通过设置DMA_CCRx寄存器中的PINC和MINC标志位,外设和存储器的指针在每次传输后可以有选择地完成自动增量。当设置为增量模式时,下一个要传输的地址将是前一个地址加上增量值,增量值取决于所选的数据宽度为1、2或4。


第一个传输的地址是存放在DMA_CPARx /DMA_CMARx寄存器中的值。在传输过程中,这些寄存器保持它们初始的数值,软件不能改变和读出当前正在传输的地址(它在内部的当前外设/存储器地址寄存器中)。


当通道配置为非循环模式时,传输结束后(即传输计数变为0)将不再产生DMA操作。要开始新的DMA传输,需要在关闭DMA通道的情况下,在DMA_CNDTRx寄存器中重新写入传输数目。在循环模式下,最后一次传输结束时,DMA_CNDTRx寄存器的内容会自动地被重新加载为其初始数值,内部的当前外设/存储器地址寄存器也被重新加载为DMA_CPARx/DMA_CMARx寄存器设定的初始基地址。


6
循环模式


循环模式用于处理循环缓冲区和连续的数据传输(如ADC的扫描模式)。


在DMA_CCRx寄存器中的CIRC位用于开启这一功能。当启动了循环模式,数据传输的数目变为0时,将会自动地被恢复成配置通道时设置的初值,DMA操作将会继续进行。


7
存储器到存储器模式


DMA通道的操作可以在没有外设请求的情况下进行,这种操作就是存储器到存储器模式。


当设置了DMA_CCRx寄存器中的MEM2MEM位之后,在软件设置了DMA_CCRx寄存器中的EN位启动DMA通道时,DMA传输将马上开始。当DMA_CNDTRx寄存器变为0时,DMA传输结束。存储器到存储器模式不能与循环模式同时使用。


8
可编程的数据传输宽度、对齐方式和数据大小端


当PSIZE和MSIZE不相同时,DMA模块按照下图进行数据对齐。



9
中断


每个DMA通道都可以在DMA传输过半、传输完成和传输错误时产生中断。为应用的灵活性考虑,通过设置寄存器的不同位来打开这些中断。



注意:在大容量产品中,DMA2通道4和DMA2通道5的中断被映射在同一个中断向量上。在互联型产品中,DMA2通道4和DMA2通道5的中断分别有独立的中断向量。所有其他的DMA通道都有自己的中断向量。



DMA相关配置寄存器


DMA配置参数包括:通道地址、优先级、数据传输方向、存储器/外设数据宽度、存储器/外设地址是否增量、循环模式、数据传输量。


1
DMA通道x配置寄存器(DMA_CCRx)



作用:配置DMA通道模式、优先级、数据宽度、是否增量、传输方向、是否增量参数。


2
DMA通道x传输数量寄存器(DMA_CNDTRx)



作用:配置DMA通道的数据传输数量,范围为0-65535。


主要注意:该寄存器的值会随着传输的进行而减少,当该寄存器的值为0的时候,就代表着此次传输已经全部结束了。也就是说,当DMA通道开启传输了之后,该寄存器变成只读,指示的是数据传输数量中剩余待传输的字节数目。


3
DMA通道x外设地址寄存器(DMA_CPARx)



作用:配置DMA通道的外设地址。比如使用串口1的数据引脚,则该寄存器必须写上0x40013804(其实就是串口数据寄存器的地址,&USART1->DR的值)。


主要注意:当通道已经开启(被使能),此时DMA通道外设地址寄存器就不能修改了。


4
DMA通道x存储器地址寄存器(DMA_CMARx)



作用:配置DMA通道存储器地址。


主要注意:当通道已经开启(被使能),此时DMA通道存储器地址寄存器就不能修改了。


5
DMA中断状态寄存器(DMA_ISR)



作用:可以获取DMA传输的状态标志。


注意:此寄存器为只读寄存器,所以在这些位被置位后只能通过其他的操作来清除。


6
DMA中断标志清除寄存器(DMA_IFCR)



作用:通过往寄存器内写1来清除DMA_ISR被置位的位。



DMA通道配置过程


下面是配置DMA通道x的过程(x代表通道号):

  • 在DMA_CPARx寄存器中设置外设寄存器的地址。发生外设数据传输请求时,这个地址将是数据传输的源或目标;

  • 在DMA_CMARx寄存器中设置数据存储器的地址。发生外设数据传输请求时,传输的数据将从这个地址读出或写入这个地址;

  • 在DMA_CNDTRx寄存器中设置要传输的数据量。在每个数据传输后,这个数值递减;

  • 在DMA_CCRx寄存器的PL[1:0]位中设置通道的优先级;

  • 在DMA_CCRx寄存器中设置数据传输的方向、循环模式、外设和存储器的增量模式、外设和存储器的数据宽度、传输一半产生中断或传输完成产生中断;

  • 设置DMA_CCRx寄存器的ENABLE位,启动该通道。


一旦启动了DMA通道,它既可响应连到该通道上的外设的DMA请求。当传输一半的数据后,半传输标志(HTIF)被置1,当设置了允许半传输中断位(HTIE)时,将产生一个中断请求。在数据传输结束后,传输完成标志(TCIF)被置1,当设置了允许传输完成中断位(TCIE)时,将产生一个中断请求。



DMA相关配置库函数


1
1个初始化函数


void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct);


作用:初始化DMA通道外设寄存器地址、数据存储器地址、数据传输的方向、传输的数据量、外设和存储器的增量模式、外设和存储器的数据宽度、是否开启循环模式。


2
2个使能函数


void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState);
void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState);


作用:前者使能DMA通道;后者使能DMA通道中断。


3
2个传输数据量函数


void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNumber); 
uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx);


作用:前者设置DMA通道的传输数据量(DMA处于关闭状态);后者获取当前DMA通道传输剩余数据量(DMA处于开启状态)。


4
4个状态位函数


FlagStatus DMA_GetFlagStatus(uint32_t DMAy_FLAG);
void DMA_ClearFlag(uint32_t DMAy_FLAG);
ITStatus DMA_GetITStatus(uint32_t DMAy_IT);
void DMA_ClearITPendingBit(uint32_t DMAy_IT);

作用:获取DMA通道的各种状态位,并能清除这些状态位。


5
8个外设DMA使能函数


void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState);
void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void DAC_DMACmd(uint32_t DAC_Channel, FunctionalState NewState);
void I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState);
void SDIO_DMACmd(FunctionalState NewState);
void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState NewState);
void TIM_DMAConfig(TIM_TypeDef* TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength);
void TIM_DMACmd(TIM_TypeDef* TIMx, uint16_t TIM_DMASource, FunctionalState NewState);


作用:用于使能外设的DMA通道。



DMA的一般步骤


实验目标:利用外部按键KEY0来控制DMA的传送,每按一次KEY0,DMA就传送一次数据到USART1,然后在TFTLCD模块上显示进度等信息。


  • 使能DMA时钟。调用函数:RCC_AHBPeriphClockCmd();

  • 初始化DMA通道参数。调用函数:DMA_Init();

  • 使能串口DMA发送,串口DMA使能函数。调用函数:USART_DMACmd();

  • 使能DMA1通道,启动传输。调用函数:DMA_Cmd();

  • 查询DMA传输状态。调用函数:DMA_GetFlagStatus();

  • 获取/设置通道当前剩余数据量。调用函数:DMA_GetCurrDataCounter();DMA_SetCurrDataCounter()。


下面按照这个一般步骤来进行一个简单的DMA程序:


DMA_InitTypeDef DMA_InitStructure; u16 DMA1_MEM_LEN;//保存DMA每次数据传送的长度       //DMA1的各通道配置//这里的传输形式是固定的,这点要根据不同的情况来修改//从存储器->外设模式/8位数据宽度/存储器增量模式//DMA_CHx:DMA通道CHx//cpar:外设地址//cmar:存储器地址//cndtr:数据传输量 void MYDMA_Config(DMA_Channel_TypeDef* DMA_CHx,u32 cpar,u32 cmar,u16 cndtr){   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);  //使能DMA传输          DMA_DeInit(DMA_CHx);   //将DMA的通道1寄存器重设为缺省值   DMA1_MEM_LEN=cndtr;  DMA_InitStructure.DMA_PeripheralBaseAddr = cpar;  //DMA外设基地址  DMA_InitStructure.DMA_MemoryBaseAddr = cmar;  //DMA内存基地址  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;  //数据传输方向,从内存读取发送到外设  DMA_InitStructure.DMA_BufferSize = cndtr;  //DMA通道的DMA缓存的大小  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  //外设地址寄存器不变  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  //内存地址寄存器递增  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;  //数据宽度为8位  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //数据宽度为8位  DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;  //工作在正常模式  DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA通道 x拥有中优先级   DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  //DMA通道x没有设置为内存到内存传输  DMA_Init(DMA_CHx, &DMA_InitStructure);  //根据DMA_InitStruct中指定的参数初始化DMA的通道USART1_Tx_DMA_Channel所标识的寄存器      } //开启一次DMA传输void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx){   DMA_Cmd(DMA_CHx, DISABLE );  //关闭USART1 TX DMA1 所指示的通道         DMA_SetCurrDataCounter(DMA_CHx,DMA1_MEM_LEN);//DMA通道的DMA缓存的大小   DMA_Cmd(DMA_CHx, ENABLE);  //使能USART1 TX DMA1 所指示的通道 }


#define SEND_BUF_SIZE 8200  //发送数据长度,最好等于sizeof(TEXT_TO_SEND)+2的整数倍. u8 SendBuff[SEND_BUF_SIZE];  //发送数据缓冲区const u8 TEXT_TO_SEND[]={"STM32F1 DMA 串口实验"}; int main(void){     u16 i;  u8 t=0;  u8 j,mask=0;  float pro=0;        //进度   delay_init();         //延时函数初始化        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);        //设置中断优先级分组为组2:2位抢占优先级,2位响应优先级  uart_init(115200);     //串口初始化为115200  LED_Init();          //初始化与LED连接的硬件接口  LCD_Init();           //初始化LCD     KEY_Init();        //按键初始化          MYDMA_Config(DMA1_Channel4,(u32)&USART1->DR,(u32)SendBuff,SEND_BUF_SIZE);//DMA1通道4,外设为串口1,存储器为SendBuff,长度SEND_BUF_SIZE.   POINT_COLOR=RED;//设置字体为红色   LCD_ShowString(30,50,200,16,16,"WarShip STM32");    LCD_ShowString(30,70,200,16,16,"DMA TEST");    LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");  LCD_ShowString(30,110,200,16,16,"2015/1/15");     LCD_ShowString(30,130,200,16,16,"KEY0:Start");  //显示提示信息    j=sizeof(TEXT_TO_SEND);       for(i=0;i<SEND_BUF_SIZE;i++)//填充数据到SendBuff        {    if(t>=j)//加入换行符    {      if(mask)      {        SendBuff[i]=0x0a;        t=0;      }else       {        SendBuff[i]=0x0d;        mask++;      }      }else//复制TEXT_TO_SEND语句    {      mask=0;      SendBuff[i]=TEXT_TO_SEND[t];      t++;    }                 }       POINT_COLOR=BLUE;//设置字体为蓝色      i=0;  while(1)  {    t=KEY_Scan(0);    if(t==KEY0_PRES)//KEY0按下    {      LCD_ShowString(30,150,200,16,16,"Start Transimit....");      LCD_ShowString(30,170,200,16,16,"   %");//显示百分号      printf("\r\nDMA DATA:\r\n");                   USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE); //使能串口1的DMA发送            MYDMA_Enable(DMA1_Channel4);//开始一次DMA传输!            //等待DMA传输完成,此时我们来做另外一些事,点灯            //实际应用中,传输数据期间,可以执行另外的任务            while(1)            {        if(DMA_GetFlagStatus(DMA1_FLAG_TC4)!=RESET)  //判断通道4传输完成        {          DMA_ClearFlag(DMA1_FLAG_TC4);//清除通道4传输完成标志          break;                     }        pro=DMA_GetCurrDataCounter(DMA1_Channel4);//得到当前还剩余多少个数据        pro=1-pro/SEND_BUF_SIZE;//得到百分比            pro*=100;      //扩大100倍        LCD_ShowNum(30,170,pro,3,16);                }                LCD_ShowNum(30,170,100,3,16);//显示100%          LCD_ShowString(30,150,200,16,16,"Transimit Finished!");//提示传送完成    }    i++;    delay_ms(10);    if(i==20)    {      LED0=!LED0;//提示系统正在运行        i=0;    }         }}


1
MYDMA_Enable函数


传输数据量寄存器的值,在DMA的传输过程中,该值会随着传输的进行而减少,当该寄存器的值为0的时候,就代表着此次传输已经全部结束了。在没有设置循环模式的情况下,想要下一次DMA传输的时候,还保持原有的传输数据,就需要重新赋予该寄存器应有的值。


该寄存器在DMA使能的情况下,是一个只读寄存器,也就是说,要想改变这个寄存器,必须先要让DMA失能:


DMA_Cmd(DMA_CHx, DISABLE );  //关闭USART1 TX DMA1 所指示的通道      DMA_SetCurrDataCounter(DMA_CHx,DMA1_MEM_LEN);//DMA通道的DMA缓存的大小DMA_Cmd(DMA_CHx, ENABLE);  //使能USART1 TX DMA1 所指示的通道



2
main函数


在main函数中,先判断DMA1通道4传输完成,这里需要用到一个标志位判断:


if(DMA_GetFlagStatus(DMA1_FLAG_TC4)!=RESET)  //判断通道4传输完成{  DMA_ClearFlag(DMA1_FLAG_TC4);//清除通道4传输完成标志  break; }


END

*本文转自CSDN,作者「Yngz_Miao」

*原文:https://blog.csdn.net/qq_38410730/article/details/80270444


版权归原作者所有,如有侵权,请联系删除。

推荐阅读
缺货涨价潮下,使用GD32替代STM32的体验
HC32F460开发板之点亮板载的0.91寸OLED
国产替代环境下,测试了下GD32E230C8T6最小系统板

→点关注,不迷路←
嵌入式ARM 关注这个时代最火的嵌入式ARM,你想知道的都在这里。
评论
  • RK3506 是瑞芯微推出的MPU产品,芯片制程为22nm,定位于轻量级、低成本解决方案。该MPU具有低功耗、外设接口丰富、实时性高的特点,适合用多种工商业场景。本文将基于RK3506的设计特点,为大家分析其应用场景。RK3506核心板主要分为三个型号,各型号间的区别如下图:​图 1  RK3506核心板处理器型号场景1:显示HMIRK3506核心板显示接口支持RGB、MIPI、QSPI输出,且支持2D图形加速,轻松运行QT、LVGL等GUI,最快3S内开
    万象奥科 2024-12-11 15:42 66浏览
  • 时源芯微——RE超标整机定位与解决详细流程一、 初步测量与问题确认使用专业的电磁辐射测量设备,对整机的辐射发射进行精确测量。确认是否存在RE超标问题,并记录超标频段和幅度。二、电缆检查与处理若存在信号电缆:步骤一:拔掉所有信号电缆,仅保留电源线,再次测量整机的辐射发射。若测量合格:判定问题出在信号电缆上,可能是电缆的共模电流导致。逐一连接信号电缆,每次连接后测量,定位具体哪根电缆或接口导致超标。对问题电缆进行处理,如加共模扼流圈、滤波器,或优化电缆布局和屏蔽。重新连接所有电缆,再次测量
    时源芯微 2024-12-11 17:11 70浏览
  • 全球知名半导体制造商ROHM Co., Ltd.(以下简称“罗姆”)宣布与Taiwan Semiconductor Manufacturing Company Limited(以下简称“台积公司”)就车载氮化镓功率器件的开发和量产事宜建立战略合作伙伴关系。通过该合作关系,双方将致力于将罗姆的氮化镓器件开发技术与台积公司业界先进的GaN-on-Silicon工艺技术优势结合起来,满足市场对高耐压和高频特性优异的功率元器件日益增长的需求。氮化镓功率器件目前主要被用于AC适配器和服务器电源等消费电子和
    电子资讯报 2024-12-10 17:09 84浏览
  • 【萤火工场CEM5826-M11测评】OLED显示雷达数据本文结合之前关于串口打印雷达监测数据的研究,进一步扩展至 OLED 屏幕显示。该项目整体分为两部分: 一、框架显示; 二、数据采集与填充显示。为了减小 MCU 负担,采用 局部刷新 的方案。1. 显示框架所需库函数 Wire.h 、Adafruit_GFX.h 、Adafruit_SSD1306.h . 代码#include #include #include #include "logo_128x64.h"#include "logo_
    无垠的广袤 2024-12-10 14:03 69浏览
  •         在有电流流过的导线周围会感生出磁场,再用霍尔器件检测由电流感生的磁场,即可测出产生这个磁场的电流的量值。由此就可以构成霍尔电流、电压传感器。因为霍尔器件的输出电压与加在它上面的磁感应强度以及流过其中的工作电流的乘积成比例,是一个具有乘法器功能的器件,并且可与各种逻辑电路直接接口,还可以直接驱动各种性质的负载。因为霍尔器件的应用原理简单,信号处理方便,器件本身又具有一系列的du特优点,所以在变频器中也发挥了非常重要的作用。  &nb
    锦正茂科技 2024-12-10 12:57 76浏览
  • 概述 通过前面的研究学习,已经可以在CycloneVGX器件中成功实现完整的TDC(或者说完整的TDL,即延时线),测试结果也比较满足,解决了超大BIN尺寸以及大量0尺寸BIN的问题,但是还是存在一些之前系列器件还未遇到的问题,这些问题将在本文中进行详细描述介绍。 在五代Cyclone器件内部系统时钟受限的情况下,意味着大量逻辑资源将被浪费在于实现较大长度的TDL上面。是否可以找到方法可以对此前TDL的长度进行优化呢?本文还将探讨这个问题。TDC前段BIN颗粒堵塞问题分析 将延时链在逻辑中实现后
    coyoo 2024-12-10 13:28 101浏览
  • 天问Block和Mixly是两个不同的编程工具,分别在单片机开发和教育编程领域有各自的应用。以下是对它们的详细比较: 基本定义 天问Block:天问Block是一个基于区块链技术的数字身份验证和数据交换平台。它的目标是为用户提供一个安全、去中心化、可信任的数字身份验证和数据交换解决方案。 Mixly:Mixly是一款由北京师范大学教育学部创客教育实验室开发的图形化编程软件,旨在为初学者提供一个易于学习和使用的Arduino编程环境。 主要功能 天问Block:支持STC全系列8位单片机,32位
    丙丁先生 2024-12-11 13:15 49浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-10 16:13 105浏览
  •         霍尔传感器是根据霍尔效应制作的一种磁场传感器。霍尔效应是磁电效应的一种,这一现象是霍尔(A.H.Hall,1855—1938)于1879年在研究金属的导电机构时发现的。后来发现半导体、导电流体等也有这种效应,而半导体的霍尔效应比金属强得多,利用这现象制成的各种霍尔元件,广泛地应用于工业自动化技术、检测技术及信息处理等方面。霍尔效应是研究半导体材料性能的基本方法。通过霍尔效应实验测定的霍尔系数,能够判断半导体材料的导电类型、载流子浓度及载流子
    锦正茂科技 2024-12-10 11:07 64浏览
  • 近日,搭载紫光展锐W517芯片平台的INMO GO2由影目科技正式推出。作为全球首款专为商务场景设计的智能翻译眼镜,INMO GO2 以“快、准、稳”三大核心优势,突破传统翻译产品局限,为全球商务人士带来高效、自然、稳定的跨语言交流体验。 INMO GO2内置的W517芯片,是紫光展锐4G旗舰级智能穿戴平台,采用四核处理器,具有高性能、低功耗的优势,内置超微高集成技术,采用先进工艺,计算能力相比同档位竞品提升4倍,强大的性能提供更加多样化的应用场景。【视频见P盘链接】 依托“
    紫光展锐 2024-12-11 11:50 47浏览
  • 我的一台很多年前人家不要了的九十年代SONY台式组合音响,接手时只有CD功能不行了,因为不需要,也就没修,只使用收音机、磁带机和外接信号功能就够了。最近五年在外地,就断电闲置,没使用了。今年9月回到家里,就一个劲儿地忙着收拾家当,忙了一个多月,太多事啦!修了电气,清理了闲置不用了的电器和电子,就是一个劲儿地扔扔扔!几十年的“工匠式”收留收藏,只能断舍离,拆解不过来的了。一天,忽然感觉室内有股臭味,用鼻子的嗅觉功能朝着臭味重的方向寻找,觉得应该就是这台组合音响?怎么会呢?这无机物的东西不会腐臭吧?
    自做自受 2024-12-10 16:34 136浏览
  • 一、SAE J1939协议概述SAE J1939协议是由美国汽车工程师协会(SAE,Society of Automotive Engineers)定义的一种用于重型车辆和工业设备中的通信协议,主要应用于车辆和设备之间的实时数据交换。J1939基于CAN(Controller Area Network)总线技术,使用29bit的扩展标识符和扩展数据帧,CAN通信速率为250Kbps,用于车载电子控制单元(ECU)之间的通信和控制。小北同学在之前也对J1939协议做过扫盲科普【科普系列】SAE J
    北汇信息 2024-12-11 15:45 74浏览
  • 智能汽车可替换LED前照灯控制运行的原理涉及多个方面,包括自适应前照灯系统(AFS)的工作原理、传感器的应用、步进电机的控制以及模糊控制策略等。当下时代的智能汽车灯光控制系统通过车载网关控制单元集中控制,表现特殊点的有特斯拉,仅通过前车身控制器,整个系统就包括了灯光旋转开关、车灯变光开关、左LED前照灯总成、右LED前照灯总成、转向柱电子控制单元、CAN数据总线接口、组合仪表控制单元、车载网关控制单元等器件。变光开关、转向开关和辅助操作系统一般连为一体,开关之间通过内部线束和转向柱装置连接为多,
    lauguo2013 2024-12-10 15:53 81浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦