打印
[STM32U5]

AD一启动采样就出错

[复制链接]
1733|32
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
比神乐|  楼主 | 2023-3-11 14:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用STM32CUBEMX生成ADC和串口初始化代码,AD是软件启动。
AD初始化代码如下:
static void MX_ADC1_Init(void)
{

  /* USER CODE BEGIN ADC1_Init 0 */

  /* USER CODE END ADC1_Init 0 */

  ADC_ChannelConfTypeDef sConfig = {0};

  /* USER CODE BEGIN ADC1_Init 1 */

  /* USER CODE END ADC1_Init 1 */

  /** Common config
  */
  hadc1.Instance = ADC1;
  hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  hadc1.Init.Resolution = ADC_RESOLUTION_14B;
  hadc1.Init.GainCompensation = 0;
  hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
  hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  hadc1.Init.LowPowerAutoWait = DISABLE;
  hadc1.Init.ContinuousConvMode = DISABLE;
  hadc1.Init.NbrOfConversion = 1;
  hadc1.Init.DiscontinuousConvMode = DISABLE;
  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  hadc1.Init.DMAContinuousRequests = DISABLE;
  hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;
  hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
  hadc1.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
  hadc1.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR;
  hadc1.Init.OversamplingMode = DISABLE;
  if (HAL_ADC_Init(&hadc1) != HAL_OK)
  {
    Error_Handler();
  }

  /** Configure Regular Channel
  */
  sConfig.Channel = ADC_CHANNEL_9;
  sConfig.Rank = ADC_REGULAR_RANK_1;
  sConfig.SamplingTime = ADC_SAMPLETIME_5CYCLE;
  sConfig.SingleDiff = ADC_SINGLE_ENDED;
  sConfig.OffsetNumber = ADC_OFFSET_NONE;
  sConfig.Offset = 0;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN ADC1_Init 2 */

  /* USER CODE END ADC1_Init 2 */

}
不启动ADC转换的时候,串口打印正常。
我一启动AD采样:
if (HAL_ADC_Start(&hadc1) != HAL_OK)
        {
                /* Error: ADC conversion start could not be performed */
                HAL_UART_Transmit(&huart2, (uint8_t *)aTxBuffer1, TXBUFFERSIZE, 5000);
                Error_Handler();
        }
就进入Error_Handler();
这是怎么回事呀?谢谢!

使用特权

评论回复
评论
比神乐 2023-3-13 18:50 回复TA
@地瓜patch :调整顺序不管用。 
地瓜patch 2023-3-12 20:21 回复TA
@比神乐 :把外设初始化顺序调整一下,会有惊喜 
cooldog123pp 2023-3-12 16:21 回复TA
有没有中断? 
比神乐 2023-3-12 08:52 回复TA
@地瓜patch :没有累加溢出。没用中断。 
地瓜patch 2023-3-11 22:56 回复TA
哈哈,遇到过这个问题,1,看看有没有变量累加益处。2,调整一下中断优先级,3,调整外设初始化顺序 
沙发
天意无罪| | 2023-3-11 16:03 | 只看该作者
你把Error_Handler()函数写到ADC转换函数中,这是必然要执行这条语句啊。

使用特权

评论回复
板凳
比神乐|  楼主 | 2023-3-11 20:04 | 只看该作者
天意无罪 发表于 2023-3-11 16:03
你把Error_Handler()函数写到ADC转换函数中,这是必然要执行这条语句啊。

你没仔细看,失败了才执行那一条语句。

使用特权

评论回复
地板
kaventang| | 2023-3-11 22:27 | 只看该作者
高手如云,学习了

使用特权

评论回复
5
地瓜patch| | 2023-3-11 23:00 | 只看该作者
仿真,看看进入error前是跑哪个函数,能快速定位

使用特权

评论回复
6
比神乐|  楼主 | 2023-3-12 08:22 | 只看该作者
地瓜patch 发表于 2023-3-11 23:00
仿真,看看进入error前是跑哪个函数,能快速定位

没有仿真工具。

使用特权

评论回复
7
香水城| | 2023-3-12 21:20 | 只看该作者
从现象看,启动ADC时出错了。换言之,没法正常启动ADC.
检查下ADC的配置、供电等是否有问题。

使用特权

评论回复
8
专注于嵌入式| | 2023-3-13 10:52 | 只看该作者
ADC与串口初始化调一下顺序就好了

使用特权

评论回复
9
GlenX| | 2023-3-13 15:33 | 只看该作者
改成这样试试!
if (HAL_ADC_Start(&hadc1) != HAL_OK)
        {
            HAL_Delay(10);
        }

使用特权

评论回复
10
比神乐|  楼主 | 2023-3-13 18:50 | 只看该作者
专注于嵌入式 发表于 2023-3-13 10:52
ADC与串口初始化调一下顺序就好了

试过了,不好使

使用特权

评论回复
11
zhenykun| | 2023-7-12 22:09 | 只看该作者
调整顺序不管用

使用特权

评论回复
12
wyjie| | 2023-7-12 22:11 | 只看该作者
把外设初始化顺序调整一下,会有惊喜

使用特权

评论回复
13
jlyuan| | 2023-7-12 22:12 | 只看该作者
有没有中断?

使用特权

评论回复
14
yszong| | 2023-7-12 22:13 | 只看该作者
没有累加溢出。没用中断。

使用特权

评论回复
15
jiahy| | 2023-7-12 22:15 | 只看该作者
看看有没有变量累加益处

使用特权

评论回复
16
lizye| | 2023-7-12 22:16 | 只看该作者
调整一下中断优先级

使用特权

评论回复
17
shimx| | 2023-7-12 22:18 | 只看该作者
调整外设初始化顺序

使用特权

评论回复
18
jiaxw| | 2023-7-12 22:19 | 只看该作者
你把Error_Handler()函数写到ADC转换函数中,这是必然要执行这条语句啊。

使用特权

评论回复
19
spark周| | 2023-7-12 22:20 | 只看该作者
你没仔细看,失败了才执行那一条语句。

使用特权

评论回复
20
liliang9554| | 2023-7-12 22:23 | 只看该作者
高手如云,学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

435

主题

3405

帖子

7

粉丝