STMCU小助手
发布时间:2023-2-18 16:00
|
1. 前言客户使用 ADC 进行序列转换,配置完成后,不调用 Cube 库函数而使用寄存器操作进行ADC 转换,发现无法启动 ADC 转换,且无任何报错。如果只使用一个通道转换 ADC,则可以正常启动 ADC 转换。 2. 现象复现 使用 CubeMx 配置下面的 ADC 序列转换程序。
正常的使用 Cube 函数启动 ADC 函数为:HAL_ADCEx_InjectedStart(&hadc1),此种情况下 ADC 可以正常转换,无任何问题;如果客户使用下面的操作进行启动 ADC 转换则出现 ADC 停止采样: ADC1->CR |= 0x01; // ADEN =1 ADC1->CR |= 0x08; // JADSTART = 1 寄存器无报错,而且 JADSTART 一直等于 1,但 ADC 没有启动转换。
如果客户改为只采样一个通道,而不进行多通道序列采样,则上述写法也无任何问题,ADC 可正常转换。 3. 问题分析与解决 从 HAL 库中启动 ADC 代码看上去,实际 Cube 库函数做了很多判别,因此我们关心下ADC 启动序列在参考手册中的说明:
可以看到 ADEN 置位后需要等待 ADRDY 置 1 后进行 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 完整版请查看:附件
STM32H723 的序列 ADC 无法启动转换.pdf
(310.04 KB, 下载次数: 3)
|
STM32应用过程中与电源相关的案例分享
实战经验 | STM32H7的FLASH ECC介绍
【问题解决】不能连接上 STM32H7 芯片
广州/南京 | STM32GUI图形界面应用开发实训(基于STM32H7R7/S7 + TouchGFX开发平台)
STM32H723+Lwip+ETH+CUBE 完整配置
高手入门STM32总结+学习步骤
STM32开发五大误区,新手别傻傻信了
【STM32】总线架构
没学过51单片机,能否零基础学STM32?
STM32电机控制用什么型号?高级定时器功能详解与芯片选型指南
微信公众号
手机版