鸿蒙OS下 XR806串口操作
-
大家好,目前的案子需要用到串口来收发数据,在OS下,操作串口并不那么随意就在中断中写代码;我也看了贵司提供的函数(我看UART HAL层的代码并没有开放);只看到了如下代码,例如
int IoTUartRead(unsigned int id, unsigned char *data, unsigned int dataLen)
{
int ret = -1;if ((UART_ID)id >= UART_NUM) { printf("IoTUartRead id=%d error\r\n", id); return IOT_FAILURE; }
#if (defined(UART_POLL_MODE))
ret = HAL_UART_Receive_Poll((UART_ID)id, data, dataLen, 1000);
#endif#if (defined(UART_IT_MODE))
ret = HAL_UART_Receive_IT((UART_ID)id, data, dataLen, 1000);
#endif#if (defined(UART_DMA_MODE))
ret = HAL_UART_Receive_DMA((UART_ID)id, data, dataLen, 1000);
#endifreturn ret;
}
就代码来看
1、这里面有几个宏,,是对3个串口都起作用的
也就是开启中断接收宏,3个串口就都是通过中断接收的
2、接收超时时间设置成了固定的1000ms,这个1000ms能改吗? -
1、里面的这几个宏,其实是因为hal接口提供了三组接收方式,而鸿蒙仅提供了一种接收方式,所以才这么写的。这里有几个问题,一个是XR806的IO口复用是在device/xradio/xr806/xr_skylark/project/common/board/xr806_dig_ver/board_config.c这个文件里面设置的,当前的配置是UART1和uart2公用一组IO口了,uart0是打印串口,一般不会修改。二是hal接口也是开放的,头文件在在device/xradio/xr806/xr_skylark/include/driver/chip/hal_uart.h这里,源码在device/xradio/xr806/xr_skylark/src/driver/chip/hal_uart.c。但是hal接口可以用,也可以看,但是因为是集成在rom里面的,所以对src文件夹的修改无效。三是你如果希望串口1使用循环接收,串口2使用中断接收,你就需要对IoTUartRead进行修改了,识别到是哪个串口,则进行哪种传输方式。
2、1000ms是可以改的。这个也是hal接口和鸿蒙借口有冲突的产物。 -
@salt_fish 我其实想用 串口2、3 串口1作为调试使用和烧录固件,不会改动
-
@zhugx 我认为你的意思是希望烧录接口和打印接口分开是吗?首先是烧录口是固定的,这没办法,但是如果你想把串口2变成打印接口的话,可以修改device/xradio/xr806/xr_skylark/project/common/board/xr806_dig_ver/board_config.h里面的BOARD_MAIN_UART_ID的值,改成UART2_ID即可。
-
@salt_fish 串口1做为打印串口不动,我需要串口2和串口3来控制设备
-
@zhugx 串口2和串口3直接调用接口即可。你是担心配置串口2会影响到串口1吗?不会的,串口之间是相互独立的。
Copyright © 2023 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号