嗨对话框,
我试图建立一个periphal设备的UART通信。后来,我想通过BLE发送接收数据到另一个设备 - 我选择了ble_multi_link演示的基础上。
这怎么可以读出从UART数据不止一次?是否有可能接收时出现中断在RX输入数据?
我试着下面的代码,但它会导致重复复位。
ble_multi_link_task(无效* PARAMS){
。
。
为了(;;) {
uart_device开发;
INT RX_DATA;
dev的= ad_uart_open(SERIAL2);
ad_uart_bus_acquire(DEV);
RX_DATA = ad_uart_read(DEV,BUF,4,OS_EVENT_FOREVER);
ad_uart_bus_release(DEV);
}
}
谢谢!
设备:
你好马里奥,
关于代码,您已经粘贴的几点意见,多链路是媒体链接,以重新定位中的printf()functionallity使用UART2模块(该CONFIG_RETARGET是定义用于配置和printf()的functionallity重定向到UART2),也是本重新定位,以便据我所知,您是由底层驱动程序,并通过适配器访问相同periheral不使用的适配器,但LLD驱动程序,这不会在目前反对的问题,但如果设备得到用数据强调,这可能会造成问题。
您也可以放置初始化代码在任务为(;;)循环开始UART接口,这意味着,每一次本作(;;)执行后执行同样的功能(这不是正在发生,虽然因为你是堵与UART超时任务的执行)。此外,我想你已经放置在片断已附着看门狗功能执行之前(sys_watchdog_notify()和sys_watchdog_suspend())。这意味着,看门狗运行时,你永远等待,直到4个字节的数据来你的UART,代码将做任何事情的机会之前,在watchdog_Handler()结束。
我不明白究竟你的意思是“从UART不止一次读取数据”时,ad_uart_read()将阻塞任务,直到时间的流逝(在你的情况与
OS_EVENT_FOREVER这不会发生)或者收到4个字节,此功能还不使用任何回调以通知您,因为该功能已阻止以来数据已到达。您还可以检查AD_UART_READ_ASYNC()函数不会阻止任务,并将等待要接收的指定数量的字节(请注意,在先前的事务完成之前无法连续调用此函数),此函数正在执行当预定义数量的数据到达时,回调。由于SDK使用适配器而不是LLD,适配器使用中断,因此需要一些努力,以便不使用适配器并使用低级驱动程序实现代码,因此使用中断。
这将触发UART互动的任务可能是因为存在一个媒体链接实现的任务或新任务,将处理您的UART,这取决于具体的实现。你还必须知道,当设备处于休眠模式下,所有外设,包括UART断电,所以在睡眠模式下,您将无法有UART交互,除非唤醒设备。所以,你可以拥有百达唤醒设备或实施了以下方案:外部设备发送数据之前,它首先会唤醒68X,这意味着你将不得不使用硬件流控制,以使外部设备唤醒68X通过RTS引脚。
让我们假设你想在同一时间从UART一个字节读取数据并打印回终端,一个简单的实现使用上的多重UART的可能是以下的原因。
谢谢mt_dialog.
谢谢!
非常感谢您详细的答复。重用ad_uart_read_async()之后,我能够从UART就像中断读取数据。感谢您的,,详细回答真的帮了我。:)