打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
打开POWER

最近项目里beacon的调试涉及到电源管理以及串口的使用,瓶颈了许久许久....

宏定义了POWER_SAVING之后,意味着也就打开了相关电源管理功能,在使用DMA进行串口收发时,就会出现串口无法工作的情况。

开始调试的时候,依旧DMA方式使用串口,打开POWER_SAVING,注释掉协议栈中所有和POWER_SAVING相关的代码之后,会发现串口依旧无法使用。

最终放弃了DMA方式,改用ISR方式串口收发,在去年写的博客中已经介绍了相关ISR方式:http://blog.csdn.net/xiaoleiacmer/article/details/41750491

这样在开启POWER_SAVING的时候,串口可以使用,但是会出现收发字符丢失的现象。


原因是在串口收发的时候,RF中断(优先级高)会抢串口中断,并且因为电源管理功能的开启,会使晶振的振频降低。

解决方法:

使用HCI_EXT_HaltDuringRfCmd函数

/******************************************************************************* * @fn HCI_EXT_HaltDuringRfCmd API * * @brief This HCI Extension API is used to enable or disable halting the * CPU during RF. The system defaults to enabled. * * Related Events: HCI_VendorSpecifcCommandCompleteEvent * * input parameters * * @param mode - HCI_EXT_HALT_DURING_RF_ENABLE, * HCI_EXT_HALT_DURING_RF_DISABLE * * output parameters * * @param None. * * @return hciStatus_t */extern hciStatus_t HCI_EXT_HaltDuringRfCmd( uint8 mode );
这个函数的功能是禁止(DISABLE,)或允许(ENABLE)MCU降低晶振频率。

使用方法: 在休眠中唤醒后DISABLE,休眠前ENABLE 

经过这样设置之后,就不会出现丢字符的状况了。


注:在讨论的时候,有人也建议串口发送的时候开启osal_pwrmgr_device(PWRMGR_ALWAYS_ON),结束之后  osal_pwrmgr_device( PWRMGR_BATTERY );

这样更为保险,但是数据量大的时候,功耗就无法估计了~

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
BLE
STM32 USART 串口 DMA 接收和发送的源码详解!
BLE peripheral协议栈之睡眠管理
STM32 HAL串口DMA发送一直失败
BIOS的基本知识
ZIGBEE电源管理POWER_SAVING有关的函数
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服