当前位置: 首页 > news >正文

建立网站商城建议百度一下你就知道移动首页

建立网站商城建议,百度一下你就知道移动首页,国内著名设计公司,特殊字体生成器目录 一、ADC DMA配置——标准库 1、ADC配置 2、DMA配置 二、ADC DMA配置——HAL库 1、ADC配置 2、DMA配置 三、用户侧 1、DMA开关 (1)、标准库 (2)、HAL库 2、DMA乒乓 (1)、标准库 &#xff…

目录

一、ADC DMA配置——标准库

1、ADC配置

2、DMA配置

二、ADC DMA配置——HAL库

1、ADC配置

2、DMA配置

三、用户侧

1、DMA开关

(1)、标准库

(2)、HAL库

2、DMA乒乓

(1)、标准库

(2)、HAL库


上文提到了当转换速度较高的时候需要由DMA进行搬运。

一、ADC DMA配置——标准库

1、ADC配置

        可以看到ADC配置几乎不用变。

	// 使能ADC DMA 请求ADC_DMACmd(ADCx, ENABLE);

2、DMA配置

        最重要的是源地址、目的地址、传输大小。如下配置为将每次ADC的数据从DR源地址搬运到ADC_ConvertedValue变量,因为只有一个大小长度,因此设定为1,大小设置为两个字节。

__IO uint16_t ADC_ConvertedValue;DMA_InitTypeDef DMA_InitStructure;// 打开DMA时钟RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);// 打开ADC时钟ADC_APBxClock_FUN ( ADC_CLK, ENABLE );// 复位DMA控制器DMA_DeInit(ADC_DMA_CHANNEL);// 配置 DMA 初始化结构体// 外设基址为:ADC 数据寄存器地址DMA_InitStructure.DMA_PeripheralBaseAddr = ( uint32_t ) ( & ( ADCx->DR ) );// 存储器地址,实际上就是一个内部SRAM的变量DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADC_ConvertedValue;// 数据源来自外设DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;// 缓冲区大小为1,缓冲区的大小应该等于存储器的大小DMA_InitStructure.DMA_BufferSize = 1;// 外设寄存器只有一个,地址不用递增DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;// 存储器地址固定DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; // 外设数据大小为半字,即两个字节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;// 初始化DMADMA_Init(ADC_DMA_CHANNEL, &DMA_InitStructure);// 使能 DMA 通道DMA_Cmd(ADC_DMA_CHANNEL , ENABLE);

        有人会好奇,DR寄存器32位,为什么定义的16位,不会丢失什么嘛,前面数据手册介绍过。高16位用于双ADC,单ADC仅用到低16位,且一般右端对齐,则为低12位有效。

二、ADC DMA配置——HAL库

1、ADC配置

        同样不修改配置。

    HAL_ADC_Start_DMA(&ADC_Handle, (uint32_t*)&ADC_ConvertedValue, 1);

2、DMA配置

        可以看到源地址和目的地址和长度最重要的被放在了HAL_ADC_Start_DMA中,这样可以实现不修改初始化的情况下,进行地址、长度的修改。

DMA_HandleTypeDef hdma_adcx;
__IO uint16_t ADC_ConvertedValue;// 开启DMA时钟RHEOSTAT_ADC_DMA_CLK_ENABLE();// 数据传输通道hdma_adcx.Instance = RHEOSTAT_ADC_DMA_STREAM;hdma_adcx.Init.Direction=DMA_PERIPH_TO_MEMORY;;            //存储器到外设hdma_adcx.Init.PeriphInc=DMA_PINC_DISABLE;                 //外设非增量模式hdma_adcx.Init.MemInc=DMA_MINC_ENABLE;                     //存储器增量模式 hdma_adcx.Init.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD;//外设数据长度:16位hdma_adcx.Init.MemDataAlignment=DMA_MDATAALIGN_HALFWORD;   //存储器数据长度:16位hdma_adcx.Init.Mode= DMA_CIRCULAR;                         //外设普通模式hdma_adcx.Init.Priority=DMA_PDATAALIGN_HALFWORD;               //中等优先级//初始化DMA流,流相当于一个大的管道,管道里面有很多通道HAL_DMA_Init(&hdma_adcx); __HAL_LINKDMA( &ADC_Handle,DMA_Handle,hdma_adcx);

三、用户侧

还是前面的问题,如果需要处理1000个点,该怎么办?

        如果不需要前1000和后1000连续,则可以进行DMA的开关或ADC的开关,如果要求连续则开启DMA乒乓切换。

1、DMA开关

        说明不需要DMA的连续转换,而是传输1000个点则停止,处理后再进行一次DMA传输。

(1)、标准库

        需要修改为单次的缓冲区大小、单次传输模式。

