STM32H723 的序列ADC无法启动转换

1、问题描述

客户使用STM芯片的 ADC 进行序列转换,配置完成后,不调用 Cube 库函数而使用寄存器操作进行ADC 转换,发现无法启动 ADC 转换,且无任何报错。如果只使用一个通道转换 ADC,则可以正常启动 ADC 转换。

2、问题复现

使用 CubeMx 配置下面的 ADC 序列转换程序。
图1.CubeMX 配置
在这里插入图片描述
正常的使用 Cube 函数启动 ADC 函数为:HAL_ADCEx_InjectedStart(&hadc1),此种情况下ADC 可以正常转换,无任何问题;如果客户使用下面的操作进行启动 ADC 转换则出现 ADC 停止采样:

ADC1->CR |= 0x01; // ADEN =1
ADC1->CR |= 0x08; // JADSTART = 1

寄存器无报错,而且 JADSTART 一直等于 1,但 ADC 没有启动转换。
图2.ADC1 寄存器
在这里插入图片描述
如果客户改为只采样一个通道,而不进行多通道序列采样,则上述写法也无任何问题,ADC 可正常转换。

3、问题分析与解决

从 HAL 库中启动 ADC 代码看上去,实际 Cube 库函数做了很多判别,因此我们关心下ADC 启动序列在参考手册中的说明:
在这里插入图片描述
可以看到 ADEN 置位后需要等待 ADRDY 置 1 后进行 ADC 转换。
图3.ADC 使能与关闭时序
在这里插入图片描述
从时序图上也可以看到 ADEN 后,有一个 tsTAB 的时间,此后 ADC 可以转换。客户的配置忽略了这个过程,导致 ADC 进入异常,因此需要增加必要的等待代码。如下所示:

ADC1->ISR |= 0x01; // Clear ADRDY
ADC1->CR |= 0x01; // ADEN = 1
while((ADC1->ISR & 0x01) == 0x00) ;// Wait for ADRDY == 1
 ADC1->CR |= 0x08; // JADSTART = 1
 /*************END********************/

本文档参考ST官方的《【应用笔记】LAT1158+STM32H723+的序列+ADC+无法启动转换》文档。
参考下载地址:https://download.csdn.net/download/u014319604/88971354

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值