大家好、
在使用 CC2541进行开发时、我偶然发现了一个奇怪的行为、我无法解释、因此无法防止。 感觉我在这里遗漏了一些东西:
设置:
CC2541通过具有激活的硬件流控制功能的 UART 连接到主机。 BLE 始终运行、并广播、连接等
连接主机的 UART RX 缓冲区大小为一个字节。 因此、在 CC2541发送的每个字节之后、主机将其流控制线拉高、将该字节从 RX 缓冲区中获取、将该字节回传给 CC2541并清除流控制线、并准备好接收另一个字节。 只要主机将其流量控制线拉为高电平、CC2541就会在发送下一个字节之前等待、这会按预期正常工作。 您可以在随附的逻辑分析仪屏幕截图中看到它。
由 CC2541 µs 的流控制线路上会发生怪异的行为:该线路被反复拉高几 μ s。 我发现 、当函数 HalUARTPoll()被调用时、这会一直发生。 通过在 UART 回调函数中包含硬编码延迟(由 POLL 函数调用)(通常用于按压不同的 HAL UART 事件)、我看到流控制中高电平状态的持续时间分别更长。
您可以看到此行为的屏幕截图。 在较长的时间刻度上、可以看到、由于连接间隔为30ms 的已连接 BLE 状态、每30ms 轮询就会停止(在 BLE 事件期间、OSAL 不会调用 UART 轮询)。
此行为不会干扰系统的运行、因为流量控制上的峰值太短而导致问题。 不过、这种行为对我来说看起来很乱、我不会按预期对我进行查看。
我的问题:如何防止硬件流控制线路在 HalUARTPoll()期间被拉高
感谢大家的帮助! :-)
附录:
基于 simpleBLEPeripheral 的固件
相关固件代码:
定义的预处理器符号:
INT_HEap_LEN=3072
HALNODEBUG
OSAL_CBTIMER_NUM_TESS=1
xPOWER_Saving
HAL_AES_DMA=true
HAL_DMA=true
xPLUS_Broadcaster
HAL_LCD=false
HAL_LED=false
HAL_key=false
HAL_UART=true
HAL_UART_DMA=2
HAL_UART_ISR=0
HAL_UART_DMA_IDLE=5
HAL_UART_DMA_HIGH=48
HAL_UART_DMA_TX_MAX=128
HAL_UART_DMA_RX_MAX=128
UART Init 例程:
serialInterface_uartConfig.configured = true;
serialInterface_uartConfig.波特 率= HAL_UART_BR_115200;
serialInterface_uartConfig.FlowControl = true;
serialInterface_uartConfig.flowControlThreshold = 48;
serialInterface_uartConfig.Rx.maxBufSize = 128;
serialInterface_uartConfig.TX.maxBufSize = 128;
serialInterface_uartConfig.idleTimeout = 5;
serialInterface_uartConfig.intEnable = false;
serialInterface_uartConfig.callBackFunc =(halUARTCBack_t) serialInterface_uartCallback;
(空) HalUARTOpen (HAL_UART_PORT_1、&serialInterface_uartConfig);
UART 回调例程
void serialInterface_uartCallback (uint8端口、uint8事件)
{
//未使用的输入参数,函数目前不执行任何操作
(空)端口;
(无效)事件;
返回;
}
UART 写入(在主任务中、定期调用、每1000ms 一次):
HalUARTWrite (HAL_UART_PORT_1、"Test"、4);
UART 读取(在主任务中、定期调用(每500ms 一次)):
Len = hal_UART_RxBufLen (HAL_UART_PORT_1);
HalUARTRead (HAL_UART_PORT_1、&buf、len);

