系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
在之前的文章中有提到使用STM32H750VB进行ADC+FFT的事,但是由于给出的采样点数过高,直接导致上电进入hardfault,放弃了一段时间想使用FPGA+SPI的方式进行数据交换然后进行FFT,之前用Verilog尝试写了一下SPI的时序,感觉问题比较多,上周考完业余无线电A证,现在又对H750做DSP念念不忘,于是乎采用较少点数进行了尝试,本文就介绍了基于ARM的DSP的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、STM32H750 ADC
使用STM32CUBEMX配置工程,ADC并没有采用DMA的方式,只是想简单地得到数据然后进行信号处理。
主频配置为480MHz,直接拉满,ADC时钟为150MHz,采样深度16bit,采样时间1.5个时钟周期。
static void MX_ADC3_Init(void)
{
ADC_ChannelConfTypeDef sConfig = {
0};
hadc3.Instance = ADC3;
hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
hadc3.Init.Resolution = ADC_RESOLUTION_16B;
hadc3.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc3.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
hadc3.Init.LowPowerAutoWait = DISABLE;
hadc3.Init.ContinuousConvMode = DISABLE;
hadc3.Init.NbrOfConversion = 1;
hadc3.Init.DiscontinuousConvMode = DISABLE;
hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc3.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR;
hadc3.Init.Overrun = ADC_OVR_DATA_PRESERVED;
hadc3.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
hadc3.Init.OversamplingMode = DISABLE;
if (HAL_ADC_Init(&hadc3) != HAL_OK)
{
Error_Handler();
}
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;
sConfig.Offset = 0;
sConfig.OffsetSignedSaturation = DISABLE;
if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
{
Error_Handler();
}
}
在主函数中采集128次,并将数据存在数组里
for