ST意法半导体
登录
直播中
岳臻俊
8年用户
1086经验值
私信
关注
[问答]
STM32G431 MCU ADC如何控制采样率?
开启该帖子的消息推送
adc
采样率
我在双模式下使用
STM32
G431 MCU ADC。我试图控制采样率并发现了一个令人沮丧的问题。我不需要扫描多个频道。虽然获得最大采样率或通过预分频器控制采样率的唯一方法是启用扫描模式。这将是一个可以接受的变通办法,但扫描模式会将它自己不需要的伪影引入样本中。在扫描模式下,虽然我可以获得我想要的速率,但我从扫描的通道中获得了我不需要的额外数据。
如果我不使用扫描模式,采样率固定在 300ksps 左右,这不够快。除此之外,在这种情况下,通过预分频器显然不可能降低采样率。
有什么想法可以在没有扫描模式的情况下进行这些转换,同时完全控制 adc 时钟吗?
void
MX_ADC1_Init
(
void
)
{
ADC_Mul
ti
ModeTypeDef multimode = {0};
ADC_ChannelConfTypeDef sConfig = {0};
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV2;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.GainCompensation = 0;
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
hadc1.Init.EOCSelection =ADC_EOC_SINGLE_CONV;
hadc1.Init.LowPowerAutoWait = DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
hadc1.Init.NbrOfConversion = 5;//ADC_BUFFER_LEN;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.DMAContinuousRequests = DISABLE;
hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
hadc1.Init.OversamplingMode = DISABLE;
/* oversmp.Ratio=ADC_OVERSAMPLING_RATIO_16;
oversmp.RightBitShift =0;
oversmp.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
oversmp.OversamplingStopReset = ADC_REGOVERSAMPLING_RESUMED_MODE;
hadc1.Init.Oversampling =oversmp;*/
if (HAL_ADC_Init(&hadc1) != HAL_OK)
{
}
// Configure the ADC multi-mode
multimode.Mode = ADC_DUALMODE_REGSIMULT;
multimode.DMAAccessMode = ADC_DMAACCESSMODE_12_10_BITS;
multimode.TwoSamplingDelay = ADC_TWOSAMPLINGDELAY_1CYCLE;
if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
{
}
// Configure Regular Channel
sConfig.Channel = ADC_CHANNEL_15;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_6CYCLES_5;
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;
sConfig.Offset = 0;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
//Error_Handler();
}
HAL_ADC_Start(&hadc2);
}
//=============================================================================
/**
@return
- none
Initializes adc2
*/
void
MX_ADC2_Init
(
void
)
{
/* USER CODE BEGIN ADC1_Init 0 */
/* USER CODE END ADC1_Init 0 */
ADC_MultiModeTypeDef multimode = {0};
ADC_ChannelConfTypeDef sConfig = {0};
/* USER CODE BEGIN ADC1_Init 1 */
/* USER CODE END ADC1_Init 1 */
/** Common config
*/
hadc2.Instance = ADC2;
hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV2;
hadc2.Init.Resolution = ADC_RESOLUTION_12B;
hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc2.Init.GainCompensation = 0;
hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc2.Init.EOCSelection =ADC_EOC_SINGLE_CONV;
hadc2.Init.LowPowerAutoWait = DISABLE;
hadc2.Init.ContinuousConvMode = ENABLE;
hadc2.Init.NbrOfConversion = 1;//ADC_BUFFER_LEN;
hadc2.Init.DiscontinuousConvMode = DISABLE;
hadc2.Init.DMAContinuousRequests = DISABLE;
hadc2.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
hadc2.Init.OversamplingMode = DISABLE;
/*hadc2.Init.Oversampling =oversmp;*/
if (HAL_ADC_Init(&hadc2) != HAL_OK)
{
// Error_Handler();
}
sConfig.Channel = ADC_CHANNEL_17;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_6CYCLES_5;
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;
sConfig.Offset = 0;
if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
{
//Error_Handler();
}
/* USER CODE END ADC1_Init 2 */
HAL_ADC_Start(&hadc2);
}
回帖
(1)
陈丽霞
2023-2-3 15:07:23
采样率固定在 300ksps 左右
您尝试使用可能较慢的 Cube/HAL 函数轮询 ADC 时可能会给出此限制。
也许您想使用连续模式和 DMA。
采样率固定在 300ksps 左右
您尝试使用可能较慢的 Cube/HAL 函数轮询 ADC 时可能会给出此限制。
也许您想使用连续模式和 DMA。
举报
更多回帖
rotate(-90deg);
回复
相关问答
adc
采样率
是否可以使用STM Workbench对
STM32
F103CB
MCU
进行编程呢
2022-12-12
230
在什么温度下可以检测到
STM32G431
的TS_CAL2值呢?
2022-12-26
412
如何用
stm32g431
DMA方式更新周期信息?
2023-08-05
263
求一个蓝桥杯大赛嵌入式组
STM32G431
资源包
2021-10-12
4837
怎样去计算
STM32
ADC
的
采样率
呢
2021-10-26
4973
stm32g431
的PG10-NRST可以当普通IO吗?怎么设置?
2024-03-20
279
STM32
F302K8U6和
STM32G431
中内置的运放 建立时间是多长?
2024-03-28
286
STM32G431
串口通信怎么使用?
2021-12-08
1757
ADC
采样率
设置
2012-10-09
8060
STM32G431
和NUCLEO-
G431
RB内部DAC(DAC3)连接到OPAMP1 - OPAMP无输出的原因?
2023-01-13
409
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分