赞
踩
有关CUBEMX的初始化配置,参见我的另一篇blog:【STM32+HAL】CUBEMX初始化配置
1、芯片: STM32F407ZGT6
2、STM32CubeMx软件
3、IDE: MDK-Keil软件
4、STM32F4xxHAL库
ADC采集波形并通过上位机显示(单通道+多通道)
配置为软件触发模式
至此,CUBEMX配置完成
为方便阅读,下附代码仅保留了关键部分代码,删去了冗长的注释,请读者自行将代码填写在对应位置。
- #define SAMP 1
-
- uint16_t adc1[SAMP]={0};
-
- int main(void)
- {
- /* USER CODE BEGIN 2 */
- HAL_ADC_Start_DMA(&hadc1,(uint32_t *)adc1,SAMP);
- HAL_Delay(300);
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
- }
-
-
- /* USER CODE BEGIN 4 */
- void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) //DMA采集完成中断服务函数
- {
- HAL_ADC_Stop_DMA(&hadc1);//关闭DMA的ADC采集
- printf("%d\r\n",adc1[0]);
- HAL_ADC_Start_DMA(&hadc1,(uint32_t *)adc1,SAMP);
- }
- /* USER CODE END 4 */
Scan Conversion Mode:开启扫描转换模式
Number Of Conversion:设置转换通道为3个
Rank:传入顺序
配置每个Rank的通道号
- #define SAMP 3
-
- uint16_t adc1[SAMP]={0};
-
- int main(void)
- {
- /* USER CODE BEGIN 2 */
- HAL_ADC_Start_DMA(&hadc1,(uint32_t *)adc1,SAMP);
- HAL_Delay(300);
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
- }
-
-
- /* USER CODE BEGIN 4 */
- void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) //DMA采集完成中断服务函数
- {
- HAL_ADC_Stop_DMA(&hadc1);//关闭DMA的ADC采集
- printf("%d,%d,%d\r\n",adc1[0],adc1[1],adc1[2]);
- HAL_ADC_Start_DMA(&hadc1,(uint32_t *)adc1,SAMP);
- }
- /* USER CODE END 4 */
至此,只要在主函数中写printf("%d,%d\n",xx1,xx2);即可输出数据
【STM32】HAL库 STM32CubeMX教程九---ADC
资源【STM32+HAL】ADC采集波形实现(单通道+多通道)
因STM32自带ADC仅能采样0-3.3V的电压,无法采集更高的电压值。若要采集更高的电压值,可采取分压电路。
本人能力有限,代码未必是最优解,若有可改进之处望在评论区留言,采纳有赏~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。