你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32G031-使用STM32CubeIDE实现DMA处理ADC

[复制链接]
STMCU小助手 发布时间:2021-11-11 22:00
STM32G031-使用STM32CubeIDE实现DMA处理ADC
一、USART配置

20210218163058312.png


二、ADC配置

2021021816321259.png


20210218163316679.png


20210218163337657.png


配置完成后,生成代码即可。。。

三、用户代码
  1. /* USER CODE BEGIN Includes */

  2. #include "stdio.h"
  3. /* USER CODE END Includes */

  4. /* USER CODE BEGIN PD */
  5. #ifdef __GNUC__
  6. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  7. #else
  8. #define PUTCHAR_PROTOTYPE int fputc(int ch,FILE F)
  9. #endif

  10. PUTCHAR_PROTOTYPE
  11. {
  12.         LL_USART_TransmitData8(USART2, (uint8_t)ch);
  13.         while(!LL_USART_IsActiveFlag_TXE(USART2)){}
  14.         return ch;
  15. }
  16. /* USER CODE END PD */

  17. /* USER CODE BEGIN PV */
  18. uint16_t ADC_ConvertedValue[150];
  19. uint8_t i;
  20. uint32_t ad0,ad1,ad4;
  21. /* USER CODE END PV */

  22. /* USER CODE BEGIN 0 */
  23. void ADC_DMA_Config_Start(void)
  24. {
  25.         LL_mDelay(2); //延时2ms,避免DMA读取数据通道不对
  26.         // LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);
  27.         LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, 150);
  28.         LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1,(uint32_t)ADC_ConvertedValue);
  29.         LL_DMA_SetPeriphAddress(DMA1, LL_DMA_CHANNEL_1,LL_ADC_DMA_GetRegAddr(ADC1,LL_ADC_DMA_REG_REGULAR_DATA));
  30.         LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);

  31.         LL_ADC_StartCalibration(ADC1);
  32.         while(LL_ADC_IsCalibrationOnGoing(ADC1));
  33.         LL_ADC_Enable(ADC1);
  34.         LL_ADC_REG_StartConversion(ADC1);

  35.         LL_ADC_REG_SetDMATransfer(ADC1, LL_ADC_REG_DMA_TRANSFER_UNLIMITED);
  36. }


  37. /* USER CODE END 0 */

  38. /* USER CODE BEGIN 2 */
  39.   printf("STM32CubeMX Test...\r\n");
  40.   ADC_DMA_Config_Start();
  41.   /* USER CODE END 2 */
  42. /* USER CODE BEGIN 3 */
  43.     for(i = 0,ad0 = 0,ad1 = 0,ad4 = 0; i < 150;){
  44.                 ad0 += ADC_ConvertedValue[i++];
  45.                 ad1 += ADC_ConvertedValue[i++];
  46.                 ad4 += ADC_ConvertedValue[i++];
  47.         }
  48.         ad0 /= 50;        // 实现均匀滤波
  49.         ad1 /= 50;        // 实现均匀滤波
  50.         ad4 /= 50;        // 实现均匀滤波
  51. //        printf("ADC->CH1 Value:%lf\r\n",(float)ad0*3.3/4095);
  52. //        printf("ADC->CH2 Value:%lf\r\n",(float)ad1*3.3/4095);
  53. //        printf("ADC->CH4 Value:%lf\r\n",(float)ad4*3.3/4095);
  54.         printf("ADC Value:%lf,%lf,%lf\r\n",(float)ad0*3.3/4095,(float)ad1*3.3/4095,(float)ad4*3.3/4095);
  55.   }
  56.   /* USER CODE END 3 */

复制代码

收藏 评论0 发布时间:2021-11-11 22:00

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版