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

《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分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版