提问人:Kevin 提问时间:11/1/2023 更新时间:11/8/2023 访问量:18
创建一个数组并用ADC值填充它 - STM32L476G
Creating an Array and filling it with ADC values - STM32L476G
问:
我想知道如何在STM32cubeIDE上创建一个数组。我喜欢用来自独立 LDR 的值填充这个数组。
以下是ADC的设置代码:
/*User Begin PV*/
uint16_t value_DAC = 0;uint16_t value_ADC =0;uint32_t state_DAC = 0;
/*User Begin 2*/
HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED); // Calibrate ADC
HAL_ADC_Start_DMA(&hadc1, (uint32_t *) &value_ADC, 1); // Start ADC with DMA
HAL_DAC_Start(&hdac1, DAC_CHANNEL_2); // Start the DAC
任何帮助将不胜感激。
我还没有尝试过任何东西,因为我真的不知道从哪里开始。
答:
0赞
mohsen karimi
11/8/2023
#1
你的问题有点不清楚。
如果您已经可以读取 ADC 值,那么唯一要做的就是制作一个简单的 C 数组,然后以您想要的间隔定期读取并存储 ADC 值。
为此,您可以使用带有循环的阻塞方法,如果您唯一想做的就是像这样读取 ADC:int value_ADC[20];
while (1)
{
//shifting each array element to right by one
//so we can save the new value on index 0
for (int i = 20 - 1; i > 0; i--) {
value_ADC[i] = value_ADC[i - 1];
}
//read adc value and save it on index 0 of array
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 1);
value_ADC[0] = HAL_ADC_GetValue(&hadc1);
//whatever you wanna do with adc values
HAL_Delay(10);//change to desired interval
}
如果您有并行任务,则为非阻塞,使用“计时器中断”,您可以通过搜索该术语了解更多信息。例如,如果定时器的速度太高,则可以使用计数器每 100 次中断读取一次 ADC 值,并重置计数器。
评论
0赞
Kevin
11/8/2023
非常感谢您的帮助,这确实简化了我现在所拥有的
0赞
mohsen karimi
11/8/2023
@kevin不客气,请考虑投票并接受作为有用的答案(勾号),如果它有帮助。
评论