你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
评分
查看全部评分
评分
查看全部评分
把DMA开成循环模式,ADC用扫描+持续方式;什么时候想要ADC数据了,直接从数组往出读就可以了。除了有点浪费DMA时间和费点电之外,很省事。
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分