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

【STM32C0评测】串口输出ADC值

[复制链接]
傅沈骁 发布时间:2025-4-23 08:58

右侧倒数第三个排针,对应引脚PB10,有ADC输入的功能

2025-04-2308-32-27的屏幕截图.png

2025-04-2308-32-45的屏幕截图.png

在CubeMX中设置PB10为ADC输入,并配置如下

2025-04-2308-35-15的屏幕截图.png

为了实现串口输出电压值,还需初始化虚拟串口

2025-04-2308-36-11的屏幕截图.png

生成程序后,首先进行printf重定向

/* USER CODE BEGIN PFP */
#if defined(__ICCARM__)
__ATTRIBUTES size_t __write(int, const unsigned char *, size_t);
#endif /* __ICCARM__ */

#if defined(__ICCARM__)
/* New definition from EWARM V9, compatible with EWARM8 */
int iar_fputc(int ch);
#define PUTCHAR_PROTOTYPE int iar_fputc(int ch)
#elif defined ( __CC_ARM ) || defined(__ARMCC_VERSION)
/* ARM Compiler 5/6*/
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#elif defined(__GNUC__)
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#endif /* __ICCARM__ */
/* USER CODE END PFP */
/* USER CODE BEGIN 4 */
/**
  * @brief  Retargets the C library printf function to the USART.
  * @param  None
  * @retval None
  */
PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the USART2 and Loop until the end of transmission */
  HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);

  return ch;
}

#if defined(__ICCARM__)
size_t __write(int file, unsigned char const *ptr, size_t len)
{
  size_t idx;
  unsigned char const *pdata = ptr;

  for (idx = 0; idx < len; idx++)
  {
    iar_fputc((int)*pdata);
    pdata++;
  }
  return len;
}
#endif /* __ICCARM__ */
/* USER CODE END 4 */

接着定义获取adc值代码

/* USER CODE BEGIN 0 */
uint16_t adc_get(void)
{
    uint16_t adc = 0;
    HAL_ADC_Start(&hadc1);
    adc = HAL_ADC_GetValue(&hadc1);
    return adc;
}
/* USER CODE END 0 */

在主函数中,不断获取adc值并将其处理后的真实值打印在串口工具上

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_USART2_UART_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  float adc_value = 0;
  while (1)
  {
      adc_value = 3.3f * adc_get() / 4095;
      printf("Voltage:%.2fV\r\n", adc_value);
      HAL_GPIO_TogglePin(LD1_GPIO_Port, LD1_Pin);
      HAL_Delay(1000);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

在STM32CubeIDE中,由于输出的值为浮点数,因此还需要勾选浮点数输出的选项

2025-04-2308-40-58的屏幕截图.png

按照如下图所示的方式接线,并通过调节三合一万用表输出电压观察获取到的adc值

IMG_20250423_085551.jpg

得到最终输出结果如下

2025-04-2308-49-36的屏幕截图.png

IMG_20250423_084852.jpg
收藏 评论0 发布时间:2025-4-23 08:58

举报

0个回答

所属标签

相似分享

官网相关资源

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