This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/EK-TM4C123GXL:读取模拟传感器。

Guru**** 2465890 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/664256/ccs-ek-tm4c123gxl-reading-analog-sensor

器件型号:EK-TM4C123GXL

工具/软件:Code Composer Studio

大家好、

我正在尝试使用 tm4c123gxl 读取模拟传感器。但我使用以下代码时遇到的问题是、当我尝试查看应存储 ADC 值的变量值时、表达式窗口中会显示"identifier not found"、 但是、如果在 while 循环之间的任意位置放置断点、变量的值将变为零。

#include 
#include 
#include "inc/hw_memmap.h"
#include "driverlib/adc.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "inc/hw_types.h"
#include "driverlib/rom_map.h"


#include "tintry"#include "mvoid.h"#include "t.mdg.h"



SysCtlClockSet (SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHz);
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3);

ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_PROCESSOR、0);
ADCSequenceStepConfigure (ADC0_BASE、3、0、ADC_CTL_CH0 | ADC_CTL_IE |
ADC_CTL_END);

ADCSequenceEnable (ADC0_BASE、3);
ADCIntClear (ADC0_BASE、3);

volatile uint32_t ui32ADC0Value;

while (1)
{
ADCProcessorTrigger (ADC0_BASE、3);
while (!ADCIntStatus (ADC0_BASE、3、false)
){
}
ADCIntClear (ADC0_BASE、3);

//
//读取 ADC 值。
//
ADCSequenceDataGet (ADC0_BASE、3、ui32ADC0Value);

SysCtlDelay (SysCtlClockGet ()/12);
}




  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我是绝对新手、我使用示例将此代码组合在一起、但我不确定如何让 ADC 读取哪个引脚。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Awais:

    如果您希望持续查看 ui32ADC0Value 变量、则需要将该变量设为全局变量。 当在 main()中声明局部变量时,该值仅在您处于 main 的上下文中时才会显示。 这就是如果您进行休息、您将看到该值的原因。 如果只需停止程序、则可能会在函数调用中停止。 例如、当调试器停止执行时、代码可能正在执行 ADCSequenceDataGet。 在这种情况下,ui32ADC0Value 仅是 main()的局部值,而不是 ADCSequenceDataGet 的局部值。
    如果您不熟悉 TM4C、我建议您从 TivaWare 示例开始。 请转到 /examples/peripherals/adc、并将找到几个 ADC 示例。 在您的代码中、您当前正在配置通道0以用于对 ADCSequenceStepConfigure 的调用中的 ADC 转换。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Thnx Charles 我尝试了您的建议,但即使在 TivaWare 示例中,变量也会在 main()中声明,但当我将其变为全局变量时,变量会解决“未找到标识符”问题,但变量值仍保持为0。 我不确定原因、但如果我将变量声明为 ui32ADC0Value[]之类的数组、它可以正常工作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    但是 Tivaware 示例代码还有另一个问题、它与 UART 相关、当我上传示例代码时、我会 遇到以下错误。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Awais:
    您是否将文件 uartstdio.c 链接或复制到了您的项目文件夹? uartstdio.c 位于 \utils\uartstdio.c 请执行此操作并重新编译。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Thnx Charles、问题在我将 uartstdio.c 和 uartstdio.h 复制到我的项目文件夹后得到解决。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很高兴您的问题得到解决。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    为了澄清问题-海报的原始代码(几乎)是所提供的@"examples/peripherals/adc/single-ended.C"的准确副本。 (我选中了-如此提示) 在这些示例程序中、他们(很少)定义了一个" main "(我看不到它)、海报"假定"他可以"放弃 ADC 结果变量-在 main 中。" 因此-您的分析-证明"准确"。 (将 Moi 压到冲头...)

    应该注意的是、同一个示例"也避免提到 uartstdio.c、从而将我们的海报引导到悬崖上..."