STM32多通道AD转换.docx_第1页
STM32多通道AD转换.docx_第2页
STM32多通道AD转换.docx_第3页
STM32多通道AD转换.docx_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

关于AD多通道采集的总结前几天小试了下,用STM32做了个万用表,采集电压电流电阻并液晶显示。期间遇到一个最大的问题应该就是,要开启多个AD通道,结合DMA传输,小结下下面是我对AD的配置,还有DMAvoidDMA_ADC_Config()/*DMAchannel1configuration-*/DMA_DeInit(DMA_Channel1);/复位DMA通道xDMA_InitStructure.DMA_PeripheralBaseAddr=ADC_DR_Address;/定义DMA通道外设基地址=ADC1_DR_Address源/AD采集到的数据存放的寄存器DMA_InitStructure.DMA_MemoryBaseAddr=(u32)ADC_RegularConvertedValueTab;/定义DMA通道存储器地址,内存中的数据目的DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;/指定外设为源地址DMA_InitStructure.DMA_BufferSize=4;/定义DMA缓冲区大小4,4路AD,最后采集到的数值放在4位数组中DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;/当前外设寄存器地址不变DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;/当前存储器地址递增DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;/定义外设数据宽度16位DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;/定义存储器数据宽度16位DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;/DMA通道操作模式位环形缓冲模式DMA_InitStructure.DMA_Priority=DMA_Priority_High;/DMA通道优先级高DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;/禁止DMA通道存储器到存储器传输DMA_Init(DMA_Channel1,&DMA_InitStructure);/初始化DMA通道1DMA_Cmd(DMA_Channel1,ENABLE);/使能DMA通道1voidADC1_config()/*ADC1configuration-*/ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;/AD转换模式ADC_InitStructure.ADC_ScanConvMode=ENABLE;/使能扫描,多通道ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;/连续转换ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;/有软件控制转换ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;/数据右对齐ADC_InitStructure.ADC_NbrOfChannel=4;/转换通道为通道4,4个通道来回扫描ADC_Init(ADC1,&ADC_InitStructure);/*ADC1regularchannel14configuration*/ADC1选择信道14|15,采集次序1,采样时间55.5个周期ADC_RegularChannelConfig(ADC1,ADC_Channel_14,1,ADC_SampleTime_55Cycles5);/通道14,PC4扫面顺序1ADC_RegularChannelConfig(ADC1,ADC_Channel_15,2,ADC_SampleTime_55Cycles5);ADC_RegularChannelConfig(ADC1,ADC_Channel_6,3,ADC_SampleTime_55Cycles5);ADC_RegularChannelConfig(ADC1,ADC_Channel_4,4,ADC_SampleTime_55Cycles5);DMA其实开一个就够了,它可以定义缓冲区大小,然后配置成DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;/当前存储器地址递增这样就可以传递多个数据,我是定义了一个数组vu16ADC_RegularConvertedValueTab4;AD采集到的值放在寄存器ADC_DR_Address(u32)0x4001244C)中,每次采集好后DMA把数据取到数组中,接下去配置AD的时候采用扫描模式ADC_InitStructure.ADC_ScanConvMode=ENABLE;/使能扫描,多通道多个通道在下面开启,并配置顺序ADC_RegularChannelConfig(ADC1,ADC_Channel_14,1,ADC_SampleTime_55Cycles5);/通道14,PC4扫面顺序1ADC_RegularChannelConfig(ADC1,ADC_Channel_15,2,ADC_SampleTime_55Cycles5);ADC_RegularChannelConfig(ADC1,ADC_Channel_6,3,ADC_SampleTime_55Cycles5);ADC_RegularChannelConfig(ADC1,ADC_Channel_4,4,ADC_SampleTime_55Cycles5);这样AD就来回采集通道141564结合DMA后把数据存在刚才定义的数组中。以上是心得,下面是一些疑问1.在配置GPIO的时候我把AD口配成了输出模式,但是后来我把这段注释掉

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论