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.

[参考译文] MSP432P401R:计时器 A -超声波传感器 HC-SR04的捕获模式

Guru**** 2525970 points
Other Parts Discussed in Thread: ENERGIA, MSP432WARE

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/607119/msp432p401r-timer-a---capture-mode-for-ultrasonic-sensor-hc-sr04

器件型号:MSP432P401R

您好!

我需要在捕获模式下配置计时器 A、以测量我正在使用的 HC-SR04传感器的回波脉冲。

我将向传感器发送10us 脉冲(我尝试的次数越来越少、但结果相同)、我正在等待应触发中断的回波、但情况并非如此。 当我强制捕捉引脚(P2.4)为3.3V、然后再为0V 时、中断中的断点被正确触发。

我真的不明白我的代码有什么问题。 我的代码中可能存在一些我看不到的错误。

顺便说一下、我的传感器正在工作、因为我使用 Energia 代码对其进行了测试、但我想使用 CCS 和 driverlib。

#include "driverlib.h"
#include 

/* Timer_A 连续模式配置参数*/
const Timer_A_ContinuousModeConfig ContinuousModeConfig =
{
Timer_A_CLOCKSOURCE_SMCLK、 // SMCLK 时钟源
Timer_A_CLOCKSOURCE_divider _1、 // SMCLK/1 = 3MHz
Timer_A_TAIE_INTERRUPT_DISABLE、 //禁用计时器 ISR
Timer_A_skip_clear // Skup 清除计数
器};

// Timer_A 捕获模式配置参数*/
const Timer_A_CaptureModeConfig CaptureModeConfig =
{
Timer_A_CAPTURECOMPARE 寄存器_1、 // CC 寄存器2
TIMER_A_CAPTUREMODE_RISE_EDGE、 //上升沿和下降沿
Timer_A_CAPTURE_INPUTSELECT_CCIxA、 // CCIxA 输入选择
Timer_A_CAPTURE_synchronous、 //同步捕捉
Timer_A_CAPTURECMPARE 中断_ENABLE、//启用中断
Timer_A_OUTPUTMODE_OUTBIVALUE //输出位值
};

静态空延迟(uint32_t loop)
{
volatile uint32_t i;

对于(i = 0;i < loop;i++);
}

int meas1 = 0;
int meas2 = 0;
int main (void)
{
//*停止看门狗计时器*/
MAP_WDT_A_HOLDTimer ();

CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY); // 24000000 Hz

CS_initClockSignal (CS_MCLK、CS_DCOCLK_SELECT、CS_Clock_divider);// 24000000 Hz
CS_initClockSignal (CS_SMCLK、CS_DCOCLK_select、CS_clock_divider);// 3000000 Hz/*

配置 P2.4_INPUT_INPUT_INPUT
、GPIO_INPUTTOOT_INP1_INP1_INPUTTOP1_INP1_INPUTTOPUT_IN4;// Output_INPUTTOP1_INP1_INP1_INPUTTOP1_INP1_INPUTTOP1_INP1_INP1_INPUT_INPUTTOPUT_INPUT



/*配置捕获模式*/
Timer_A_initCapture (timer_A0_BASE、&CaptureModeConfig);

/*配置连续模式*/
Timer_A_configureContinuousMode (timer_A0_BASE、&ContinuousModeConfig);

//启用中断*/
Interrupt_enableInterrupt (INT_TA0_N);
Interrupt_32


位 TIMER32位、TIMER32位 TIMER32位(timer32位)*、TIMER32位 TIMER32位(TIMER32位)

Timer32_setCount (TIMER32_0_base、1);
Timer32_startTimer (TIMER32_0_base、true);

