我需要在DSPS外设模式应用程序的运行时同时使用UART1和UART2。
基本上在我们的设计中,我们将有2个设备连接到UART1和UART2串行总线。对于当前的DSPS源代码,在编译时通过CFG_PRINTF_UART2标志确定如何使用UART1和UART2。如果设置了CFG_PRINTF_UART2,则将使用UART2驱动程序。如果没有,则使用UART1将消息发送到控制台。
可以选择UART1或UART2并调用它将消息传递到附加设备(通过GPIO引脚分配)吗?我不需要在任何给定的时间调用它们,只要它们可以按顺序选择和调用。
谢谢
--Khai
设备:
你好潘文凯,
谢谢你联系我们。我正在调查你的问题,并将更新你,因为我得到一个解决方案。
问候,
信用证
我继续向前并在da1458x_config_basic.h中插入下面的#define,以查看我是否可以像原来那样运行DSPS,以便它将文本从电话发送到Tera Term控制台。
#定义CFG_PRINTF
#定义CFG_PRINTF_UART2
我也改变了user_sps_scheduler.c文件中的行下面从uart_tx_callback()
将uart_sps_write()转换为uart2_write(),以便它将调用UART2驱动程序将消息写出来。
静态无效uart_tx_callback(uint8_t RES)
{
静态uint8_t大小= 0;
uint8_t * peripher_tx_ptr = NULL;
//当isr不运行时,从uart传输isr或应用程序调用函数
开关(res)
{
案例UART_STATUS_OK:
//获取数据和指针
大小= user_periph_pull(&periph_tx_ptr,大小);
打破;
案例UART_STATUS_INIT:
大小= user_buffer_read_address(&ble_to_periph_buffer,&periph_tx_ptr,TX_CALLBACK_SIZE);
打破;
默认值:
ASSERT_ERROR(0);//错误:回调来源不明被称为
}
//如果有可用的数据,发送数据的外围
如果(大小>0)
{
uart2_write (periph_tx_ptr、大小&uart_tx_callback);
/ / uart_sps_write (periph_tx_ptr、大小&uart_tx_callback);
返回;
}
//在缓冲区中没有数据,因此回调完成
callbackbusy = false;
}
没有写到控制台。但是FW没有显示任何错误。如果您不介意,可以尝试上面的代码,看看是否可以看到相同的结果。
谢谢
--Khai
你好潘文凯,
将数据写入UART的最新问题应该是由于引脚配置造成的。为了查看配置,我需要查看实现。那是可行的上传你的项目审查。
另外,DSPS是基于SDK5.0.2还是SDK5.0.3?你能再确认一下这个吗?
问候,
信用证
当然我使用的是SDK 5.04。
谢谢
--Khai
你好潘文凯,
你能验证这个应用程序使用的是哪个DevKit吗?
而仅供参考,你在工作(如果我指的是正确的)的DSPS是基于我们SDK5.0.3版本。
问候,
信用证
基本的设备
潘文凯,
如何将UART连接到控制台。是通过板载USB还是使用其他硬件来实现?
问候,
Leepeng
我使用的是SPI引脚配置,第二个在J4连接器的右边打印在Basic Kit与P0_4跳,所以我可以得到控制台打印(这个设置被使用,因为我正在测试SPI Flash读写和打印到控制台。我相信spi_flash使用UART2进行主机打印。
谢谢
--Khai
潘文凯,
因此,在代码中,我看到您同时启用了UART(UART1和UART2)。您是否试图通过USB连接使用两个UART进行写入?
您只能通过板载USB使用其中一个UART,为了同时使用这两个UART,您需要另一个FTDI转换器,以便连接到USB。
您能否确认您是否只需要UART2或UART1来解决第二个问题。
问候,
信用证
正如你所看到的那样。我尝试使用uart2_write()而不是uart_sps_write()将消息写入控制台,但它不起作用。我只是在测试是否可以看到uart2_write输出到控制台的设置。基本上,我需要UART1和UART2在我们的设计中工作。
以下三种情况中的一种随时可能发生。
1.消息UART1
2.消息UART2
3.向两个UART发送消息(如果我不能在一次写调用中同时向两个UART发送消息,那么我可以按顺序发送)
通过简单地用uart2_write()替换uart_sps_write(),为什么它不能工作(看不到文本消息的控制台打印),因为我已经为UART2配置了GPIO端口和引脚分配。现在,我只是测试UART2。
当这一切都说了并完成之后,我将需要连接另一根FTDI电缆,以查看控制台到UART1和UART2的输出。我有电缆,但无法按照医生的指示让它工作。如果你能告诉我怎么做,我将非常感激。我迟早需要这样做来检查连接。
谢谢
--Khai
你好潘文凯,
我已经审查了该项目,UART2正在工作。所以这里是您必须使用UART2写入串行终端的设置。
为了连接UART2,您需要在user_peripher_setup .h中将Port0_4和Port0_5分配给uart端口和引脚,以便引脚FTDI引脚连接到UART2。
注意:确保您为UART1禁用了这些相同的引脚,因为将会有分配冲突。
在Basic DevKit上,在UART配置中配置baord。
使用uart2_write()函数来写入数据到终端。
问候,
信用证
你好,信用证,
如果你对我的项目做了关于GPIO设置的更改,请给我发送你让UART2工作的差异。我很难按照你回复信息中的指示去做。
但后来做你的建议只会使UART2写和禁止UART1什么。我的目标是能够在任何给定的时间将消息发送给任意的UART1,UART2或两者兼而有之?UART1和UART2都可以进行配置,以便他们可以在运行时使用?这是我原来的问题。我需要能够做到:
1.从手机应用发送至UART1的消息
2.从电话应用消息发送到UART2
3.从手机应用程序向两个UARTs发送消息(如果我不能在一个单独的写调用中发送到两个,那么我可以按顺序发送它们)
谢谢
--Khai
你好潘文凯,
我期待在查询有关同时使用两个UART的。我已经首先回顾你的UART2问题,看看为什么UART2不工作。我上传的项目和DIFF此主题给你参考。话虽如此,我探索同时使用的情况下,将更新你的。
注意:修改可以在声明前用注释“CHANGES”标识。
问候,
信用证
你好,信用证,
谢谢你帮我找到解决方案。关于这个话题你有最新消息了吗?
谢谢
--Khai
你好潘文凯,
是的,您可以同时使用两个UART。您所要做的就是定义“CFG_PRINTF_UART2“就像你现在做的一样。pin定义和保留都很好,就像你现在拥有的一样。UART1在(0_4,0_5)和UART2在(1_2, 1_3).
然而,对于UART1你需要使用这个函数uart_write()和UART2使用功能uart2_write()如文件中定义的那样“uart.h”
UART1支持板载FTDI连接,UART2支持外部FTDI连接。
如果您对此有任何问题,请让我知道。
问候,
信用证
好的,很好。我会试试的tomorrow and let you know. Did you try it on my DSPS project I sent you? Also, how do I connect the external FTDI cable to the J4 header? If you can walk me thru how to jump the J4 header for writing console output for UART1 and UART2, that would be great.
谢谢
--Khai
当然
是的,我使用您发送给我们的项目进行了测试。
因此,以下是J4上的连接的外观:
连接至FTDI T\U RxD的收割台\U引脚11…端口0\U引脚4(UTX)(根据示意图)
Header_pin13……port0_pin5 (URX)连接到FTDI T_TxD(根据原理图)
header_pin5 ... port1_pin3(分配给UTX)连接到ftdi t_rxd(另一个基本套件)
Header_pin6……port1_pin2(分配给URX)连接到FTDI T_TXD(另一个BASIC工具包)
注意:如果您没有另一个BASIC工具包,您将需要使用任何兼容的FTDI转换器
当连接和断开事件发生时,我尝试写一些数据到uart和uart2。
问候,
信用证
你好,信用证,
那么,我是否要删除所有引用uart_sps.h中的函数调用,以将其删除到user_sps_scheduler.c中uart.h中的调用?uart_sps.c和uart.c之间有什么区别?为什么DSP不直接使用uart.c函数调用控制台读/写,而是创建自己的uart_sps.c?
谢谢
--Khai
你好,信用证,
我只是有时间开始考虑连接外部FTDI电缆以获得第二个UART输出。我有基本套件的UM-B--38文档第8.1节硬件设置中描述的FTDI电缆。
我订购了这个确切的电缆每附件图片。然而,不,我正在查看它,我仍然不知道如何跳过J4头以同时获得UART1和UART2控制台输出。我的问题是:
1.根据J4报头旁边的原理图,我的板目前是基于UART模式跳转的。这允许我在运行DSPS外设FW时使用UART1编写控制台输出。现在,我已经在UART2(1_2, 1_3)上添加了UART2 GPIO配置。我有外部FTDI电缆,如何使用该电缆输出UART2数据?
2.FTDI转换器电缆有6根电线。根据您的上述说明,
header_pin5 ... port1_pin3(分配给UTX)连接到ftdi t_rxd(另一个基本套件)
Header_pin6……port1_pin2(分配给URX)连接到FTDI T_TXD(另一个BASIC工具包)
我只是连接2线从6 FTDI电缆Rx(黄色线)引脚5,和Tx(橙色线)引脚6的基本套件?为了清晰起见,我附上了电缆连接的图片。
谢谢
--Khai
你好,信用证,
你能回答我的问题吗?在你进一步帮助我之前,我被困在这里了。
谢谢
--Khai
你好潘文凯,
对于你第一个问题,DSPS是串行数据传输的蓝牙版本。因此,它包括像uart_sps_write()函数来采取在数据并通过蓝牙接口发送它通过蓝牙或接收数据。如果你看一下实现,uart_write()和uart_sps_write()也有类似的实现,只有前者被写入外设UART及以上BLE后发送数据。
不需要将uart_sps_write()替换为uart_write()。相反,如果您希望将数据写入uart或uart2外设,只需为各自的uart实现一个回调函数。
问候,
信用证
你好潘文凯,
1.根据J4报头旁边的原理图,我的板目前是基于UART模式跳转的。这允许我在运行DSPS外设FW时使用UART1编写控制台输出。现在,我已经在UART2(1_2, 1_3)上添加了UART2 GPIO配置。我有外部FTDI电缆,如何使用该电缆输出UART2数据?
首先,在配置印制在PCB上可以使用UART1到写入数据到串行终端您的PC / MAC经由连接到的devkit迷你USB上。
现在,您可以使用FTDI电缆连接到DevKit上的UART2,电缆的另一端连接到您的PC/MAC。打开两个单独的终端实例,连接到每个端口,您将能够通过UART1和UART2进行通信。
2.FTDI转换器电缆有6根电线。根据您的上述说明,
header_pin5 ... port1_pin3(分配给UTX)连接到ftdi t_rxd(另一个基本套件)
Header_pin6……port1_pin2(分配给URX)连接到FTDI T_TXD(另一个BASIC工具包)
我只是连接2线从6 FTDI电缆Rx(黄色线)引脚5,和Tx(橙色线)引脚6的基本套件?为了清晰起见,我附上了电缆连接的图片。
对于连接,您需要将发送,接收和GND连接到FTDI转换器。请确保Connected Connected Connect,否则不会进行沟通。即将到来的传输和接收,命名约定可能有时会令人困惑,因此只需将基本套件上的TX连接到FTDI上的RX和RX上的基本套件上的RX到FTDI上的TX。如果您认为没有通信只会交换TX和RX线。
这会解决你的问题。如果你还有任何问题,请告诉我。再次感谢你的耐心。
最好的
信用证
嗨,LC,
谢谢你的建议。外部FTDI电缆Tx和Rx线到J4 GPIO引脚的物理连接现在已经正确布线。现在,我能够通过一个问题让两个uart打印到控制台。到TeraTerm的UART1输出现在已损坏,而UART2输出正常。UART1为板载串口输出,UART2为FTDI连接。
如果你不介意,请使用我发给你的原项目样品开始。然后应用这个附加到项目的新user_sps_scheduler.c文件。构建代码并将其加载到580 Basic Kit中。在手机上运行DSPS Android应用程序并发送一些文本信息。您将看到UART1输出(uart_sps_write())已损坏,而UART2输出(uart2_write()则正常。
我创建了一个回调函数uart_both_tx_callback()每您的建议(附代码)写UART1和UART2。在这里,您也许能帮助这是为什么。该功能将被粘贴下面的讨论:
Static void uart_both_tx_callback(uint8_t res)
{
静态uint8_t大小= 0;
uint8_t * peripher_tx_ptr = NULL;
//当isr不运行时,从uart传输isr或应用程序调用函数
开关(res)
{
案例UART_STATUS_OK:
//获取数据和指针
大小= user_periph_pull(&periph_tx_ptr,大小);
打破;
案例UART_STATUS_INIT:
大小= user_buffer_read_address(&ble_to_periph_buffer,&periph_tx_ptr,TX_CALLBACK_SIZE);
打破;
默认值:
ASSERT_ERROR(0);//错误:回调来源不明被称为
}
//如果有可用的数据,发送数据的外围
如果(大小>0)
{
uart_sps_write(periph_tx_ptr,大小,NULL);
uart2_write (periph_tx_ptr、大小&uart_both_tx_callback);
}
//在缓冲区中没有数据,因此回调完成
两个_tx_callbackbusy=false;
}
可以看到,它与uart_tx_callback()非常相似。现在,在从外围fifo读取消息之后,调用uart_sps_write()和uart2_write(),并为它们提供相同的消息指针和大小。然而,对于uart_sps_write(),我传递给它一个NULL回调,以防止下次再次调用这个回调,而对于uart2_write(),我传递给它一个有效的回调函数名uart_both_tx_callback。
我将压缩整个项目,所以你可以简单地启动它,并帮助我检查它。
谢谢,非常感谢。
--Khai
顺便说一句,我开到TeraTerm两个UART输出。
附加tera终端输出的屏幕截图。COM5(板载串口连接)为UART1, COM4 (FTDI外部线缆连接)为UART2
你好潘文凯,
我正在调查你的项目。我不明白你的屏幕截图。查看Teraterm输出,它似乎同时适用于UART1和UART2。问题解决了还是仍然存在?
最好的
信用证
它没有完全打印出文本。必须打印相同的文本,因为我向UART发送了相同的文本
你好潘文凯,
我已经在BASIC DevKit上运行了你的项目,它看起来工作得很好。我没有对你的项目做任何改变,我只是编译和运行相同的代码。
从你的设置到我的唯一变化是,我使用了另一个DevKit,而不是UART2上的FTDI转换器。根据你的观察,UART2在你这边没有任何问题,对吗?
我不确定在这种背景下你身边的错误是什么,因为它正在努力。我想请您再次验证您的设置,以确保正确的位置。
我送你我的捕捉...
最好的
信用证
你好,信用证,
现在,我只需向uart_sps_write()提供回调函数名,向uart2_write()提供NULL,就可以让它工作了,如下所示,这与前面的场景相反。我不明白它现在是如何工作的,与我以前的相比。如果你能解释原因,那就太好了。
如果(大小>0)
{
uart_sps_write (periph_tx_ptr、大小&uart_both_tx_callback);
uart2_write (periph_tx_ptr、大小空);
}
你好潘文凯,
不幸的是,我分辨不出两者的区别,因为这对我来说是双向的。
最好的
信用证
那没关系。案件结案。谢谢你的耐心。
不客气如果您以后遇到任何问题,请告诉我们。
最好的
信用证
你好,信用证,
UART事务大小在tx_callback_size = 16字节中指定。这个尺寸可以更大吗?每次转移爆发的小爆发的原因是什么?
我询问的原因是我需要将固件传输到连接到UART1和UART2的外部设备,以便它们引导。因此设备FW为20K字节。
谢谢
--Khai
你好,信用证,
我正在遇到使用这段代码的奇怪行为,我已经使用了UART1和UART2。当FW直接从Keil调试器加载到Sysram时,所有内容都正常工作正常。您自己尝试并运行了此代码并验证了它的工作。
现在,当我开始使用SmartSnippets在基本套件上闪存相同的FW到SPI flash,并从flash启动时,电源启动,FW似乎没有从flash正确下载到SysRAM。我这么说的原因是,手机应用程序将无法找到它的现在。下面是复制的步骤:
1.将基本套件的J4头跳线来配置它的SPI模式
2.使用SmartSnippets闪烁的DA FW你从我身边有基本的工具包SPI闪存
3.连接外部FTDI电缆Tx/Rx到UART2引脚P1_2和P1_3(如果你在控制台中看不到文本,交换它)
4.启动2个Tera终端,一个用于板载串口连接,另一个用于外部FTDI电缆连接。板载连接为UART1, FTDI为UART2
5.如果基本套件当前插入电源,则循环电源
6.在手机上启动DSPS手机应用程序。应用程序应该找不到名称为nearye的基本工具包(我更改了这个名称,以反映我们的预期HW)
然而,如果用于UART2连接的FTDI电缆被从板上移除(移除Tx/Rx引脚),板上的回收电源将允许手机应用程序再次找到它。现在重新连接FTDI电缆到板Tx/Rx引脚将允许UART1和UART2的功能作为预期。
如果它不为你碰巧马上,请重复步骤3-6一次。这看起来好像在DA FW配置UART2使用从Flash加载导致失败。
希望你能重做这个问题。
提前谢谢大家,,
--Khai
你好潘文凯,
的TX_CALLBACK_SIZE是基于UART上的硬件FIFO配置的,16字节是它的最大值。
关于你的第二个问题,我将按照你的建议在黑板上尝试一下。不幸的是,我现在还不能访问Basic DevKit。我会尝试一下,然后给你回复。
最好的
信用证
附件是源代码的压缩文件,以便您在系统中没有保留以前的项目时使用。
你好潘文凯,
我试图运行从闪存项目,你建议。在这里,我有一个澄清,使,你是怎么安排的跳线J4和的devkit的J6。当董事会在SPI模式配置,你基本上是断开UART1。请确保您已连接通过J4_11,J4_12的UART1和销J6_1,J4_13和J4_14应该通过一个3针跳线,而不是2级的人来connnected。这样,您就可以使用UART沿以及与SPI。不过,我建议要谨慎,因为你是essentail连接外围设备也是如此。相反,你也可以使用一个第二外部FTDI转换器,如果这是更灵活。
说到项目,我看到了你最近上传的项目中的一些问题。但是,项目的前一个版本也可以从flash中正常运行。因此,我建议您检查您的项目,以查看任何可能与正常操作冲突的更改。
注意:在您最新的项目版本中也有一个函数命名/引用错误。请在上传项目前检查这些。
最好的
信用证
你好,信用证,
感谢您查看我的问题。您提到了J6跳线。我在基本DevKit.Attached(\v5.1.50.2.org\BasicKit-SPI-UART1-UART2.jpg)中找不到J6是当前使用SPI跳转为UART1和UART2的板的快照。如您所见,FTDI黑色、橙色和黄色导线是外部UART2连接。使用这种跳转配置,我能够获得SPI和UART1,没有问题。UART2是在J4头的顶部添加FTDI导线的。没有FTDI导线,从f引导正如我在上面的步骤中所解释的,直接向SysRAM加载或加载工作正常。
关于我当前项目与上一个项目之间的差异,GPIO端口/引脚分配相同。唯一的区别是,当前项目添加了一些SPI闪存包装器代码,用于我们自己的应用程序开发。
是的,关于项目命名/引用错误,你是对的。很抱歉。我已经修正了错误,这是最新的。
谢谢
--Khai
文件超过10MB的图像。我在这里所包围的图像的devkit。
你好潘文凯,
跳线J6是J4侧面有2个引脚的跳线。这在你的DevKit设置图片中也清晰可见,我上传的J6高亮部分也是一样的。
注意:只有在将UART RX与FTDI和MISO连接时才需要3脚跳线。你的设置即使没有这个,直到你需要这个大头针的时候。
我再次运行最新的项目,我注意到有问题。但是,再次强调,我也运行以前与运作良好相同的设置项目的版本。我强烈beleive你迄今所做的一些变化可能与应用程序冲突。我建议你向你的previos版本,看看,如果你面对任何问题。如果你没有看到任何问题,然后再从那里继续进行一步一步的改变,以检查其另外是导致此问题。
最好的
信用证
由于信用证。
我没有SPI接口连接称为J6
如果你不介意的话,你能不能把我之前的项目拉链拉上,这样我就可以做比较了?
你是否用一个3引脚跳线连接J4和J6来测试我的项目?
谢谢
--Khai
你能拍一张你的板子的快照吗?这样我可以比较一下。
你好潘文凯,
因此,J4和J6的设置是为了适应这种不同的配置。我在这里上传你以前的项目。您可以尝试测试您的连接设置,这是相同的,我已经工作。我已经测试了这个项目,有和没有3针连接器,这没有影响,除非你从终端发送数据,我不认为你在做。所以请使用当前的设置。
最好的
信用证
信用证,
我测试你发回的工作项目。结果是一样的。DSPS应用程序未能及时发现设备(NearEye)从闪存启动,但是当Keil公司上传到RAM它发现OK时。
谢谢
--Khai
你好潘文凯,
我下载了我已经发给了你的完全相同的副本,建造了代码,并使用SmartSnippets SPI Flash程序员将图像刻录到闪存。我有2个TERA术语终端,为各个COM端口打开。在编程闪光灯后,刚刚进行了一个电路板重置,我能够在DSP应用中看到设备,并能够通过UART1和UART2将数据发送到正在写入TERA术语终端的设备。
我不知道是怎么回事就在你身边错误。我使用的是完全相同的配置,您已经在“BasicKit-SPI-UART1,UART2”的形象前面所示。你能竖起的devkit,SmartSnippets和终端输出的图像。所以,我可以查看是否有什么不妥。
最好的
信用证
谢谢你再次做测试,LC。
我想说的是,DSPS应用程序发现该设备的问题是间歇性的。该应用程序能够在前几次检测到该设备。每次检测到该设备时,我都不会发送文本(我知道它会工作)。我只需重新接通电路板的电源(拔出USB电缆,而不是重置)然后启动手机应用程序再次检测。你会发现该应用程序将无法再看到该设备。请帮我尝试。我不确定是什么原因导致间歇性故障。
问题:
1.您是否将FTDI外部电缆用于其他UART连接?
2.你是否按照我的设置跳过了J4和J6 ?
3.你有没有设定的Tera终端波特率为115200,流量控制为XON / XOFF?
谢谢
--Khai
你好潘文凯,
所以,我知道你在进行能量循环,但必须采取一些步骤来确保通电过程是正确的。
1.当电路板断电时,不应该有一些外部电源连接到引脚,如连接到UART2的FTDI转换器,这可能会在引脚上留下一些残留物,可能是一个问题
2.给电路板通电时,建议进行复位,以确保处理器的输入电压正确,这是启动过程正常所必需的。
没有硬件复位,我们不能确保系统启动后启动过程是正确的。大多数情况下都是可行的,但并非总是如此。如果你的电池能以所需的速度提供所需的电压,那么它应该几乎所有时间都能工作而不需要重置。
请尝试这些步骤,看看问题是否解决了。
最好的
信用证
好的。复位板与所述连接电缆FTDI一个功率周期之后似乎工作。
问题:
1.按下reset按钮是否重新将FW从flash下载到RAM?
2.是否有一个软件API从手机应用程序要求板复位?
谢谢
--Khai
你好潘文凯,
1.是的,它就像系统正在重新启动,但更受控制,输入供应是稳定的。
2.不能,因为系统在重置完成后才会开始运行,所以你不能连接到设备。因此,没有连接就不能发出外部命令。
最好的
信用证
好的。然后告诉我在成功加载到sysRAM后,如何在FW中进行软件复位。我将从手机应用程序创建一个协议接口,通过发送一个重置命令来重置板。
谢谢
--Khai
页面