ZStack-CC2530-2.3.0-1.4.0 定时器使用问题
我在使用ZStack-CC2530-2.3.0-1.4.0 时需要用到us级别的定时,和pwm输出,现在想通过使用定时器实现以上功能,但是定时器没有工作,不知道在zstack中使用定时器要有哪些步骤呢?谢谢!我已经做了以下工作:
1,配置HAL_TIMER == TRUE;
2,初始化定时器
HalTimerConfig(HAL_TIMER_3,HAL_TIMER_MODE_CTC,HAL_TIMER_CHANNEL_A,HAL_TIMER_CH_MODE_OUTPUT_COMPARE,TRUE,CallBack);
HalTimerStart(HAL_TIMER_3,100);
3,编写定时处理函数
static void CallBack( uint8 timerId, uint8 channel, uint8 channelMode)
{
HalLedSet (HAL_LED_2, HAL_LED_MODE_FLASH);
}
就是这样,没问题啊。。
实际运行定时器没有工作,是不是还要其他要修改的地方,还有怎么在协议栈里面添加pwm功能呢?谢谢!
我是在void GenericApp_Init( byte task_id )这里初始化的,不知道这样有没有问题呢,麻烦知道的高手指点一下谢谢!
没发觉有什么问题,
不知道你有没有单步调试过,
以上程序都执行到了么,
是不是不能进入CallBack啊?
打开pwm功能,
我觉得就是设置一下定时器外设的引脚(设置PERCFG和PxSEL寄存器),
再设置一下匹配时的操作就行了吧(设置CCTL寄存器的CMP[2:0])。
进不去callback,估计是定时器没工作,而且打开定时器后程序就不正常了。
这个版本的协议栈里面,HalTimerConfig函数的第一个参数,是timerId,HAL_TIMER_3对应是硬件上的Timer1
具体可以看下这个函数里面进去的时候,有一个转换的函数。
uint8 HalTimerConfig (uint8 timerId, uint8 opMode, uint8 channel, uint8 channelMode,
bool intEnable, halTimerCBack_t cBack)
{ uint8 hwtimerid;
hwtimerid = halTimerRemap (timerId);
if ((opMode & HAL_TIMER_MODE_MASK) && (timerId < HAL_TIMER_MAX) &&
(channelMode & HAL_TIMER_CHANNEL_MASK) && (channel & HAL_TIMER_CHANNEL_MASK))
{
halTimerRecord[hwtimerid].configured = TRUE;
halTimerRecord[hwtimerid].opMode = opMode;
halTimerRecord[hwtimerid].channel = channel;
halTimerRecord[hwtimerid].channelMode = channelMode;
halTimerRecord[hwtimerid].intEnable = intEnable;
halTimerRecord[hwtimerid].callBackFunc = cBack;
}
else
{
return HAL_TIMER_PARAMS_ERROR;
}
return HAL_TIMER_OK;
}
如果使用其他定时器也是不行的
这个版本是2007的吧
在这个栈里为什么看不到系统时钟的初始化,没有调用到跟定时器有关的函数呢?
再看看HalTimerStart函数就知道了。。
谢谢,不知道这个跟编译选项有关呢,我只有NV_RESTORE =1,和跟uart相关的选项
还有一个问题:我的协调器间隔100ms广播64字节数据(可以看到发送指示灯按间隔时间闪烁),但是中端接收的间隔远大于100ms,无线传输距离<1m,中端接收有一定的间隔,但是完全跟协调器发送的不同,是不是传输过程有自动成帧呢,如果发送的间隔长点(>500ms),发送跟接收就是同步的。有什么办法可以实现发送接收的间隔同步呢,或者近乎同步。谢谢!
ZC在网络里面一直出active状态,因为需要监控管理整个网络,而ZED是有可能处于休眠状态的,那么ZC在向ZED发送数据的时候,它可能认为ZED正处于休眠状态,所以不能立即把数据发出去,那么当ZED发送data request出来的时候,ZC可以判断此时,ZED一定出去active状态,那么这时候才把数据发出去。那么ZED发送数据给ZC,因为ZED知道ZC一直出去active状态,所以想发的时候就直接发出去了。
我的zed配置为路由器也是这样,怎样才能不进入休眠呢,编译选项已经去除POWER_SAVING,DRFD_RCVC_ALWAYS_ON=TRUE.
US级定时的问题到现在有谁解决了?给指导一下吧,这个问题我也遇到了,进不了回调函数
HalTimerStart函数式在哪里调用的呀,还有回调函数CallBack应该放在哪里,而且回调函数里面不用处理中断标志位吗?
您好!您把问题解释得很清楚,但是能告诉我们解决办法吗?我也碰到类似的问题了,谢谢了!
问题没有解决,改方案了