你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
stm32一个ADC,使用两个通道,可以同时采集吗?不使用DMA
[复制链接]
小乐子531
提问时间:2019-4-3 11:01 /
stm32一个ADC,使用两个通道,可以同时采集吗?不使用DMA
我使用后,传输的数据全部是后一个通道的值,不知道什么原因?求大神帮忙解决。
应该是存入同一个寄存器,覆盖了才结束标志位,请问怎么解决。
赞
1
收藏
0
评论
8
分享
发布时间:2019-4-3 11:01
举报
请先
登录
后回复
8个回答
wenyangzeng
回答时间:2019-4-3 11:49:14
a0a.1 32b0c
2个以上ADC采样必须设置成扫描模式:
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
评分
参与人数
1
蝴蝶豆
+3
收起
理由
STMCU
+ 3
查看全部评分
赞
0
评论
回复
支持
反对
edmundlee
回答时间:2019-4-3 12:27:27
a0a.1 32b0c
一个ADC靠开关选择其中之一的通道采样, 能怎样同时?二个开关同时闭合?子细想想都知道这是不可能的
评分
参与人数
1
蝴蝶豆
+2
收起
理由
STMCU
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
七哥
回答时间:2019-4-3 12:32:52
a0a.1 32b0c
DMA很好用的。
把DMA开成循环模式,ADC用扫描+持续方式;什么时候想要ADC数据了,直接从数组往出读就可以了。除了有点浪费DMA时间和费点电之外,很省事。
/**
* @brief DMA1 channel1 configuration
* @param None
* @retval None
*/
void DMA1_Configuration(void)
{
/* DMA1 channel1 configuration ----------------------------------------------*/
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC1ConvertedValue;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = 64;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_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);
/* Enable DMA1 channel1 */
DMA_Cmd(DMA1_Channel1, ENABLE);
}
/**
* @brief ADC1 configuration
* @param None
* @retval None
*/
void ADC1_Configuration(void)
{
/* ADC1 configuration ------------------------------------------------------*/
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
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;
ADC_Init(ADC1, &ADC_InitStructure);
/* ADC1 regular channels configuration */
ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 2, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 3, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 4, ADC_SampleTime_239Cycles5);
/* Enable ADC1 DMA */
ADC_DMACmd(ADC1, ENABLE);
/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE);
/* Tsensor Vref ENABLE */
ADC_TempSensorVrefintCmd(ENABLE);
/* Enable ADC1 reset calibaration register */
ADC_ResetCalibration(ADC1);
/* Check the end of ADC1 reset calibration register */
while(ADC_GetResetCalibrationStatus(ADC1));
/* Start ADC1 calibaration */
ADC_StartCalibration(ADC1);
/* Check the end of ADC1 calibration */
while(ADC_GetCalibrationStatus(ADC1));
/* Start ADC1 Software Conversion */
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
复制代码
评分
参与人数
1
蝴蝶豆
+3
收起
理由
STMCU
+ 3
查看全部评分
赞
0
评论
回复
支持
反对
大陶
回答时间:2019-4-3 12:59:05
a0a.1 32b0c
可以的啊 可以双通道 规则采样 现在第一个通道 后采集第二个通道
评分
参与人数
1
蝴蝶豆
+2
收起
理由
STMCU
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
一代睡神的崛起
回答时间:2019-4-4 13:36:46
a0a.1 32b0c
datasheet上讲得很详细了,ADC采样存在几种不同的模式,但是同时使能通道采集是没有这种说法的
评分
参与人数
1
蝴蝶豆
+3
收起
理由
STMCU
+ 3
查看全部评分
赞
0
评论
回复
支持
反对
lida
回答时间:2019-4-9 16:49:09
a0a.1 32b0c
顶下楼主,正在做这块。
赞
0
评论
回复
支持
反对
yulanhao
回答时间:2019-4-9 18:58:55
a0a.1 32b0c
我也在纠结这个问题 哈哈哈 过两天看看数据手册
赞
0
评论
回复
支持
反对
shuuei
回答时间:2021-2-3 14:02:53
a4a.1 32b0c
同问题。。。寄存器只有一个。。。目前一个ADC俩通道,发现寄存器中两个通道的值都会显示。
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
评分
查看全部评分
评分
查看全部评分
把DMA开成循环模式,ADC用扫描+持续方式;什么时候想要ADC数据了,直接从数组往出读就可以了。除了有点浪费DMA时间和费点电之外,很省事。
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分