- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 ATmega32
进行串行通信。首先,我使用 RS232,使用 USB-to-RS232 建立使用串行终端的接收和传输(在我的例子中是 tera 术语)。无论我从串行终端 Atmega32 发送什么,它都会回显。
例如。我发送 Hello\r
并收到 'Hello\r'
它工作正常。
然后我使用 RS485,使用 USB-to-RS485 与 ATmega32 建立通信,但我只得到第一个字符作为返回。
例如。如果我发送 Hello
,我会返回 H
。如果我发送 planets
,我只会得到 p
作为返回。
代码如下:
void Delay(int ms)
{
int i;
for (i=0;i<ms;i++)
_delay_ms(1);
}
void UART_Init(unsigned int baud)
{
UBRRH = (unsigned char)(baud >> 8);
UBRRL = (unsigned char)baud;
UCSRB = (1<<RXEN) | (1<<TXEN) | (1<<RXCIE);
UCSRC = (1<<URSEL) | (3<<UCSZ0);
}
void UART_Transmit(unsigned char data)
{
UDR = data;
while ( !( UCSRA & (1<<UDRE) ) );
}
void USART_Transmit_String( char *string)
{
while (*string != 0)
UART_Transmit(*string++);
}
void Clear_Buffer(char *string)
{
while (*string != '\0')
{
*string = 0;
string++;
}
}
ISR(USART_RXC_vect)
{
uartBuff[datapos] = UDR;
if (uartBuff[datapos] == '\r')
{
eos = 1;
}
datapos++;
if (datapos > SIZE)
{
datapos = 0;
Clear_Buffer(uartBuff);
}
}
int main(void)
{
_delay_ms(1000);
UART_Init(103);
sei();
LED_Enable();
LED_High();
Delay(100);
LED_Low();
Delay(100);
RE_DE_Enable();
RE_DE_High();
USART_Transmit_String("Hello World");
UART_Transmit(0x0d);
UART_Transmit('\n');
Delay(1000);
datapos = 0;
eos = 0;
RE_DE_Low();
while (1)
{
if (strstr(uartBuff,"led on\r"))
{
LED_High();
}
if (strstr(uartBuff,"led off\r"))
{
LED_Low();
}
if (eos == 1)
{
RE_DE_High();
uartBuff[datapos] = '\0';
USART_Transmit_String("\r\n");
USART_Transmit_String(uartBuff);
USART_Transmit_String("\r\n");
Clear_Buffer(uartBuff);
datapos = 0;
eos = 0;
RE_DE_Low();
}
}
}
为什么会出现这种异常?
如何纠正这个错误?
任何建议都会有所帮助。
提前致谢
最佳答案
在查看这篇文章时对谁在传输什么感到有点困惑,所以有以下评论:
1) 简化 Atmel 代码以仅流出“Hello World %d”+ CR 并继续递增行 #。现在,保持通信速度@ 9600 波特。从 Atmel 到 USB RS485 加密狗的流量是否 100% 成功接收?在此之前不要继续。
2) 您在此设计中为 Atmel 端使用了哪个 RS485 收发器?市场上有很多垃圾,并不是所有的收发器都是一样的。
3) 您使用的是哪种 USB RS485 加密狗?根据(2),只有少数是可靠的。如果使用透明的 FTDI USB RS485 加密狗,请非常仔细地检查塑料内部压印的 RS485 收发器。 FTDI 承认他们推出了一些基于 Sipex 收发器的易碎加密狗电缆。从我们的简短审查来看,相信是设计出了问题,而不是收发器。但是,不管怎样,既然加密狗被封存了,同样有问题的加密狗就无法修复了。
我们构建了一些可靠的适配器,但不希望将其变成广告,所以让我们看看是否可以调试您的案例。发布更多详细信息以继续。
要在您的 RS485 接收器引脚上添加它,请确保有一个本地上拉电阻到 +3v3。当 RS485 接收器被禁用时,这需要在 UART 的 Atmel 接收上具有高状态。也就是说,当 RS485 接收器被禁用时,RX 引脚为高阻态。已知 10k 的值是好的,该值并不重要,但建议使用上拉。
更新
我想我理解你项目的观点。如果我错了请更正。您是否尝试使用 Teraterm + USB RS485 加密狗通过 RS485 向 Atmel 发送文本并希望 Atmel 将数据发送回您的 Teraterm?如果是,那么如果您在 Teraterm 中输入此数据,则结果是合乎逻辑的。请确认此设置。
也就是说,您是否正在键入“Hello world”并期望收到此文本?
这个想法的问题是 PC 发送数据的速度比您输入的速度快。相反,请查看如何使用 Teraterm 以宏形式发送 block 中的整个字符串。只有这种方法适用于您的想法。当您键入时,Teraterm 会通过 RS485 接口(interface)等发送(也就是刷新 tx 缓冲区)“H”,因此您不会在单个 block 接收中接收到整个字符串。
考虑使用 Teraterm 的宏在一次发送中发送“行星”等。关键点不是您希望发送的每个字符之间的延迟。
关于无法建立正确的 RS485 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51536139/
来自 JSR-339: For simplicity, JAX-RS implementations are NOT REQUIRED to support processing groups oth
JAX-RS 提供了 StreamingOutput 接口(interface),我们可以实现它来对我们的响应主体进行原始流处理。 public interface StreamingOutput {
有没有办法获得java.lang.reflect.Method为给定的 @Path 调用的方法(用 HttpServletRequest 注释) ? 这是我的用例:我在 Java EE 中 Filte
我接到了一家公司的任务,该任务向我发送了一台已完成所有设置的虚拟机。任务是我必须创建一个 API 来从数据库中检索人员详细信息并显示它。 问题是,当我运行应用程序时,服务器返回一个包含 hello w
我有一个 POST 方法调用,它接受很少的表单参数。我希望 JAX-RS 能够处理不存在特定表单参数的情况。 示例: @POST @Produces (MediaType.APPLICATION_JS
我有 JAX-RS 网络应用程序,我想记录从获取请求到响应的时间量。在带有 servlet 过滤器的 Spring Boot 中很容易。但是我的应用程序中的过滤器无法正常工作: @Provider p
使用以下网址。 http://doma.in/context/resource/some/.../undefined 我想获取 ../resource 之后的路径名,即 /some/.../undef
Closed. This question is off-topic。它当前不接受答案。
我花了几个小时在嵌入式 Jetty 9.1.0.v20131115 和 RESTEasy 3.0.5.Final 中安装自定义登录服务。我的登录服务将在数据库中查找用户并为他们分配角色。它看起来像这样
RESOURCE_STALLS.RS的说明Intel Broadwell 的硬件性能事件如下: This event counts stall cycles caused by absence of
我想从 java 服务器 (Restful Jax-rs) 发送图像。我的客户是安卓。 @GET public Response getUserImage() { byte[] image =new
(特别是 RESTeasy) 具有如下方法签名会很好(对于单个文件): public void upload(@FormParam("name") ..., @FormParam("file") fi
RESTEasy (JAX-RS) 允许通过子资源进行动态调度。例如: POST /customers/create {"name":"Smith","country":"jp"} 我们可以有一个根资
假设有一个 ResultSet rs 和 n 对象。 这段代码: while(rs.next()) { // do something on rs } 在算法上等于此代码(即两者给出相同的结果)
我正在使用 Visual Studio 2005 和 mysql 4.0,我有一个表,其中包含一个字段(十进制 16,4),用于存储发票金额和另一个表,其中包含对该发票的付款(这些字段也是十进制的)
我正在使用 JAX-RS、Microprofile 和 Payara 5 构建 REST 服务。我的方法返回类型为 Response 的对象。响应本身包含一个 MyClass 列表。实现看起来像这样:
我已经使用 Mock MVC 成功地为 Spring MVC REST 服务构建了无需部署的集成测试框架。我正在努力对 JAX-RS 服务做同样的事情。 REST Assured 看起来很有希望,但它
我有一个使用JAX-RS 2.0的Jersey实现的Java应用程序,并且我想在客户端启用gzip压缩。服务器已启用它,并且通过在Chrome中的开发人员工具中的“大小/内容”中查找客户端正在使用的特
我正在尝试与 Tomcat7 一起使用 RESTful Web 服务 (JAX-RS)。我尝试了 3 种不同的实现(Jersey、RESTeasy 和 ReSTLet),但都没有成功。这应该很容易,但
swagger-api有什么区别和 JAX-RS ? 是swagger-api仅用于文档? (例如 @ApiOperation ) 最佳答案 根据 API 文档,JAX-RS是用于 RESTful W
我是一名优秀的程序员,十分优秀!