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/MSP432P401R:MSP432 Launchpad 的延迟功能

Guru**** 2542950 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/588153/ccs-msp432p401r-delay-function-for-msp432-launchpad

器件型号:MSP432P401R

工具/软件:Code Composer Studio

朋友们、您好!

我正在 MSP432P401R Launchpad 中执行一个项目。 对于我的项目、我需要一个精确的延迟函数、因为我需要毫秒和微秒的延迟。 是否有人建议为使用 CCS Studio 的 msp432 Launchpad 提供精确的延迟功能。

谢谢你。

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

    使用计时器模块可能是执行精确计时任务的最佳选择-当然、您需要精确的时钟源。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Dennis:
    您能否给我一个使用 msp432计时器模块进行 LED 切换的示例项目。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尤其请看一下这些 代码示例

    • msp432p401x_ta0_01                            Timer0_A3、Toggle P1.0、CCR0 Cont Mode ISR、DCO SMCLK
    • msp432p401x_ta0_02                            Timer0_A3、切换 P1.0、CCR0向上计数模式 ISR、DCO SMCLK
    • msp432p401x_ta0_03                            Timer_A3、切换 P1.0、溢出 ISR、DCO SMCLK
    • msp432p401x_ta0_04                            Timer0_A3、切换 P1.0、溢出 ISR、32kHz ACLK
    • msp432p401x_ta0_08                            Timer_A3、切换 P1.0;P7.3、P2.4-5、续 模式 ISR、32kHz ACLK
    • msp432p401x_TA1_05                            Timer1_A3、切换 P1.0、CCR0续 模式 ISR、32kHz ACLK
    • msp432p401x_TA1_11                            Timer_A3、切换 P8.0/TA1.0、向上计数模式、32kHz ACLK
    • msp432p401x_TA1_13                            Timer1_A3、切换 P8.0/TA1.0、上数/下数模式、DCO SMCLK
    • msp432p401x_TA1_14                            Timer1_A3、切换 P8.0/TA1.0、上行/下行模式、32kHz ACLK

    Dennis

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

    尊敬的 Dennis:
    将代码复制粘贴到 CCS 工程时、会显示许多错误。 很抱歉、我不是一名专家、无法解决这么多错误。我的 CCS 版本为6.1.2。 我只能安装此版本、因为较大版本在安装过程中显示错误。 那么、您能否为我提供 一个针对我的版本使用计时器的 LED 切换项目。

    以下是复制粘贴  msp432p401x_ta0_02 项目时的错误

     

    说明资源路径位置类型
    #135预计出现一个字段名称 blink.c /timer line 76 C/C++ problem
    #135预计出现一个字段名称 blink.c /timer line 100 C/C++ problem
    #137结构" "没有字段"CCR" blink.c /timer line 87 C/C++ problem
    #137结构" "没有字段"CCTL" blink.c /timer line 85 C/C++ problem
    #137结构" "没有字段"CCTL" blink.c /timer line 86 C/C++ problem
    #137结构" "没有字段"CCTL" blink.c /timer line 98 C/C++ problem
    #137结构" "没有字段"CTL" blink.c /timer line 71 C/C++ problem
    #137结构" "没有字段"CTL" blink.c /timer line 88 C/C++ problem
    #20标识符"P1"未定义 blink.c /timer line 75 C/C++ problem
    #20标识符"P1"未定义 blink.c /timer line 100 C/C++ problem
    #20标识符"TIMER_A_CCTLN_CCIE"未定义 BLINK .c /TIMERA LINE 86 C/C++问题
    #20标识符"TIMER_A_CCTLN_CCIFG"未定义 BLINK .c /TIMERA LINE 85 C/C++问题
    #20标识符"TIMER_A_CCTLN_CCIFG"未定义 BLINK .c /TIMERA LINE 98 C/C++问题
    #20标识符"TIMER_A_CTL_MC_UP"未定义 BLINK .c /TIMERA LINE 89 C/C++问题
    #20标识符"TIMER_A_CTL_ssel_SMCLK"未定义 blink.c /timer line 88 C/C++ problem
    #20标识符"WDT_A_CTL_HOLD"未定义 blink.c /timer line 72 C/C++ problem
    #20标识符"WDT_A_CTL_PW"未定义 blink.c /timer line 71 C/C++ problem

     

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

    我喜欢模仿 Arduino Millis()函数。 这对于毫秒延迟非常有效-您需要对其进行微秒分辨率测试。

    //全局
    易失性 uint32_t Tick;
    
    //在 main/init 中
    MAP_SysTK_enableModule();
    MAP_SysTK_setPeriod (1500000);//取决于您的时钟和节拍要求
    MAP_SysTK_enableInterrupt ();
    
    /*启用主中断*/
    MAP_Interrupt_enableMaster ();
    
    //...
    
    void SysTick 处理程序(void)
    {
    tick++;
    }
    
    

    为计时、您只需在开始时保存节拍、并在结束时减去当前节拍。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Keith、
    我不明白上述代码的结果是什么。 如何使用上述代码添加延迟?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以使用它来添加延迟、也可以在主循环中的某个时间使用它来执行某些操作。

    对于延迟、编写一个函数:

    void delay (uint32_t delay_ms)//假设节拍为1ms。

    uint32_t start =节拍;

    while (Tick - start < delay_ms);// nop


    它还为您提供通用计时器。

    另外、如果您有一个"事件循环"、则可以有一个不会阻止主线程的延迟:

    MAIN ()

    //init 填充
    uint32_t Repetation_time = 300;//每隔300ms 左右

    uint32_t start_time =节拍;
    while (1){//事件循环
    //填充
    if (Tick - start_time > Repetation_time){
    START_TIME = Tick;//重置时钟
    //每次重复都执行所需的操作



  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Keith、
    请您解释一下这个逻辑、很抱歉、我不认为这个代码会增加延迟。