关于CH583M 蓝牙串口(BLE_UART)例程相关问题

1、关于tmos_start_task的延迟时间

image.png

2、这段条件代码的具体内容?

image.png


3、蓝牙发送数据到串口3的相关数据处理代码在这实现吗?

image.png

4、串口3发送到蓝牙的数据 的相关数据处理代码在这实现吗?

image.png


5、关于tmos_start_task(Peripheral_TaskID, UART_TO_BLE_SEND_EVT, 2)函数

image.png

填写时间不要超过23.5小时即可,蓝牙的最大值唤醒时间。

将串口发送过来的数据,存放到缓存,然后将缓存的数据再通过蓝牙noti发送给主机。

是在这个回调函数处理接收数据并保存到buf里面。

串口的数据先经过环形缓冲区再发送给主机。

一个id对应16个任务,可以自行添加。tmos讲解:

WCH TMOS用法详解 - debugdabiaoge - 博客园 (cnblogs.com)


串口3中的数据先保存在缓存中,然后蓝牙noti从缓存中读取数据直到FIFO Buffer中读取完,然后就不经过缓存了,直接读取?那要怎么在串口3通过蓝牙noti发送数据之前修改串口3中的数据?(通过哪个函数)

然后蓝牙noti发送的数据是修改后的数据?


串口发送数据的时候,经过中断,将R8_UART3_RBR寄存器的数据读取到app_uart_rx_fifo,然后将app_uart_rx_fifo数据传给to_test_buffer再通过noti发送出去。

数据收发的时候一定会经过环形缓冲区。

串口3的数据已经收发完成是无法修改的,但是通过noti的数据可以不从缓冲区获取,自行写一个自定义的数组传递数据。

image.png


image.png

这个函数中没有定义如何发送noti数据的?

所以要先修改to_test_buffer中的值,才能达到自定义数据发送的目的?


image.png

在my_buffer_read (仿写app_drv_fifo_read())中将to_test_buffer的值拷贝到my_arr_buffer就再通过ble_uart_notify发送就可以了吗?


可以跑一下例程BLE_UART,然后在数据收发的时候将上面提到的几个缓存均打印出来看看里面的值。

发送noti 是调用ble_uart_notify,因为函数已经给你封装好了,直接调用就行。



image.png

这四个函数分别有什么作用呢?


那我可以直接再调用这些函数把 FIFO中的数据写入我自定义的数组中(my_arr_buffer)然后再调用ble_uart_notify把自定义数组中的数据发出去?


举例:app_drv_fifo_write,比较明显可以看出来将传参的data数据赋值给fifo,也就是数据存放到某个缓存中。

image.png

可以存放到自己的数组中,可以调用noti发送自己的数组数据。


image.png

直接用这个read也可以吧 read到我的数组中 同时,也把fifo出栈清除了


您好,请问BLE_UART串口透传的最大速度能达到多少?我需要约24KB/S的传输速率。由于CH58x没有UART DMA,我看BLE_UART中的做法是在串口接收中断设置flag,并在主循环中将接收fifo中的数据取出,这样在数据速率较高时可能会丢包,可否通过硬件流控解决?


24KB/S的速度可能会出现丢包,建议串口硬件做流控,并且出现丢包后进行重传。

目前测速可以将MTU配置为最大244,串口波特率提高。


只有登录才能回复,可以选择微信账号登录