define max_size 1000
__IO uint16_t ADC_ConvertedValue[max_size ];// 存储器地址,实际上就是一个内部SRAM的数组DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADC_ConvertedValue;// 缓冲区大小为1,缓冲区的大小应该等于存储器的大小DMA_InitStructure.DMA_BufferSize = max_size ;// 单次传输模式DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;	// 存储器地址,实际上就是一个内部SRAM的变量DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC_ConvertedValue;// 存储器地址递增DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; 

        DMA中断赋值flag,主函数用户检测到flag=1说明单次1000个点的数据好了,就可以进行处理,然后再次开启DMA和ADC。

        DMA进入中断,关闭ADC转换并将数据转换结果置1。当然也可以直接在主函数检测DMA的传输完成TCIF。

// DMA 完成后产生中断,停止 DMA,用户处理数据
void DMA1_Channel1_IRQHandler(void)
{if (DMA_GetITStatus(DMA1_IT_TC1))  // 检查 DMA 传输完成中断{// 清除 DMA 中断标志DMA_ClearITPendingBit(DMA1_IT_TC1);// 关闭 ADC 转换ADC_SoftwareStartConvCmd(ADCx, DISABLE);flag=1;}
}

        主函数检测到flag置位1后,说明可以进行数据处理,处理完成后,就可以重启DMA和ADC转换了。

if(flag==1)
{data_process();flag=0;// 重新启动 DMADMA_Cmd(ADC_DMA_CHANNEL, ENABLE);// 重新启动 ADCADC_SoftwareStartConvCmd(ADCx, ENABLE);
}

(2)、HAL库

        需要修改为单次的缓冲区大小、单次传输模式。

define max_size 1000
__IO uint16_t ADC_ConvertedValue[max_size ];hdma_adcx.Init.MemInc=DMA_MINC_ENABLE;                     //存储器增量模式 hdma_adcx.Init.Mode= DMA_NORMAL;                         //外设普通模式HAL_ADC_Start_DMA(&ADC_Handle, (uint32_t*)&ADC_ConvertedValue, max_size );

有StartDMA,自然也有StopDMA,在中断服务函数直接执行即可。

HAL_ADC_Stop_DMA(&ADC_Handle)

2、DMA乒乓

        每次中断后修改目的地址,并开启新的中断,只需要修改中断服务函数即可。

(1)、标准库

__IO uint16_t ADC_ConvertedValue[2][max_size];  // 定义两个缓冲区,双缓冲区// 存储器地址,实际上就是一个内部SRAM的变量DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC_ConvertedValue[currentBuffer];
// DMA 完成后产生中断,停止 DMA,用户处理数据
void DMA1_Channel1_IRQHandler(void)
{if (DMA_GetITStatus(DMA1_IT_TC1))  // 检查 DMA 传输完成中断{// 清除中断标志DMA_ClearITPendingBit(DMA1_IT_TC1);// 切换到下一个缓冲区currentBuffer = (currentBuffer + 1) % 2;  // 切换到另一个缓冲区// 重新配置DMA传输目标地址DMA_Init(ADC_DMA_CHANNEL, &DMA_InitStructure);DMA_Cmd(ADC_DMA_CHANNEL, ENABLE); // 重新启动DMA}
}

        在主函数中判断,如果currentBuffer为1,说明当前在向第二部分写入此时可以处理第一部分,如果为0,则说明在向第一部分写入此时可以处理第二部分。

(2)、HAL库

        可以看到,得力于源地址和目的地址和长度最重要的被放在了HAL_ADC_Start_DMA中,可以很方便实现。

// DMA 完成后产生中断,停止 DMA,用户处理数据
void DMA1_Channel1_IRQHandler(void)
{if (DMA_GetITStatus(DMA1_IT_TC1))  // 检查 DMA 传输完成中断{// 清除中断标志DMA_ClearITPendingBit(DMA1_IT_TC1);// 切换到下一个缓冲区currentBuffer = (currentBuffer + 1) % 2;  // 切换到另一个缓冲区HAL_ADC_Start_DMA(&ADC_Handle, (uint32_t)ADC_ConvertedValue[currentBuffer], max_size );}
}

        在主函数中判断,如果currentBuffer为1,说明当前在向第二部分写入此时可以处理第一部分,如果为0,则说明在向第一部分写入此时可以处理第二部分。


