本帖最后由 东东3 于 2024-10-28 16:35 编辑
PB03共支持2路UART,系统日志打印默认使用UART0(P9、P10),可通过DEBUG_INFO配置关闭或打开。当开启休眠模式后系统进入休眠时,UART信息会丢失,唤醒后需要重新配置。初始化串口主要使用uart_Cfg_t进行配置,距离成员介绍如下图:
工程中已经给我们配置好了串口0,具体函数为LOG_INIT(),这里一配置串口1为例,可使用除TEST_MODE、P16、P17、P1之外的其他GPIO配置为串口1。
- void uart1_init(void)
- {
- uart_Cfg_t cfg =
- {
- .tx_pin = P18,//发送GPIO
- .rx_pin = P0,//接收GPIO
- .rts_pin = GPIO_DUMMY,
- .cts_pin = GPIO_DUMMY,
- .baudrate = 115200,//波特率
- .use_fifo = TRUE,
- .hw_fwctrl = FALSE,
- .use_tx_buf = FALSE,
- .parity = FALSE,
- .evt_handler = uart2_data,//串口回调函数
- };
- hal_uart_init(cfg, UART1);//初始化
- }
复制代码 初始化配置完成后再编写中断回调函数
- static void uart1_data(uart_Evt_t* evt)
- {
- if(modbus.reflag==1) //有数据包正在处理
- return;
- memcpy(modbus.rcbuf,evt->data,evt->len);//将接收数据复制到modbus.rcbuf
- modbus.recount = evt->len;//接受数据长度
- modbus.reflag = 1;//接收数据完毕
-
- //清空缓存区
- for(int i=0;i < evt->len;i++)
- evt->data[i] = NULL;
- }
复制代码 发送函数:hal_uart_send_buff(uint8_t *buff,uint16_t len)
uint8_t* buf 需要发送的数据
uint16_t len 需要发送的数据长度
Tx 发送数据,如果为同步模式,函数阻塞,发送完成或者发送超时返回,如果为异步模式,函数非阻塞,数据传输完成之后通过回调函数抛出UART_EVT_TYPE_TX_COMPLETED事件。
|