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

工信部备案网站网站拥有权

工信部备案网站,网站拥有权,怎么查询自己房产信息,互联网保险图片目录 一、ADC DMA配置——标准库 1、ADC配置 2、DMA配置 二、ADC DMA配置——HAL库 1、ADC配置 2、DMA配置 三、用户侧 1、DMA开关 #xff08;1#xff09;、标准库 #xff08;2#xff09;、HAL库 2、DMA乒乓 #xff08;1#xff09;、标准库 #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.DirectionDMA_PERIPH_TO_MEMORY;; //存储器到外设hdma_adcx.Init.PeriphIncDMA_PINC_DISABLE; //外设非增量模式hdma_adcx.Init.MemIncDMA_MINC_ENABLE; //存储器增量模式 hdma_adcx.Init.PeriphDataAlignmentDMA_PDATAALIGN_HALFWORD;//外设数据长度:16位hdma_adcx.Init.MemDataAlignmentDMA_MDATAALIGN_HALFWORD; //存储器数据长度:16位hdma_adcx.Init.Mode DMA_CIRCULAR; //外设普通模式hdma_adcx.Init.PriorityDMA_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主函数用户检测到flag1说明单次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);flag1;} }主函数检测到flag置位1后说明可以进行数据处理处理完成后就可以重启DMA和ADC转换了。 if(flag1) {data_process();flag0;// 重新启动 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.MemIncDMA_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://www.eeditor.cn/news/122226/

相关文章:

  • 娄底建设网站的公司电商平台开发公司
  • 大连seo整站优化阿里云建站论坛网站
  • 网站设计教程视频下载关于建设公司网站的申请
  • 正规的高端网站制作公司大题小做网站
  • 网站代码管理公司网站推广是做什么
  • 有个人代做网站的吗wordpress 好玩的功能
  • 淄博做网站哪家好网站报错解析
  • 国家住房与城乡建设部网站本站3天更换一次域名yw
  • 百度网站推广怎么做开发流程管理
  • 产品开发项目管理新手做seo怎么做
  • 松江车墩网站建设wordpress适合seo
  • 外贸网站风格成都网站优化软件
  • 合肥那个公司做网站优化好创建网站企业
  • 智汇隆网站建设网站邮件设置方法
  • 网站平台开发与应用面试网站搭建怎么做
  • 铜川公司做网站国外有没有做问卷调查的网站
  • 溧阳网站建设windows优化大师电脑版
  • 网站内容转载惠州做网站电话
  • 百度怎么对网站处罚百度关键词怎么做排名
  • 做网站用虚拟服务器可以吗seo网站诊断文档案例
  • 北京网站建设最便宜的公司山东省建设工程质量安全协会网站
  • 一个学校怎么制作网站新网站怎样做好外链
  • 网站中的图片必须用 做吗微信网站如何开发
  • 手机怎么打开微信网站太原网站建设推广
  • 大宗商品交易平台软件专业黑帽seo
  • 网站建设中左对齐外贸网站服务商
  • .net电商网站全站开发福田庆三下巴
  • 网站建设销售工作怎么样产品网络营销策划方案
  • 成都专业做网站的公司有哪些关于营销的最新的新闻
  • 教育网站官网入口做网站设计师