STM32 ADC DMA,UART利用DMA传送ADC数据
来源:互联网 发布:网络不给力是什么意思 编辑:程序博客网 时间:2024/05/16 01:33
写此文章目的:
1、记录如何用DMA获取ADC数据,及利用DMA进行uart数据传输
2、注意点:ADC使用的是软件触发,由于启用DMA功能,所以ADC只用利用 ADC_SoftwareStartConvCmd(ADC1, ENABLE)”来启动初次转换,后续自动进行,至于原因暂未搞清,待研究。
本想利用定时器触发转换的,后来看到人家的博文只要软件触发一次就好。
3、望他人指教,谢谢
void DMA_ADC_Init(void){RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);DMA_DeInit(DMA1_Channel1);ADC_DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_BASE + ADC_DR_OFFSET;//外设地址 ADC_DMA_InitStructure.DMA_MemoryBaseAddr = (u32)ADC1ConvertedValue;//AD转换数据存储地址 ADC_DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//DMA方向,外设到内存 ADC_DMA_InitStructure.DMA_BufferSize = ADC_DMA_BufferSize;//深度 ADC_DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;ADC_DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//目标内存自增 ADC_DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//数据模式半字 ADC_DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//数据模式半字//ADC_DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;ADC_DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//内存写入循环模式 ADC_DMA_InitStructure.DMA_Priority = DMA_Priority_High;ADC_DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;DMA_Init(DMA1_Channel1, &ADC_DMA_InitStructure); //DMA_ITConfig(DMA1_Channel1,DMA_IT_TC,ENABLE);DMA_Cmd(DMA1_Channel1, ENABLE);} void ADC1_INIT(void){ADC_InitTypeDef ADC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE);ADC1_GPIO_Configuration();ADC_DeInit(ADC1);ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//单通道 ADC_InitStructure.ADC_ScanConvMode = DISABLE;//多通道扫描关闭 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//单通道连续转换 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//无外部转换触发,软件触发 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//数据右对齐 ADC_InitStructure.ADC_NbrOfChannel = 1;ADC_Init(ADC1, &ADC_InitStructure);ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_28Cycles5); ADC_Cmd(ADC1, ENABLE);ADC_ResetCalibration(ADC1);while(ADC_GetResetCalibrationStatus(ADC1));ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1));ADC_DMACmd(ADC1, ENABLE);}
<pre name="code" class="objc">void USART_Configuration(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);USART1_GPIO_Configuration();USART_DeInit(USART1);USART_InitStructure.USART_BaudRate = 115200;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Tx;USART_Init(USART1, &USART_InitStructure);USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);DMA_Cmd(DMA1_Channel4, ENABLE);USART_Cmd(USART1, ENABLE);}void DMA_USART_Init(void){RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);DMA_DeInit(DMA1_Channel4);DMA_DeInit(DMA1_Channel4); USART_DMA_InitStructure.DMA_PeripheralBaseAddr = USART1_BASE + USART_DR_BASE;USART_DMA_InitStructure.DMA_MemoryBaseAddr = (u32)ADC1ConvertedValue;USART_DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;USART_DMA_InitStructure.DMA_BufferSize = 1;USART_DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;USART_DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;USART_DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;USART_DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;USART_DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;USART_DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;USART_DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;DMA_Init(DMA1_Channel4, &USART_DMA_InitStructure);}
int main(void){ NVIC_Configuration();SysTick_Init();DMA_USART_Init();USART_Configuration();DMA_ADC_Init();ADC1_INIT();ADC_SoftwareStartConvCmd(ADC1, ENABLE);while(1){}//return 0;}
0 0
- STM32 ADC DMA,UART利用DMA传送ADC数据
- STM32+DMA+UART+ADC+内部温度传感器
- STM32 DMA USART ADC
- ADC-DMA For STM32
- STM32--ADC(DMA)
- STM32 ADC—DMA传输
- STM32 使用DMA处理ADC
- STM32 ADC结合DMA数据采样与软件滤波处理
- stm32 adc dma多通道采样 数据错位 的解决方法
- STM32 ADC结合DMA数据采样与软件滤波处理
- STM32 ADC结合DMA数据采样与软件滤波处理
- STM32:ADC采集数据实例(采用DMA模式)
- STM32学习笔记之ADC--DMA方式
- STM32 使用DMA处理ADC 学习笔记!!
- 战舰板stm32的adc dma实验
- stm32之adc双通道的实现dma
- STM32的ADC的DMA方式
- stm32-10ADC实验(DMA方式)
- 二叉树的重建,已知先序中序求后序,已知后序中序求先序
- 设计模式(结构型)之装饰者模式(Decorator Pattern)
- 云主机和服务器的区别
- 网易云硬盘系统简介
- 高并发量网站解决方案
- STM32 ADC DMA,UART利用DMA传送ADC数据
- res里面的drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)
- gem命令
- 适用于openwrt的串口读写程序和资料(转载)
- 计算机编程中设计模式理解和使用前言
- 【协议分析】HTTP2技术变革的冲击和影响分析
- IOS ---网络异步请求
- 交叉验证
- AutoMapper的配置方法