//在连续模式下启动 Timer_A0 *
/ Timer_A_startCounter (timer_A0_BASE、timer_A_Continuous_mode);
while (1)
{
GPIO_setOutputInput_On5 (GPIO_pin);
Timer32_setCount (TIMER32_0_BASE、24 * 10);
while (TIMER32_getValue (TIMER32_0_BASE)> 0);//等待10us
GPIO_setOutputLowOnPin (GPIO_PORT_P1、GPIO_PIN5); 
//软件延迟 (40000 ); 延迟(40000 ); 延迟(40000 ); 延迟(40000 );延迟(40000 ); 延迟(40000 );延迟(40000 ); 延迟(40000); 延迟(40000); 延迟(40000); 延迟(40000);延迟(40000); 延迟(40000); 延迟(40000); 延迟(40000); 延迟(40000); 延迟(40000);延迟(40000); 延迟(40000); } } void TA0_N_IRQHandler (void) { INT Rising = 0; Timer_A_clearCaptureCompareInterrupt (timer_A0_BASE、 Timer_A_CAPTURECOMPARE 寄存器1); if (P2IN&0x10) rising=1;否则 rising=0; if (上升)//开始 { meas1 = Timer_A_getCaptureCompareCount (timer_A0_BASE、timer_A_CAPTURECMPLE_REGISTER_1); } 其他 { meas2 = Timer_A_getCaptureCompareCount (timer_A0_BASE、timer_A_CAPTURECMPLE_REGISTER_1); } }

谢谢、

Olivier

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Olivier、
    当我在红色 MSP432P401R Launchpad 上尝试代码并强制 P2.4输入为高电平/低电平时、我会看到您所描述的捕获。 (我的断点命中中断处理程序中代码的那一部分)。 我使用的是 SimpleLink MSP432 SDK v 1.40.00.28。 您使用的 SDK 是什么版本以及 Launchpad 的类型(红色或黑色)?

    Ps -输出脉冲为12.8us。 这是您想要的吗?

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

    我使用的是黑色 Launchpad。 我在 CCS 的"安装详细信息"菜单中进行了选中、但我没有找到要使用的 SDK。 您能否提供有关如何查找的更多详细信息?


    此致、

    Olivier

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

    我使用的是最新的 CCS6.2版本。

    如果我理解正确、则不再支持 MSP432Ware、所有内容都已迁移到 SimpleLink。 因此、我删除了 TI 文件夹并从头开始重新安装 CCS6.2版本。 检查更新并应用更新。 然后安装 simplelink_msp432_sdk_1_40_00_28

    资源管理器安装详细信息菜单中、没有任何 SimpleLink 内容。

    我错过了什么吗?

    此致、
    Olivier

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

    请快速注意、黑色 LaunchPad 包含预制器件。 自从两年前我们在软件和硬件方面发布该器件以来、该器件发生了许多变化。 自那时起、我们已将器件更新为完全符合 CMSIS 标准、对器件 ROM 中的 driverlib 进行了更改、并对我们支持该操作的方式进行了大量更改。 对于 SimpleLink SDK、我们仅支持 MSP432上的修订版 C 和 D。 黑色 LP 仅有修订版 B。在本例中、我们建议升级到可在 ti.com/tool/msp-exp432p401r 上找到的红色 Launchpad。

    您可以在本文档的第3节中找到更多信息: www.ti.com/.../slaa700

    由此给您带来的不便、我们深表歉意。 这是一款性能改进产品、可确保发布的器件达到最佳性能、总的来说、我们不得不将支持移至这些更新的版本。

    请注意、SimpleLink SDK 也仅支持 CCSv7、其完整版是免费的、可从 www.ti.com/.../ccstudio 下载
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Evan、

    我将 CCS 安装升级到 CCSv7、SimpleLink SDK 安装确实非常简单(只需点击一下即可)。

    我知道黑色 LP 不再受支持、现在是时候获取最后一个 LP 了。 您是否回收这些 LP? 我的意思是、如果您回收 LP、我可以将其发送给您(不要求与红色 LP 进行交换)。

    我的代码中存在明显的错误。 第44行和第45行应为

    GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P2、GPIO_PIN4、GPIO_PRIMARY_MODULE_Function); 

    回波引脚是输入而不是输出。

    此致、

    Olivier