[STM32H5] 【STM32 Nucleo-64 测评】基于stm32cubemx配置的ADC单通道输入

[复制链接]
1115|4
 楼主| yinxiangxv 发表于 2024-8-8 15:08 | 显示全部楼层 |阅读模式
本帖最后由 yinxiangxv 于 2024-8-13 19:19 编辑

最初是打算外接一个旋钮开关进行模拟量的采集ADC即模拟数字转换,是将模拟电压量转换为数字量的一种手段,如下图所示为STM32F407单个ADC的结构框图 (注释1)其主要包括5个部分,分别为  ADC电源引脚、 ADC输入引脚、 ADC触发源、 ADC转换规则和  ADC中断触发等
7131966bb3c8f6e3c2.png

6791966bb3ce1e8ac3.png
ADC电源引脚有VDDA、VSSA、VREF+和VREF-四个引脚,STM32的ADC采集范围为VREF- ≤ VIN ≤ VREF+,一般将ADC的负端参考电压与VSSA短接然后接地,将ADC的正端参考电压接VDDA即3.3V,这样ADC的采集范围就设置为0~3.3V,对于12位分辨率的ADC,其采集数字量范围为0-4095,这样就可以将0-3.3V的电压映射到0-4095的数字量,使其可以相互转化,ADC电源即参考电压引脚具体描述如下图所示
861966bb3d29dd65b.png
ADC的转换主要依靠12位分辨率的片上模数转换器
注入通道和规则通道均有16个触发源,可以选择定时器外部源触发/定时器比较捕获触发/软件常规触发
ADC启动转换时需要按照一定通道顺序转化,该顺序由规则通道和注入通道两者共同决定,其中注入通道其数据寄存器为4*16位,因此可以同时转换四个通道
但是规则通道的数据寄存器只有一个16位的寄存器,因此必须一个通道一个通道的转换,每转换完一个通道,就需要及时将转换完成的结果从规则通道数据寄存器中读出去
手册中关于时间触发的描述:
2505466bb401cb10aa.png

本实验采用的是tim3的in15和adc1
7268766bb3eeb2db30.png

相关回调函数要在adc.c中进行实现
  1. void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle)
  2. {

  3.   if(adcHandle->Instance==ADC1)
  4.   {
  5.   /* USER CODE BEGIN ADC1_MspDeInit 0 */

  6.   /* USER CODE END ADC1_MspDeInit 0 */
  7.     /* Peripheral clock disable */
  8.     __HAL_RCC_ADC_CLK_DISABLE();

  9.     /**ADC1 GPIO Configuration
  10.     PA3     ------> ADC1_INP15
  11.     */
  12.     HAL_GPIO_DeInit(GPIOA, GPIO_PIN_3);

  13.     /* ADC1 interrupt Deinit */
  14.     HAL_NVIC_DisableIRQ(ADC1_IRQn);
  15.   /* USER CODE BEGIN ADC1_MspDeInit 1 */

  16.   /* USER CODE END ADC1_MspDeInit 1 */
  17.   }
  18. }

  19. /* USER CODE BEGIN 1 */
  20. /*转换完成中断回调*/
  21. void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
  22. {
  23.     /*定时器中断启动单通道转换*/
  24.     if(hadc->Instance == ADC1)
  25.     {
  26.         uint32_t val=HAL_ADC_GetValue(&hadc1);
  27.         uint32_t Volt=(3300*val)>>12;
  28.         printf("val:%d, Volt:%d\r\n",val,Volt);
  29.     }
  30. }
  31. /* USER CODE END 1 */
printf的实现方法比较多,可以基于库函数进行实现
也可以参考之前发出来的xprintf这个串口通信实现方式
5873966bb40d809ca0.png

480466bb4020bb492.png
而服务器人 发表于 2024-8-14 15:11 | 显示全部楼层
否有设置ADC的转换模式和通道?这可能会影响数据采集的结果。
micoccd 发表于 2024-8-14 15:19 | 显示全部楼层
输出的值怎么怪怪的
狄克爱老虎油 发表于 2024-8-17 23:40 来自手机 | 显示全部楼层
单通道跟多通道有什么区别啊
 楼主| yinxiangxv 发表于 2024-8-26 16:50 | 显示全部楼层
狄克爱老虎油 发表于 2024-8-17 23:40
单通道跟多通道有什么区别啊

我**力有点不好,这个知识点还没有分辨清楚
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

348

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部