我需要在DSPS外设模式应用程序的运行时同时使用UART1和UART2。
基本上在我们的设计中,我们将有2个设备连接到UART1和UART2串行总线。对于当前的DSPS源代码,在编译时通过CFG_PRINTF_UART2标志确定如何使用UART1和UART2。如果设置了CFG_PRINTF_UART2,则将使用UART2驱动程序。如果没有,则使用UART1将消息发送到控制台。
可以选择UART1或UART2并调用它将消息传递到附加设备(通过GPIO引脚分配)吗?我不需要在任何给定的时间调用它们,只要它们可以按顺序选择和调用。
谢谢,
——潘文凯
设备:
你好潘文凯,
谢谢你联系我们。我正在调查你的问题,并将更新你,因为我得到一个解决方案。
问候,
信用证
我继续向前并在da1458x_config_basic.h中插入下面的#define,以查看我是否可以像原来那样运行DSPS,以便它将文本从电话发送到Tera Term控制台。
#定义CFG_PRINTF
#定义CFG_PRINTF_UART2
我还更改了下面的uart_tx_callback()中的user_sps_scheduler.c文件中的行
将uart_sps_write()转换为uart2_write(),以便它将调用UART2驱动程序将消息写出来。
Static void uart_tx_callback(uint8_t res)
{
静态uint8_t大小= 0;
uint8_t * peripher_tx_ptr = NULL;
//当isr不运行时,从uart传输isr或应用程序调用函数
开关(RES)
{
案例UART_STATUS_OK:
//获取数据和指针
Size = user_peripher_pull (& peripher_tx_ptr, Size);
打破;
案例UART_STATUS_INIT:
size = user_buffer_read_address(& ble_to_peripher_buffer, & peripher_tx_ptr, TX_CALLBACK_SIZE);
打破;
默认值:
ASSERT_ERROR (0);//从未知源调用回调函数
}
//如果有可用的数据,发送数据的外围
if(size> 0)
{
uart2_write (periph_tx_ptr、大小&uart_tx_callback);
/ / uart_sps_write (periph_tx_ptr、大小&uart_tx_callback);
返回;
}
//在缓冲区中没有数据,因此回调完成
callbackbusy = false;
}
没有写到控制台。但是FW没有显示任何错误。如果您不介意,可以尝试上面的代码,看看是否可以看到相同的结果。
谢谢,
——潘文凯
你好潘文凯,
将数据写入UART的最新问题应该是由于引脚配置造成的。为了查看配置,我需要查看实现。那是可行的上传你的项目审查。
另外,DSPS是基于SDK5.0.2还是SDK5.0.3?你能再确认一下这个吗?
问候,
信用证
当然。我正在使用SDK 5.04。
谢谢,
——潘文凯
你好潘文凯,
你能验证这个应用程序使用的是哪个DevKit吗?
顺便说一下,你正在做的DSPS(如果我指的是正确的那个)是基于我们的SDK5.0.3版本的。
问候,
信用证
基本的设备
潘文凯,
您如何将UART连接到控制台。它是否通过板载USB,或者您正在使用其他硬件来执行此操作?
问候,
Leepeng
我使用的是SPI引脚配置,第二个在J4连接器的右边打印在Basic Kit与P0_4跳,所以我可以得到控制台打印(这个设置被使用,因为我正在测试SPI Flash读写和打印到控制台。我相信spi_flash使用UART2进行主机打印。
谢谢,
——潘文凯
潘文凯,
所以在代码中,我看到您正在启用UART(UART1和UART2)。您是否尝试通过USB连接使用uarts?
您只能通过板载USB使用UART中的任何一个,以便同时使用两者,您需要另一个FTDI转换器,以便您可以连接到USB。
您是否可以确认您只需要UART2或UART1是否为第2个问题工作。
问候,
信用证
正如你所看到的那样。我尝试使用uart2_write()而不是uart_sps_write()将消息写入控制台,但它不起作用。我只是在测试是否可以看到uart2_write输出到控制台的设置。基本上,我需要UART1和UART2在我们的设计中工作。
以下三种情况中的一种随时可能发生。
1.消息UART1
2.消息UART2
3.向两个UART消息(如果我不能在单个写入呼叫中发送到两者,那么我还可以顺序发送它们)
通过简单地用uart2_write()替换uart_sps_write(),为什么它不能工作(看不到文本消息的控制台打印),因为我已经为UART2配置了GPIO端口和引脚分配。现在,我只是测试UART2。
当这一切都说了并完成之后,我将需要连接另一根FTDI电缆,以查看控制台到UART1和UART2的输出。我有电缆,但无法按照医生的指示让它工作。如果你能告诉我怎么做,我将非常感激。我迟早需要这样做来检查连接。
谢谢,
——潘文凯
你好潘文凯,
我已经审查了该项目,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发送消息(如果我不能在一个单独的写调用中发送到两个,那么我可以按顺序发送它们)
谢谢,
——潘文凯
你好潘文凯,
我正在查找您关于同时使用两个UARTs的查询。我已经回顾了你的UART2问题,首先看看为什么UART2不能工作。我正在上传项目和差异到这个线程供你参考。话虽如此,我正在探索同时使用的情况,并将更新您。
注意:修改可以在声明前用注释“CHANGES”标识。
问候,
信用证
你好,信用证,
谢谢你帮我找到解决方案。关于这个话题你有最新消息了吗?
谢谢,
——潘文凯
你好潘文凯,
是的,您可以同时使用两个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连接。
如果您对此有任何问题,请让我知道。
问候,
信用证
好的,很好。我明天会尝试一下,让你知道。你在我发给你的DSP项目上尝试过吗?此外,如何将外部FTDI电缆连接到J4标题?如果你可以通过如何跳过J4标题来跳过uart1和uart2的编写控制台输出,这将是很棒的。
谢谢,
——潘文凯
当然...
是的,我使用您发送给我们的项目进行了测试。
所以,这里的连接在J4上的样子如何看起来像:
header_pin11 ... port0_pin4(UTX)连接到ftdi t_rxd(根据原理图)
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中引用的所有函数调用,以在Ust_sps_scheduler.c中调用uart.h?UART_SPS.C和UART.C之间有什么区别?为什么DSPS只需使用UART.C函数调用控制台读/写,而是创建自己的UART_SPS.C?
谢谢,
——潘文凯
你好,信用证,
我只需开始查看连接外部FTDI电缆的第二个UART输出。我拥有FTDI电缆,如UM-B - 38 Doc部分8.1硬件设置所描述的基本套件。
我订购了这个确切的电缆每附件图片。然而,不,我正在查看它,我仍然不知道如何跳过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的基本套件?为了清晰起见,我附上了电缆连接的图片。
谢谢,
——潘文凯
你好,信用证,
你能回答我的问题吗?在你进一步帮助我之前,我被困在这里了。
谢谢,
——潘文凯
你好潘文凯,
对于你的第一个问题,dsp是一个蓝牙版本的串行数据传输。因此,它包含像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通过连接到DevKit的Mini-USB将数据写入PC/MAC上的串行终端。
现在,您可以使用FTDI电缆连接到Devkit上的UART2和电缆的另一端到PC / Mac。打开2个终端的单独实例连接到每个端口,您将能够通过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:
//获取数据和指针
Size = user_peripher_pull (& peripher_tx_ptr, Size);
打破;
案例UART_STATUS_INIT:
size = user_buffer_read_address(& ble_to_peripher_buffer, & peripher_tx_ptr, TX_CALLBACK_SIZE);
打破;
默认值:
ASSERT_ERROR (0);//从未知源调用回调函数
}
//如果有可用的数据,发送数据的外围
if(size> 0)
{
uart_sps_write (periph_tx_ptr、大小空);
uart2_write (periph_tx_ptr、大小&uart_both_tx_callback);
}
//在缓冲区中没有数据,因此回调完成
both_tx_callbackbusy = false;
}
可以看到,它与uart_tx_callback()非常相似。现在,在从外围fifo读取消息之后,调用uart_sps_write()和uart2_write(),并为它们提供相同的消息指针和大小。然而,对于uart_sps_write(),我传递给它一个NULL回调,以防止下次再次调用这个回调,而对于uart2_write(),我传递给它一个有效的回调函数名uart_both_tx_callback。
我将压缩整个项目,所以你可以简单地启动它,并帮助我检查它。
谢谢,非常感谢。
——潘文凯
顺便说一下,我为两个UART输出打开了TeraTerm。
附加tera终端输出的屏幕截图。COM5(板载串口连接)为UART1, COM4 (FTDI外部线缆连接)为UART2
你好潘文凯,
我正在调查你的项目。我不明白你的屏幕截图。查看Teraterm输出,它似乎同时适用于UART1和UART2。问题解决了还是仍然存在?
最好的
信用证
它没有完全打印出文本。必须打印相同的文本,因为我向UART发送了相同的文本
你好潘文凯,
我已经在BASIC DevKit上运行了你的项目,它看起来工作得很好。我没有对你的项目做任何改变,我只是编译和运行相同的代码。
从你的设置到我的唯一变化是,我使用了另一个DevKit,而不是UART2上的FTDI转换器。根据你的观察,UART2在你这边没有任何问题,对吗?
我不确定在这种背景下你身边的错误是什么,因为它正在努力。我想请您再次验证您的设置,以确保正确的位置。
我把我的照片发给你…
最好的
信用证
你好,信用证,
现在,我只需向uart_sps_write()提供回调函数名,向uart2_write()提供NULL,就可以让它工作了,如下所示,这与前面的场景相反。我不明白它现在是如何工作的,与我以前的相比。如果你能解释原因,那就太好了。
if(size> 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字节。
谢谢,
——潘文凯
你好,信用证,
我正在遇到使用这段代码的奇怪行为,我已经使用了UART1和UART2。当FW直接从Keil调试器加载到Sysram时,所有内容都正常工作正常。您自己尝试并运行了此代码并验证了它的工作。
现在,当我开始使用SmartSnippets在基本套件上闪存相同的FW到SPI flash,并从flash启动时,电源启动,FW似乎没有从flash正确下载到SysRAM。我这么说的原因是,手机应用程序将无法找到它的现在。下面是复制的步骤:
1.将跳线放置在Basic Kit的J4头,以配置为SPI模式
2.使用SmartSnippets flash的DA FW你从我到基本套件SPI flash
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加载失败。
希望你能重做这个问题。
先感谢您,
——潘文凯
你好潘文凯,
的TX_CALLBACK_SIZE是基于UART上的硬件FIFO配置的,16字节是它的最大值。
关于你的第二个问题,我将按照你的建议在黑板上尝试一下。不幸的是,我现在还不能访问Basic DevKit。我会尝试一下,然后给你回复。
最好的
信用证
附件是源代码的压缩文件,以便您在系统中没有保留以前的项目时使用。
你好潘文凯,
我已经尝试运行项目从闪光灯,如你所建议的。这里我想澄清一下,你们是如何安排DevKit的跳线J4和J6的。当板配置为SPI模式时,您实际上断开了UART1。确保您已经通过J4_11、J4_12连接UART1, J6_1、J4_13和J4_14引脚应通过3引脚跳线而不是2引脚跳线连接。通过这种方式,您将能够同时使用UART和SPI。然而,我建议您要谨慎,因为您必须同时连接外围设备。相反,如果更灵活的话,你也可以使用第二个外部FTDI转换器。
说到项目,我看到了你最近上传的项目中的一些问题。但是,项目的前一个版本也可以从flash中正常运行。因此,我建议您检查您的项目,以查看任何可能与正常操作冲突的更改。
注意:在您最新的项目版本中也有一个函数命名/引用错误。请在上传项目前检查这些。
最好的
信用证
你好,信用证,
谢谢你探讨我的问题。你提到了J6跳投。没有J6我可以在基本的devkit中找到。附加了(\ v5.1.50.2.org \ basickit-spi-uart1-uart2.jpg)是当前为UART1和UART2带有SPI的COLION的快照。如您所见,FTDI黑色,橙色和黄色电线是外部UART2连接。通过这种跳跃的配置,我能够获得SPI和UART1没有问题。使用J4头顶的FTDI线添加UART2。如果没有FTDI线,请从闪光灯或直接加载到Sysram的加载,因为我在上面的步骤中解释说明。
关于我当前项目之间的差异VS前一个项目,GPIO端口/引脚被分配相同。唯一的区别是,目前的项目是添加了一些SPI闪存包装代码,用于我们自己的应用程序开发。
是的,关于项目命名/引用错误,你是对的。很抱歉。我已经修正了错误,这是最新的。
谢谢,
——潘文凯
文件超过10MB的图像。我在这里附上了DevKit的图片。
你好潘文凯,
跳线J6是J4侧面有2个引脚的跳线。这在你的DevKit设置图片中也清晰可见,我上传的J6高亮部分也是一样的。
注意:只有在将UART RX与FTDI和MISO连接时才需要3脚跳线。你的设置即使没有这个,直到你需要这个大头针的时候。
我再次运行了你最新的项目,我发现有问题。但是再次强调,我也用相同的设置运行了您以前版本的项目,它运行得很好。我坚信您到目前为止所做的一些更改可能与应用程序相冲突。我建议你参考你以前的版本,看看你是否面临任何问题。如果您没有看到任何问题,那么从那里一步一步地进行更改,以检查是哪个添加导致了这个问题。
最好的
信用证
由于信用证。
我没有SPI引脚连接称为J6
如果你不介意的话,你能不能把我之前的项目拉链拉上,这样我就可以做比较了?
你是否用一个3引脚跳线连接J4和J6来测试我的项目?
谢谢,
——潘文凯
你能拍一张你的板子的快照吗?这样我可以比较一下。
你好潘文凯,
因此,J4和J6的设置是为了适应这种不同的配置。我在这里上传你以前的项目。您可以尝试测试您的连接设置,这是相同的,我已经工作。我已经测试了这个项目,有和没有3针连接器,这没有影响,除非你从终端发送数据,我不认为你在做。所以请使用当前的设置。
最好的
信用证
信用证,
我测试了你退回来的工作项目。结果是一样的。DSPS应用程序从flash启动时未能发现设备(近眼),但从Keil上传到RAM时发现OK。
谢谢,
——潘文凯
你好潘文凯,
我下载了我已经发给了你的完全相同的副本,建造了代码,并使用SmartSnippets SPI Flash程序员将图像刻录到闪存。我有2个TERA术语终端,为各个COM端口打开。在编程闪光灯后,刚刚进行了一个电路板重置,我能够在DSP应用中看到设备,并能够通过UART1和UART2将数据发送到正在写入TERA术语终端的设备。
我不知道你那边出了什么问题。我使用的配置与之前在“BasicKit-SPI-UART1-UART2”图像中显示的配置完全相同。你能把DevKit, SmartSnippets和Terminal Output图像放上去吗?这样,如果有什么问题,我可以检查一下。
最好的
信用证
谢谢你再次做测试,LC。
我想说发现设备的DSP应用程序的问题是间歇性的。该应用程序能够检测到第一次。每次检测到设备时,我都不打扰发送它的文字(我知道它会起作用)。我只需回收电源电源(将USB电缆从IT拉出而不是复位,并启动手机应用程序再次检测。您会发现该应用程序不会再看到设备。请为我试试。我不确定是什么造成的间歇性。
问题:
1.您是否使用FTDI外部电缆进行其他UART连接?
2.你是否按照我的设置跳过了J4和J6 ?
3.你是否设置Tera终端波特为115200,流量控制为Xon/Xoff?
谢谢,
——潘文凯
你好潘文凯,
所以,我知道你在进行能量循环,但必须采取一些步骤来确保通电过程是正确的。
1.当板断电时,不应该有一些连接到PIN的外部电源,如FTDI转换器连接到UART2,可以在引脚上留下一些残留物,并且可能是一个问题
2.电动板时,建议重置重置,以确保对引导过程所需的处理器的正确输入电压是正确的。
没有硬件复位,我们不能确保系统启动后启动过程是正确的。大多数情况下都是可行的,但并非总是如此。如果你的电池能以所需的速度提供所需的电压,那么它应该几乎所有时间都能工作而不需要重置。
请尝试这些步骤,看看问题是否解决了。
最好的
信用证
好的。通电后重启单板,连接FTDI线缆后重启单板。
问题:
1.按下reset按钮是否重新将FW从flash下载到RAM?
2.是否有一个软件API从手机应用程序要求板复位?
谢谢,
——潘文凯
你好潘文凯,
1.是的,它就像系统正在重新启动,但更受控制,输入供应是稳定的。
2.不能,因为系统在重置完成后才会开始运行,所以你不能连接到设备。因此,没有连接就不能发出外部命令。
最好的
信用证
好的。然后告诉我在成功加载到sysRAM后,如何在FW中进行软件复位。我将从手机应用程序创建一个协议接口,通过发送一个重置命令来重置板。
谢谢,
——潘文凯
页面