STM32/STM8技术论坛
登录
直播中
老天最爱的崽
4年用户
5经验值
擅长:嵌入式技术
私信
关注
[问答]
MM32 用DMA读取ADC数据
开启该帖子的消息推送
MM32
ADC
芯片是MM32F3277
用DMA读取ADC中的数据。现在可以进入DMA中断,但调试器中AD_value一直没有值。求大佬指点一下。
#include "DMA_ADC.h"
uint16_t AD_value[10]; //ADC采样的数据经过DMA传输的数据放在这里
unsigned short LI_ADCflag=0;
//ADC I/O口初始化
void LI_ADC_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA|RCC_AHBENR_GPIOB,ENABLE); //使能ADC I/O时钟
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4; //通道引脚
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; //电平输入
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
void LI_DMA_Init(void)
{
DMA_InitTypeDef DMA_InitStructure;
NVIC_InitTypeDef NVIC_InitStruct;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE); //DMA1时钟使能
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&(ADC1->ADDATA); //ADC数据寄存器地址作为源
DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&AD_value; //将ADC中的数据转移道AD_value中
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC; //数据传输方向,外设作为源
DMA_InitStructure.DMA_BufferSize=10; //传输数据
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable; //外设地址固定
DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable; //内存地址自增
DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord; //半字
DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_Mode=DMA_Mode_Circular; //循环传输
DMA_InitStructure.DMA_Priority=DMA_Priority_High; //通道优先级为最高级
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable; //禁止内存到内存传输
DMA_Init(DMA1_Channel1,&DMA_InitStructure);
DMA_Cmd(DMA1_Channel1,ENABLE); //DMA通道1使能
DMA_ITConfig(DMA1_Channel1,DMA_IT_TC,ENABLE); //DMA中断配置
NVIC_InitStruct.NVIC_IRQChannel =DMA1_Channel1_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemp
ti
onPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
}
void LI_ADC_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); //使能ADC1的时钟
ADC_InitStructure.ADC_Mode=ADC_Mode_Continuous_Scan; //连续扫描
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right; //数据右对齐
ADC_InitStructure.ADC_Resolution=ADC_Resolution_12b; //分辨率12
ADC_InitStructure.ADC_PRESCARE=ADC_PCLK2_PRESCARE_8; //时钟分频8
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_T1_CC1;
ADC_Init(ADC1,&ADC_InitStructure);
ADC_RegularChannelConfig(ADC1, ADC_Channel_4,0, ADC_SampleTime_239_5Cycles);
ADC_DMACmd(ADC1,ENABLE); //向DMA发出请求
ADC_Cmd(ADC1,ENABLE);
}
void DMA1_Channel1_IRQHandler(void)
{
if(DMA_GetITStatus(DMA1_IT_TC1)!=RESET)
{
DMA_ClearITPendingBit(DMA1_IT_TC1);
ADC_SoftwareStartConvCmd(ADC1, DISABLE); //DMA传输20个数据完成,标志置1
LI_ADCflag = 1;
LED_Ctrl(LEDALL,RVS); //LED翻转闪烁
delayms(200);
}
}
回帖
(5)
老天最爱的崽
2021-5-16 19:53:16
读取值的问题已经解决。在DMA初始化中加上
DMA_InitStructure.DMA_Auto_reload = DMA_Auto_Reload_Enable; //自动重载
就可以看见ADC值。但又出现了另一个问题,我读多路ADC时,每次第一组数据总是错误的,后面的数据正常。
读取值的问题已经解决。在DMA初始化中加上
DMA_InitStructure.DMA_Auto_reload = DMA_Auto_Reload_Enable; //自动重载
就可以看见ADC值。但又出现了另一个问题,我读多路ADC时,每次第一组数据总是错误的,后面的数据正常。
举报
陈健
2021-5-17 08:38:15
受到警告
提示:
作者被禁止或删除 内容自动屏蔽
举报
云霄之下
2021-5-21 14:29:28
DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&(ADC1->ADDATA); //ADC数据寄这个改为ADC1->DR看看
DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&(ADC1->ADDATA); //ADC数据寄这个改为ADC1->DR看看
举报
云霄之下
2021-5-21 14:31:09
ADC_RegularChannelConfig(ADC1, ADC_Channel_x, ADC_Channel_x, ADC_Samctl_239_5);多路adc需要配置这个
ADC_RegularChannelConfig(ADC1, ADC_Channel_x, ADC_Channel_x, ADC_Samctl_239_5);多路adc需要配置这个
举报
jinyi7016
2021-11-26 11:58:37
看你的DMA触发了几次啊,ADC的引脚上有没有接信号呢
看你的DMA触发了几次啊,ADC的引脚上有没有接信号呢
举报
更多回帖
rotate(-90deg);
回复
相关问答
MM32
ADC
MM32
MCU产品家族的亮点
2020-12-18
1522
MM32
无法进行烧写的原因有哪些?
2021-04-02
1041
基于
MM32
MCU防疫产品应用解决方案
2021-01-05
1695
MM32
和BLM32是什么关系?
2016-12-06
6555
STM32/GD32/
MM32
配置接近替换型号列表分享
2020-12-30
4138
灵动
MM32
系列是否有技术交流的QQ群
2016-08-22
3208
用
DMA
传输
ADC
转换结果
数据
不正确
2018-08-24
9352
PSOC6通过
DMA
读取
不到
ADC
采样
数据
是哪里出了问题?
2024-02-02
466
freertos怎么
用
dma
发送
adc
数据
2020-07-21
2733
MM
32F103
ADC+DMA
多通道采样
2021-08-27
2944
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分