大家好!
我正在努力完成调光器件、正如我之前在这里所说的、我使用 Z-Stack Home 1.2.2a.44539和 SampleLight 项目作为参考。
我的设备已连接到网络中、并作为调光器件发送和响应所有必要的消息、包括 ZCL 消息。
我在这里看了 Yikai 先生的帖子(https://sunmaysky.blogspot.com/2014/11/how-to-output-pwm-from-cc2530.html ),以了解如何启动计时器以及使用 PWM 定义并在调光器器件中实现它所需的其他参数。
我想使用 P1.1作为 PWM 端口。 要设置它,我使用了来自 YK´s POST 的第二部分代码:
网址: hal_board_cfg.h
PERCFG |= BV (6);//选择 Timer 1备用2位置
P2DIR =(P2DIR &~0xC0)| 0x80;//为定时器1指定优先级
P1SEL |= BV (1);//将 P1_1设置为外设
T1CC0L = 0x3A;// PWM 信号周期
T1CC0H = 0x01;
T1CC1L = 0x9D;// PWM 占空比
T1CC1H = 0x00;
T1CCTL1 = 0x1c;
T1CTL |=(BV (2)|0x03);
我在编译选项 HAL_PWM 中进行注释、以开始在所有这些 ZStack 文件中使用 PWM 定义。
下一步、在我的脑海中、是在我的应用文件(zlc_myProject.c)中设置 PWM 定义、并且需要使用一些函数来设置特定端口上的占空比变化(在我的示例中为 P1.1)。 ´m 我说过、使用 zcl_samplelight 作为参考、在该文件中、我看到了一些 PWM 定义结构、正如我描述以下内容:
#if (定义 HAL_Board_ZLIGHT)||(定义 HAL_PWM)
HalTimer1Init(0);
halTimer1SetChannelDuty (white_LED,0);
halTimer1SetChannelDuty (red_LED,0);
halTimer1SetChannelDuty (blue_LED,0);
halTimer1SetChannelDuty (GREEND_LED、0);
void zclTTa0003_UpdateLampLevel (uint8 level)
{
uint16 gammaCorrectedLevel;
//伽马校正级别
gammaCorrectedLevel =(uint16)(pow ((float) level / level_MAX)、(float) gamma_value)*(float) level_MAX);
halTimer1SetChannelDuty (white_LED、(uint16)(((uint32) gammaCorrectedLevel*PWM_FULL_Duty_cycle)/level_MAX);
}
#endif
+
*@fn zclTTa0003_AdjustLightLevel
*
*@在状态机运行时、每隔10秒调用一次简要
*
*@param none
*
*@返回无
*
静态空 zclTTa0003_AdjustLightLevel( void )
。
。
。
我尝试理解:
如何在应用程序定义中将 hal_board_cfg.h 与特定端口(我的案例 P1.1)链接?
我n´t 白光 LED、红光 LED、绿光 LED 和蓝光 LED、但在 hal_board_cfg.h 中找不到任何相关代码行。
每个应用代码函数都负责增加或减少占空比、即使使用了 white_LED、red_LED 等。
我认为我不能使用 white_LED 和其他 LED、或者需要将一个 LED 与 P1.1端口相关联。
有人可以提供一种方法来理解它以完成我的项目?
BR
Alex