STM32U5的ADC最高可达14bit采样位数。采样率达2.5Mbps。 下面就来测试一下它的ADC外设。 首先打开 STM32CubeMX,按下图选择开发板模式创建工程。如果没有装STM32U5的开发包,可以点右边的INSTALL安装。 搜索U5,选择NUCLEO-U575开发板,这样可以直接初始化板上的一些已有外设了。如下图所示。然后点击右上角START PROJECT,开始配置工程。 下图就是开始工程配置了,可以看到一开始就有一些默认外设已配置好了。 首先选择ICACHE和DCACHE,打开这两个。打开时之后一般默认设置就好了。 下面选择ADC1外设,打开使能通道8,即PA3脚。使用单端模式。 再就配置ADC的参数。时钟频率,数据位数,采样模式,采样通道设置,采样触发设置等等。 / H2 ]9 Y; H V5 J N3 u 设置完采样相关的参数后,使能ADC中断,通过中断模式读取数据。 由于ADC采样使用了TIM6触发采样,下面就要设置TIM6的参数。 设置每100us采样触发一次ADC。 下一步设置MCU的主频时钟树,非常简单,默认160MHz。 下面设置工程名称和保存路径,以及开发包库版本。然后点击右上角的按钮生成代码。 等待代码生成完成就可以直接打开工程了。 打开生成的代码工程,此时还没有完成ADC采样功能。只是有了基本框架,下面就是要添加额外的代码控制了。 首先要使能ADC的电源VDDA,在main初始如下位置添加代码: HAL_PWREx_EnableVddA(); HAL_PWREx_EnableVddIO2(); 这里如果没添加的话,ADC功能是无法正常工作的。 然后添加ADC的校准,此处参考例程。代码如下: if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED) != HAL_OK) { /* Calibration Error */ Error_Handler(); } 再就是启动TIM6和ADC1了。添加如下代码启动 HAL_TIM_Base_Start(&htim6); //启动TIM6 HAL_ADC_Start_IT(&hadc1); //中断方式启动ADC1转换。 添加了启动转换,下面还要添加读取采样数据。直接重载ADC中断转换完成回调函数,代码如下: uint32_t adc_value[2]; volatile uint32_t adc_index = 0; void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) { if( __HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOC)) { adc_value[adc_index++] = HAL_ADC_GetValue(hadc); } if( __HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOS)) { adc_index = 0; } } 下面就可以编译下载了,编译无错误。 下面就可以在IDE中查看读取的数据了。我在PA3口接了一个声音传感器,可以采样其模拟值。 测试采样数值挺稳定的,14bit的数据跳动范围都小于8。性能看来很不错。 |
STM32U5 系列使用 LPBAM 进行功耗优化
【STM32U545】实现CAN数据收发
【我的STM32U5 项目秀】+04-MPU6050在STM32U5上的移植
实战经验 | 基于 STM32U5 创建 USBx_CustomHID 通信
STM32U5 x E-BIKE,记录你的骑行多巴胺
基于STM32U5系列TIMER+DMA+DAC应用经验分享
实战经验 | 基于 STM32U5 片内温度传感器正确测算温度
【文末有礼】新款STM32U5:让便携产品拥有惊艳图效
STM32的CAN FD位定时设置注意事项
【STM32U599】5.聊聊手表菜单
多谢分享