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.

[参考译文] CC2340R5:带时钟模块的 LED 闪烁

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1486226/cc2340r5-led-blink-with-clock-module

器件型号:CC2340R5

工具与软件:

您好!

我使用 CC2340R5作为外设。 我有一个用例。 当按下 CC2340R5上的按钮通知中央设备消息时、一个 LED 将亮起、在 250毫秒后熄灭。 此外、为了方便您参考、我的整个项目仅在一个蓝牙主线程中运行、而且 GPIO 仅在同一线程中运行

目前、我正在使用 ClockP 模块、这是我的函数:

void toggleLedOnce (){
GPIO_WRITE (LED_RED、1);
ClockP_usleep (250000);
GPIO_WRITE (LED_RED、0);
}

但是 ClockP_usleep 会使蓝牙任务进入睡眠状态吗? 这将延迟向右中央发送命令?. 因此,我不是睡眠,我不能用其他东西来实现这种像一次性计时器中断吗?所以,按下按钮, LED 将开始发光,我将启动计时器。250毫秒后,计时器中断被触发,我关闭 LED ,计时器过期? 我只有一个线程(主要蓝牙线程)、不想为实现这一目的而创建单独的线程。此外、请注意、我无法在我的项目中使用 Led.h 模块。 我必须仅使用 GPIO 实现 blinkLedOnce。 请建议如何操作

此外,我尚未初始化我的代码中当前的任何时钟模块,但我直接使用 ClockP_usleep(),它不会导致这样的任何问题。 这样可以吗? 无论可用于计时器和时钟的任何示例都非常复杂和令人困惑、因此请帮助我。

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

    您好、Roy:

    此处应该有两个易于实施的解决方案:

    1.使用仅切换 LED 的计时器(LGPTimer)、但将使用计时器外设(耗电等)

    2.使用 LED 闪烁功能。  

    谢谢!
    Alex F

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

    您好、Alex、

    我正在使用 ClockP 模块一次性计时器、并且我能够实现 LED 闪烁功能。

    我有一个查询、用例是让 LED 闪烁两次、然后停止。 但多脉冲计时器永远运行。 我设置了一个给定的周期

    ClockP_Params_init (&clkParams);
    uint32_t 时钟周期= ledBlinkDuration*1000;
    clkParams.period =时钟周期;//多次触发计时器
    clkParams.startFlag = false;//请勿在初始化时钟后立即启动时钟
    clkParams.arg =(uintptr_t) clockTimeoutCb;
    //初始化时钟实例。
    clkHandle = ClockP_CREATE ((void*) BLEAppUtil_invokeFunctionNoData、10000*1000、&clkParams);

    根据说明: *周期的默认值为0、表示单次触发时钟对象。
    *非零周期表示将调用时钟函数
    *在周期速率(以系统时钟周期为单位)下、在之后
    *时钟初始启动并设置为以"超时"过期
    *参数。

    超时测量在哪里? 如何设置它? 据我所能理解的、

    ClockP_create (ClockP_Fxn clkFxn、uint32_t timeout、ClockP_Params * params)

    超时参数是在 ClockP_create 中设置的、但是不管我提供什么值、它都将永远运行。 请详细说明此超时如何工作以及如何使用此设置实现 LED 的2次闪烁。

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

    您好、Roy:

    您可以轻松使用此处的 led_debug (#include "led_debug.h")、简称为"blinkLed (GREEN_LED、3、50);"。

    对于 ClockP、timeout 参数应该只是  uint32_t timeout、您可以参考此处的 ClockP 部分获取更多信息:Timers—SimpleLink 低功耗 F3 SDK BLE5-Stack 用户指南3.03.03.04.00文档

    谢谢!
    Alex F

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

    您好、Alex、

    什么是 led_debug.h? 我找不到任何这样的文件。 如果我包含它、它会导致错误。 如果我使用多次计时器并执行 LED 闪烁两次、那么在2次之后我需要调用 ClockP_stop (clkHandle)函数对吗? 如果没有它、就没有其他方法可以实现这一点?

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

    您好、Roy:

    led_debug.h 位于 C:\ti\simplelink_lowpower_f3_sdk_8_40_00_61\source\ti\common\cc26xx\debug (使用8.40 F3 SDK)中。

    谢谢!
    Alex F