完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
先上结果图,DMA方式多路采集ADC数据并打印Count值和电压:
1、选择ADC1/ADC2的channel: 进入正文:打开CubeMX工程,选择好芯片时钟,然后开始配置ADC & DMA: 根据具体需要,这里举例选择ADC1的IN6 - IN9 2、配置ADC Setting参数: 在parameter settings中,主要配置ADC多路采集参数:
3、配置多路通道采集及顺序 配置有多少路ADC,这里是IN6-IN9,共4路 根据RANK1-4 配置采集顺序:其余保持默认 4、配置DMA 在ADC Configuration 参数选择DMA Settings, 点击Add,然后选择所用的ADC: 然后,针对ADC1对应的DMAChannel 1,
5、生成代码,修改代码:
uint32_t ADC1_Value_DMA[4];
这里的最后一次参数4是代表有4路
6、使用DMA传输的ADC数据: 这样Debug运行起来,DMA就会不断的往ADC1_Value_DMA[]数组中更新RANK1-RANK4,既ADC1 IN6-IN9的采样数据, 可以增加log 代码 ,Debug打印出来,或live watch里查看: float Channel_6 = (float)(ADC1_Value_DMA[0]&0xFFF)*3.3/4096; float Channel_7 = (float)(ADC1_Value_DMA[1]&0xFFF)*3.3/4096; float Channel_8 = (float)(ADC1_Value_DMA[2]&0xFFF)*3.3/4096; float Channel_9 = (float)(ADC1_Value_DMA[3]&0xFFF)*3.3/4096; printf("Star measure ADC1 channel 6-9rn"); printf("ADC1 Channel_6 Count: %d, voltage: %f rn",ADC1_Value_DMA[0],Channel_6); printf("ADC1 Channel_7 Count: %d, voltage: %f rn",ADC1_Value_DMA[1], Channel_7); printf("ADC1 Channel_8 Count: %d, voltage: %f rn",ADC1_Value_DMA[2], Channel_8); printf("ADC1 Channel_9 Count: %d, voltage: %f rn",ADC1_Value_DMA[3], Channel_9); 附ADC初始化函数作为参考: static void MX_ADC1_Init(void) { /* USER CODE BEGIN ADC1_Init 0 */ /* USER CODE END ADC1_Init 0 */ ADC_ChannelConfTypeDef sConfig = {0}; /* USER CODE BEGIN ADC1_Init 1 */ /* USER CODE END ADC1_Init 1 */ /** Common config */ hadc1.Instance = ADC1; hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; hadc1.Init.ContinuousConvMode = ENABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 4; if (HAL_ADC_Init(&hadc1) != HAL_OK) { Error_Handler(); } /** Configure Regular Channel */ sConfig.Channel = ADC_CHANNEL_6; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } /** Configure Regular Channel */ sConfig.Channel = ADC_CHANNEL_7; sConfig.Rank = ADC_REGULAR_RANK_2; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } /** Configure Regular Channel */ sConfig.Channel = ADC_CHANNEL_8; sConfig.Rank = ADC_REGULAR_RANK_3; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } /** Configure Regular Channel */ sConfig.Channel = ADC_CHANNEL_9; sConfig.Rank = ADC_REGULAR_RANK_4; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN ADC1_Init 2 */ /* USER CODE END ADC1_Init 2 */ } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1909 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1678 浏览 1 评论
1172 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
771 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1732 浏览 2 评论
1970浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
807浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
255浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
624浏览 3评论
634浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-24 04:44 , Processed in 0.816911 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号