串口初始化时,设置为UART_MODE_CALLBACK模式。
任务创建时,调用下方所示的hal_uart_Open函数,打开串口。然后再调用下方所示的hal_uart_Close函数,关闭串口。随后程序进入主循环,等待信号量。因为没有post过信号量,所以模块应该进入休眠。
但是实测发现,存在700多uA的电流。
然后修改程序,创建任务时,不再执行打开和关闭串口的动作,直接进入主循环,等待信号量。此时挂机电流正常。
请问为什么会出现这个700多uA的电流,是串口没有正常关闭吗?
void hal_uart_Callback(UART_Handle handle, void *buf, size_t count)//串口回调函数
{
UART_read(myuart, &callbuff, 1);
}
void hal_uart_Init(void)
{
UART_init();
UART_Params_init(&myuartParams);
myuartParams.writeDataMode = UART_DATA_BINARY;
myuartParams.readDataMode = UART_DATA_BINARY;
myuartParams.readReturnMode = UART_RETURN_FULL;
myuartParams.readEcho = UART_ECHO_OFF;
myuartParams.baudRate = 9600;
myuartParams.readMode = UART_MODE_CALLBACK;
myuartParams.readCallback = hal_uart_Callback;
}
void hal_uart_Open(void)//打开串口
{
myuart = UART_open(Board_UART0, &myuartParams);
if(myuart == NULL)
{
while(1);
}
UART_read(myuart, &callbuff, 1);
}
void hal_uart_Close(void)//关闭串口
{
UART_readCancel(myuart);
UART_close(myuart);
myuart = NULL;
}
void uartRxTxfunc(UArg arg0, UArg arg1)//任务函数
{
hal_uart_Open();
hal_uart_Close();
//主循环
while(1)
{
Semaphore_pend(uartRxTxTaskSemHandle, BIOS_WAIT_FOREVER);
}
}