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

《STM32U3线上课程》学习笔记+03 ADC采集芯片参考电压和温度传感器值

[复制链接]
EPTmachine 发布时间:2025-12-18 20:36

https://shequ.stmicroelectronics.cn/thread-869236-1-1.html

https://shequ.stmicroelectronics.cn/thread-869237-1-1.html

前两篇完成使用RTC中断从STOP3唤醒MCU,以及使用LPUART1传输数据。STM32U3带有12bit 的ADC,可以采集MCU上的参考电压以及温度传感器信息。下面介绍开启ADC采集功能,并通过LPUART串口发送到串口终端。

1、 CubeMX设置ADC采样

设置ADC1的采样通道、转换数、采样时间以及使能Auto Wait。

ADC1_settings.png

ADC1_Auto_wait.png

开启lpuart1的中断

lpuart1_nuic.png

设置lpuart1和ADC1的时钟为MSIK,并生成代码。

ADC1_clock.png

2、 功能实现

添加用于存储采样值的变量

volatile uint16_t adcVref = 0;
volatile uint16_t adcTemp = 0;

volatile uint16_t Vref = 0;
volatile int16_t Temp = 0;

在初始化代码中添加ADC的校准函数调用。

/* Run ADC calibration*/
    if(HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED) != HAL_OK)
    {
          Error_Handler();
    }

在主循环中,启动ADC转换并掉用库中用计算ADC值的帮助函数转化为单位为mv的参考电压值和℃的温度值。通过串口将数据发送到串口终端。

HAL_ADC_Start(&hadc1);
      HAL_ADC_PollForConversion(&hadc1, 1);
      adcVref = HAL_ADC_GetValue(&hadc1);

      /*Helper macro to calculate analog reference voltage (Vref+) unit: mVolt */
      Vref = __LL_ADC_CALC_VREFANALOG_VOLTAGE(adcVref,LL_ADC_RESOLUTION_12B);

      HAL_ADC_PollForConversion(&hadc1, 1);
      adcTemp = HAL_ADC_GetValue(&hadc1);

      /*Helper macro to calculate Temperature, unit: degree Celsius */
      Temp = __LL_ADC_CALC_TEMPERATURE(Vref, adcTemp, LL_ADC_RESOLUTION_12B);


        /* Enable MCU wake-up by LPUART */
        HAL_UARTEx_EnableStopMode(&hlpuart1);

        /* Enable IT for Transfer Complete = 8 bytes in our case*/
        LL_LPUART_ClearFlag_TC(LPUART1);
        LL_LPUART_EnableIT_TC(LPUART1);
        __HAL_UART_CLEAR_IT(&hlpuart1, UART_CLEAR_TCF);
        __HAL_UART_ENABLE_IT(&hlpuart1,UART_IT_TC);

        /*TX data w/ FIFO */
        /* Convert integers to string with comma and carriage return */
        length = sprintf(TXbuffer, "%d,%d\r\n", Vref, Temp);
        i = 0;
        while(__HAL_UART_GET_FLAG(&hlpuart1, UART_FLAG_TXFNF))
             {
                 LPUART1->TDR = (uint8_t)TXbuffer[i];
                 i++;
             }
      /*Clear all wakeup source flags*/
      __HAL_PWR_CLEAR_FLAG(PWR_WAKEUP_ALL_FLAG);

      /* Enter STOP 3 mode */
      HAL_PWR_EnterSTOPMode(PWR_LOWPOWERMODE_STOP3, PWR_STOPENTRY_WFI);

编译并下载到开发板,可以看到响应的数据输出。

adc_output.png

收藏 评论0 发布时间:2025-12-18 20:36

举报

0个回答

所属标签

ST中文论坛活动

即日起开启活动话题入口,之后的活动统一都放在此处,欢迎大家的加入!


最新内容

相似分享

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