930电子网

 找回密码
 立即注册
艾克姆科技推出最新产品STC32G12K128开发板
查看: 19063|回复: 3

app定时器处理函数调用串口透传发送函数导致定时器自动停止

[复制链接]

57

主题

80

帖子

366

积分

中级会员

Rank: 3Rank: 3

积分
366
发表于 2020-9-23 19:49:43 | 显示全部楼层 |阅读模式
#define LED_TOGGLE_INTERVAL         APP_TIMER_TICKS(4)

static  uint8_t data_array[BLE_UARTS_MAX_DATA_LEN] = {'t','e',0x0d};

static void led_toggle_timeout_handler(void * p_context)

{
  
  uint16_t length = 3;
  uint32_t       err_code;
  

UNUSED_PARAMETER(p_context);
  NRF_LOG_INFO("app timer start");
  do
    {
        err_code = ble_uarts_data_send(&m_uarts, data_array, &length, m_conn_handle);
        if ((err_code != NRF_ERROR_INVALID_STATE) &&
            (err_code != NRF_ERROR_RESOURCES) &&
            (err_code != NRF_ERROR_NOT_FOUND))
        {
               APP_ERROR_CHECK(err_code);
        }
     } while (err_code == NRF_ERROR_RESOURCES);
  
}
static void timers_init(void)
{

    ret_code_t err_code = app_timer_init();
  
   APP_ERROR_CHECK(err_code);

    err_code = app_timer_create(&m_led_toggle_timer_id,
                                APP_TIMER_MODE_REPEATED,
                                led_toggle_timeout_handler);
   APP_ERROR_CHECK(err_code);

}

static void application_timers_start(void)
{
    ret_code_t err_code;
  
    err_code = app_timer_start(m_led_toggle_timer_id, LED_TOGGLE_INTERVAL, NULL);
   APP_ERROR_CHECK(err_code);


}
在app定时器处理函数中调用 err_code = ble_uarts_data_send(&m_uarts, data_array, &length, m_conn_handle),主机连接从机成功后,app定时器运行,直到更新连接参数后,app定时器自动停止。不知道为什么
回复

使用道具 举报

3

主题

8

帖子

97

积分

注册会员

Rank: 2

积分
97
发表于 2020-9-24 22:34:08 | 显示全部楼层
遇到了类似的问题。我是在串口透传的基础上加了一个软件定时器,在定时器的回调里做IO口的翻转,但是发现运行一段时间定时器会自动停止。请问楼主找到解决方法了吗?
回复 支持 反对

使用道具 举报

52

主题

354

帖子

6545

积分

版主

Rank: 7Rank: 7Rank: 7

积分
6545
发表于 2020-9-27 10:51:32 | 显示全部楼层
对于定时时间比较短,超时时间里面执行发送或其他相对耗时的任务时,很容易出问题。
对于你的这段代码,有2个方面要注意:
1:定时时间太短。
2:要打印错误代码,看看是什么原因产生的错误
回复 支持 反对

使用道具 举报

57

主题

80

帖子

366

积分

中级会员

Rank: 3Rank: 3

积分
366
 楼主| 发表于 2020-9-27 14:11:52 | 显示全部楼层
Ellsion 发表于 2020-9-24 22:34
遇到了类似的问题。我是在串口透传的基础上加了一个软件定时器,在定时器的回调里做IO口的翻转,但是发现运 ...

我做过翻转io的实验,没遇到过这个问题,你检查一下定时器配置是不是循环计时。我目前的解决方法是,软件定时器,计时置位标志位,在while里面调用 ble_uarts_data_send(&m_uarts, data_array, &length, m_conn_handle)。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|官方淘宝店|930电子网 ( 皖ICP备16000695号-2 )

GMT+8, 2024-11-21 19:17 , Processed in 0.092375 second(s), 22 queries .

快速回复 返回顶部 返回列表