OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4424|回复: 3

STM32F7使用ADC1通道2采样出现问题,一直为0

[复制链接]

6

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2021-6-19
在线时间
67 小时
发表于 2021-10-9 21:14:33 | 显示全部楼层 |阅读模式
1金钱
大家好!想请教一下各位大佬。在使用adc1通道2连接温度传感器进行采样,发现串口打印的采样值一直为0 。请问是不是我的配置出了问题?
配置如下:
  1. void MX_ADC1_Init(void)
  2. {

  3.   /* USER CODE BEGIN ADC1_Init 0 */

  4.   /* USER CODE END ADC1_Init 0 */

  5.   ADC_ChannelConfTypeDef sConfig = {0};

  6.   /* USER CODE BEGIN ADC1_Init 1 */

  7.   /* USER CODE END ADC1_Init 1 */
  8.   /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
  9.   */
  10.   hadc1.Instance = ADC1;
  11.   hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
  12.   hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  13.   hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
  14.   hadc1.Init.ContinuousConvMode = DISABLE;
  15.   hadc1.Init.DiscontinuousConvMode = DISABLE;
  16.   hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  17.   hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  18.   hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  19.   hadc1.Init.NbrOfConversion = 1;
  20.   hadc1.Init.DMAContinuousRequests = DISABLE;
  21.   hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  22.   if (HAL_ADC_Init(&hadc1) != HAL_OK)
  23.   {
  24.     Error_Handler();
  25.   }
  26.   /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  27.   */
  28.   sConfig.Channel = ADC_CHANNEL_2;
  29.   sConfig.Rank = ADC_REGULAR_RANK_1;
  30.   sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
  31.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  32.   {
  33.     Error_Handler();
  34.   }

  35. void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
  36. {

  37.   GPIO_InitTypeDef GPIO_InitStruct = {0};
  38.   if(adcHandle->Instance==ADC1)
  39.   {
  40.   /* USER CODE BEGIN ADC1_MspInit 0 */

  41.   /* USER CODE END ADC1_MspInit 0 */
  42.     /* ADC1 clock enable */
  43.     __HAL_RCC_ADC1_CLK_ENABLE();

  44.     __HAL_RCC_GPIOA_CLK_ENABLE();
  45.     /**ADC1 GPIO Configuration
  46.     PA2     ------> ADC1_IN2
  47.     */
  48.     GPIO_InitStruct.Pin = GPIO_PIN_2;
  49.     GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  50.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  51.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  52.   /* USER CODE BEGIN ADC1_MspInit 1 */

  53.   /* USER CODE END ADC1_MspInit 1 */
  54.   }
  55.   else if(adcHandle->Instance==ADC2)
  56.   {
  57.   /* USER CODE BEGIN ADC2_MspInit 0 */

  58.   /* USER CODE END ADC2_MspInit 0 */
  59.     /* ADC2 clock enable */
  60.     __HAL_RCC_ADC2_CLK_ENABLE();

  61.     __HAL_RCC_GPIOA_CLK_ENABLE();
  62.     /**ADC2 GPIO Configuration
  63.     PA3     ------> ADC2_IN3
  64.     */
  65.     GPIO_InitStruct.Pin = GPIO_PIN_3;
  66.     GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  67.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  68.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  69.   /* USER CODE BEGIN ADC2_MspInit 1 */

  70.   /* USER CODE END ADC2_MspInit 1 */
  71.   }
  72. }
复制代码



采集函数如下:
  1. uint16_t Get_Adc1(uint32_t ch)   
  2. {
  3.     ADC_ChannelConfTypeDef ADC1_ChanConf;
  4.    
  5.     ADC1_ChanConf.Channel=ch;                                 
  6.     ADC1_ChanConf.Rank=1;                                    
  7.     ADC1_ChanConf.SamplingTime=ADC_SAMPLETIME_480CYCLES;      
  8.     ADC1_ChanConf.Offset=0;                 
  9.     HAL_ADC_ConfigChannel(&hadc1,&ADC1_ChanConf);      
  10.        
  11.           HAL_ADC_Start(&hadc1);                              
  12.                
  13.                 HAL_ADC_PollForConversion(&hadc1,10);              
  14.                 return (uint16_t)HAL_ADC_GetValue(&hadc1);                   
  15. }
复制代码



时钟配置如图:


最佳答案

查看完整内容[请看2#楼]

估计是数据类型不匹配
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

643

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2432
金钱
2432
注册时间
2019-12-28
在线时间
527 小时
发表于 2021-10-9 21:14:34 | 显示全部楼层
啾啾啾 发表于 2021-10-10 16:31
谢谢,我解决问题了。我一开始串口打印采样值使用的是 printf(%d\r\n,adc), 后来发现旁边有个警告,于是 ...

估计是数据类型不匹配
回复

使用道具 举报

13

主题

643

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2432
金钱
2432
注册时间
2019-12-28
在线时间
527 小时
发表于 2021-10-10 10:33:45 | 显示全部楼层
看着也没看出来有啥问题,可以参考下原子的f7的ADC例程对比下看看,估计是有些小细节没有注意到导致的
回复

使用道具 举报

6

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2021-6-19
在线时间
67 小时
 楼主| 发表于 2021-10-10 16:31:47 | 显示全部楼层
狼里个狼121 发表于 2021-10-10 10:33
看着也没看出来有啥问题,可以参考下原子的f7的ADC例程对比下看看,估计是有些小细节没有注意到导致的

谢谢,我解决问题了。我一开始串口打印采样值使用的是 printf(%d\r\n,adc), 后来发现旁边有个警告,于是我把打印改成了 printf(%.2f\r\n, adc),结果就有值了。这我也没想明白为什么
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 19:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表