Part Number:CC2642R-Q1
串口打开后,如果要关闭,调用接口UART2_close(uart);会使芯片死机,这是为什么?
Galaxy Yue:
你好,
void UART2_close
(
UART2_Handle
handle
)参数是handle模式
https://software-dl.ti.com/simplelink/esd/simplelink_cc13x2_26x2_sdk/4.20.00.35/exports/docs/tidrivers/doxygen/html/_u_a_r_t2_8h.html#a2a82f370c2f15ececc5b03fbba65bcde
你先看一下
,
shuaige zhang:
我截图的跟文章介绍的,看起来并没有不一样。正常工作电流1.8mA/3.3V,关闭后电流变成4.5mA/3.3V
,
Galaxy Yue:
请问你现在都使用了什么例程,做了什么操作,希望通过UART实现什么?
,
shuaige zhang:
用的simple_center例程,希望实现串口的循环开关(休眠前需要关闭串口),初始化开启串口,通过指令关闭串口
,
Galaxy Yue:
死机的问题可能与驱动程序或硬件相关。建议检查 UART 关闭函数的实现以及相关的硬件电路连接是否正确,可能存在资源释放不完整或者硬件异常导致的问题。(电流增加也是这种的表现形式)
,
shuaige zhang:
贴出来的代码看不出来有问题是吗?
,
Galaxy Yue:
1.麻烦看下你对UART2_Callback部分的代码
2.如果你有使用读写操作,任何正在进行的读取或写入调用都可以使用UART2_readCancel()或UART2_writeCancel()取消。
,
shuaige zhang:
Galaxy Yue 说:1.麻烦看下你对UART2_Callback部分的代码
UART2_Callback代码代码如下:
Galaxy Yue 说:2.如果你有使用读写操作,任何正在进行的读取或写入调用都可以使用UART2_readCancel()或UART2_writeCancel()取消。
关闭串口前使用UART2_readCancel()和UART2_writeCancel(),效果还是一样
,
Galaxy Yue:
目前只能定位到以下几个原因
1.void UART2_close的参数,可能是错误的句柄或者未初始化的句柄
2.串口被其他任务占用或者中断处理程序正在访问该串口
3.内存是否及时释放
,
shuaige zhang:
更正一下,不是死机,是电流变大,其他任务(周期扫描,扫描时电流8mA,扫描结束后电流4mA)还能正常跑
,
Galaxy Yue:
在扫描时候电流变大是正常的,串口处于活动状态时,数据的传输和处理会引起额外的电路活动和功耗增加,所以电流上升是正常的。
扫描结束后电流也有降下来
,
shuaige zhang:
问题与如下相同。设备启动时,单独关闭扫描功能:测量工作电流是1.8mA,此时关闭串口UART2_close,电流变成4mA
,
Galaxy Yue:
1.用下面这段代码试试
void UartApp__Close(void) {UART_Params uartParams;UART_close(hUART);/* Call driver init functions */UART_init();/* Set UART to default parameters. */UART_Params_init(&uartParams);hUART = UART_open(Board_UART0, &uartParams);if (hUART == NULL){/* UART_open() failed */while (1);}UART_close(hUART); 2.你可以单步调试一下,看看关闭UART后发生了什么3.你进入低功耗模式了吗?包括电源管理
,
shuaige zhang:
Galaxy Yue 说:3.你进入低功耗模式了吗?包括电源管理
应用场景是想要进入低功耗模式,但是关闭串口后电流下不去,一直是4mA
,
Galaxy Yue:
有尝试那段代码吗?
以下是BLE5-Stack 用户指南的电源管理部分,其中包含其他资源的有用链接。
如果必须使用睡眠函数,则首选 Task_sleep。由于关闭和打开 UART 驱动程序之间的时间很长,因此我的建议是关闭驱动程序并使用计时器而不是睡眠任务来确定何时重新打开驱动程序。您可以使用 Util 驱动程序,如 simple_peripheral.c 文件中的 Util_* 函数所示。这将允许主要任务像以前一样挂起事件。