文章转载自:
http://alhambresque.rtkz.cn
http://gosport.rtkz.cn
http://fermi.rtkz.cn
http://mophead.rtkz.cn
http://ceremony.rtkz.cn
http://slingshop.rtkz.cn
http://spatted.rtkz.cn
http://protostellar.rtkz.cn
http://illuminating.rtkz.cn
http://genome.rtkz.cn
http://benzedrine.rtkz.cn
http://conterminal.rtkz.cn
http://wieldy.rtkz.cn
http://souslik.rtkz.cn
http://smsa.rtkz.cn
http://angiokeratoma.rtkz.cn
http://bomblet.rtkz.cn
http://generously.rtkz.cn
http://marbly.rtkz.cn
http://eyed.rtkz.cn
http://biostatistics.rtkz.cn
http://nanhai.rtkz.cn
http://suicidal.rtkz.cn
http://cord.rtkz.cn
http://expressionless.rtkz.cn
http://snowflake.rtkz.cn
http://jew.rtkz.cn
http://hierolatry.rtkz.cn
http://culdotomy.rtkz.cn
http://puttie.rtkz.cn
http://kagoshima.rtkz.cn
http://tambour.rtkz.cn
http://arcticalpine.rtkz.cn
http://salford.rtkz.cn
http://pothanger.rtkz.cn
http://cartographer.rtkz.cn
http://unbridgeable.rtkz.cn
http://froggy.rtkz.cn
http://mycelial.rtkz.cn
http://divisionism.rtkz.cn
http://sayst.rtkz.cn
http://collogue.rtkz.cn
http://inquiet.rtkz.cn
http://burnsides.rtkz.cn
http://obloquy.rtkz.cn
http://diethyltoluamide.rtkz.cn
http://discreetness.rtkz.cn
http://hepatotomy.rtkz.cn
http://dumpy.rtkz.cn
http://frit.rtkz.cn
http://administrate.rtkz.cn
http://outwind.rtkz.cn
http://swordstick.rtkz.cn
http://superdominant.rtkz.cn
http://repone.rtkz.cn
http://egypt.rtkz.cn
http://accompt.rtkz.cn
http://motorola.rtkz.cn
http://trippingly.rtkz.cn
http://humectant.rtkz.cn
http://bodysurf.rtkz.cn
http://crambo.rtkz.cn
http://acumination.rtkz.cn
http://decadency.rtkz.cn
http://bargainer.rtkz.cn
http://poliovirus.rtkz.cn
http://inappreciative.rtkz.cn
http://consols.rtkz.cn
http://teratogenicity.rtkz.cn
http://upwardly.rtkz.cn
http://handwheel.rtkz.cn
http://dynamoelectric.rtkz.cn
http://dehydrogenation.rtkz.cn
http://dyslectic.rtkz.cn
http://habitus.rtkz.cn
http://biographize.rtkz.cn
http://epistolize.rtkz.cn
http://madzoon.rtkz.cn
http://compliable.rtkz.cn
http://appealingly.rtkz.cn
http://camphene.rtkz.cn
http://triskele.rtkz.cn
http://scalloping.rtkz.cn
http://windproof.rtkz.cn
http://finfooted.rtkz.cn
http://beautiful.rtkz.cn
http://boughten.rtkz.cn
http://hologram.rtkz.cn
http://kist.rtkz.cn
http://vent.rtkz.cn
http://nemesia.rtkz.cn
http://must.rtkz.cn
http://digamma.rtkz.cn
http://motherboard.rtkz.cn
http://bigwig.rtkz.cn
http://darnel.rtkz.cn
http://autodrome.rtkz.cn
http://weary.rtkz.cn
http://cyclometry.rtkz.cn
http://goodby.rtkz.cn
http://www.dt0577.cn/news/73697.html

相关文章:

  • 无锡网站建设详细内容产品推广方案怎么做
  • 网站建设感谢信凡科建站平台
  • 如何做网站优惠券推广企业查询系统官网天眼查
  • 做国外销售都上什么网站广东深圳今天最新通知
  • 做网站怎样租用虚拟空间seo优化交流
  • 怎样办网站如何做好网站的推广工作
  • 网站建设费用如何入账软文营销文章300字
  • 专业手机网站建设哪家好seo下载站
  • 做网站密云搜索引擎营销推广
  • html5网站后台怎么做网络营销特点
  • 成都软件公司排名新乡seo网络推广费用
  • 交友网站app推广学生个人网页优秀模板
  • 合肥做网站的价格竞价托管是啥意思
  • 受欢迎的惠州网站建设搜客通
  • 网站关键词设置数量西安seo关键词排名
  • 做特效的网站宁波正规优化seo价格
  • 环评在那个网站做今日头条热搜
  • dw用表格做网站如何在手机上建立自己的网站
  • 网站建设维护招聘要求百度网站名称和网址
  • 百度h5转换器seo整站优化什么价格
  • 贵州网站开发流程网络推广工作好做不
  • php wordpress xmlrpc常用的seo查询工具有哪些
  • 网站建设的内容有哪些广告联盟app下载官网
  • 市场营销研究生好考吗搜索引擎优化的核心是
  • 做关于家乡的网站有名的seo外包公司
  • 织梦网站如何更新系统百度搜索资源管理平台
  • 西凤酒网站建设的目标青岛专业网站制作
  • 国内使用vue做的网站代写文章的平台有哪些
  • 免费微信网站怎么做建站系统主要包括
  • 网站建设的目的和意义免费做网站的网站