我想从微控制器发送温度值,使用UART到C#接口和显示温度开启Label.Content
.这是我的微控制器代码:
while(1) {
key_scan(); // get value of temp
if (Usart_Data_Ready())
{
while(temperature[i]!=0)
{
if(temperature[i]!=' ')
{
Usart_Write(temperature[i]);
Delay_ms(1000);
}
i = i + 1;
}
i =0;
Delay_ms(2000);
}
}
Run Code Online (Sandbox Code Playgroud)
我的C#代码是:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
txt += serialPort1.ReadExisting().ToString();
textBox1.Text = txt.ToString();
}
Run Code Online (Sandbox Code Playgroud)
但是异常出现了" 跨线程操作无效:控制'textBox1'从一个线程访问,而不是在它创建的线程上 "请告诉我如何从我的微控制器获取温度字符串并删除此错误!
我真的很难理解差异.有人说他们是一样的,而另一些人说有一点点差别.究竟有什么区别?如果你用一些比喻来解释,我希望如此.
我正在研究一种连接两个微控制器的方法.在序列化的层面上,我正在考虑使用Nano protobuffers(http://code.google.com/p/nanopb/).这样我就可以编码/解码消息并在两个处理器之间发送它们.
基本上,一个小型处理器将是RPC服务器,能够执行多个功能.较大的处理器将通过发送的消息调用RPC,然后当数据准备好时,它将从较小的处理器读取它.
使用UART,I2C或SPI的优缺点是什么?
邮件将在发送之前放入邮箱中.
最好的问候,Drasko
我在使用mdev规则运行busybox的嵌入式Linux中编写了一个简单的UART串行驱动程序.我在驱动程序代码中提供.dev_name
了" ttyC2C
".
static struct uart_driver serial_omap_reg = {
.owner = THIS_MODULE,
.driver_name = "Omap-C2C-Serial",
.dev_name = "ttyC2C",
.nr = OMAP_MAX_HSUART_PORTS,
.cons = NULL,
};
Run Code Online (Sandbox Code Playgroud)
但是,节点正在创建中
./sys/devices/platform/omap_c2c_uart.0/tty/ttyC2C0
./sys/class/tty/ttyC2C0
/ # ls -l ./sys/class/tty/ttyC2C0
lrwxrwxrwx 1 root 0 0 Jan 1 00:14 ./sys/class/tty/ttyC2C0 -> ../../devices/platform/omap_c2c_uart.0/tty/ttyC2C0
/ # ls -l ./sys/devices/platform/omap_c2c_uart.0/tty/ttyC2C0
-r--r--r-- 1 root 0 4096 Jan 1 00:14 dev
lrwxrwxrwx 1 root 0 0 Jan 1 00:14 device -> ../../../omap_c2c_uart.0
drwxr-xr-x 2 root 0 0 Jan 1 00:14 power …
Run Code Online (Sandbox Code Playgroud) 我正在使用arm微处理器进行编程,并尝试通过UART使用print语句进行调试.我不想stdlibs
只为调试添加.有没有办法打印到控制台没有stdio.h
/ iostream.h
?我可以写自己的printf()
吗?
或者,我可以使用DMA控制器直接写入UART.但是,我想避免这是可能的.使用内置测试功能"echo"或"remote loop-back"我知道我已正确配置UART.
我正在开发一个小型硬件项目的接收器.我正在使用UART传输数据的小板.
接收器代码如下所示,我将在短期内单独解释有问题的位.
#define TTY "/dev/ttys002"
#include <stdio.h>
#include <string.h>
#include <unistd.h> //Unix standard functions
#include <fcntl.h> //File controls
#include <errno.h> //Error numbers
#include <assert.h>
#include <termios.h> //Posix terminal
int open_port(const char * tty) {
int fd;
fd = open(tty, (O_RDWR | O_NOCTTY | O_NDELAY));
assert("__failed to open port__" && fd != -1);
//Block until read
fcntl(fd, F_SETFL, 0);
return fd;
}
void configure_port(int fd) {
struct termios options;
//Get current options
tcgetattr(fd, &options);
//9600 Baud
cfsetispeed(&options, B9600);
cfsetospeed(&options, B9600);
//Receive …
Run Code Online (Sandbox Code Playgroud) 我试图在ARM板上使用UART连接从RS485适配器读取寄存器但没有成功
机
连接器
从设备连接到ARM板
能量功率计< - rx/tx电缆 - > SENA RS485适配器< - 串行公/公适配器+串口到迷你串行电缆 - > ARM板迷你串口
看到设置的图像:
使用的设备树: am335x-sbc-t335.dts
设备树资源: http ://get-album.com/dts/
从设备连接到PC
能量功率计< - 2线rx/tx - > SENA RS485适配器< - > PC
注意:主板上的迷你串口与用于串口控制台通信的端口相同(在波特115200上) - 这没有问题
下面是使用libmodbus库从连接的从设备读取第一个寄存器的ac代码
libmodbus_test.c - 从设备读取和打印第一个reigster:
#include <sys/types.h>
#include <string.h>
#include <modbus.h> …
Run Code Online (Sandbox Code Playgroud) 如何从使用 Qemu 运行的裸机程序获取 UART 输出?
这是我一直在使用的命令行调用:
qemu-system-arm -M xilinx-zynq-a9 -cpu cortex-a9 -nographic -kernel $BUILD_DIR/mm.elf -m 512M -s -S
Run Code Online (Sandbox Code Playgroud)
xilinx-zynq-a9
cortex-a9
-m 512M
表示平台有 512 MiB RAM-s
是一个快捷方式-gdb tcp::1234
-S
意味着启动时冻结CPU我使用的ELF文件(mm.elf
)执行一个简单的矩阵乘法运算,然后打印它是成功还是失败,以及运行了多长时间。ELF 是使用 Xilinx ARM 工具链编译的。我用它来进行软件故障注入。目前我使用 GDB 来询问应该打印的变量的值。然而,由于在故障注入的情况下打印可能会出现很多问题,因此最好看看通过 UART 实际发送的内容。
这有一些我尝试过的建议,但它不适用,因为问题是关于在主机终端窗口中获取 Linux 启动消息。
这是一个不太相关的问题,因为它仍然假设用户拥有某种引导加载程序。虽然从技术上讲必须有一个引导加载程序才能运行应用程序,但 Xilinx 在boot.S等文件中提供了此系统代码,然后将其编译到 ELF 文件中,作为之前运行的代码main
。
我尝试将这些添加到当前 Qemu 命令的末尾。结果遵循尝试的参数。
-serial mon:stdio
-serial null …
我们为iPad/iPhone制造了一个新配件,它应该将命令传输到iPad.我们喜欢使用UART(通过某种名为Lingo的 Apple协议).我的研究表明,我只能使用USB(30PIN连接器)和自定义协议.
题:
我的主要猜测是UART命令和访问是iPhone OS保留的协议,不适用于Apps.某些UART命令还包括卷和音频重新路由等设置,所以我猜这是安全的.
我试图通过串行连接(GPIO UART引脚)在Raspberry Pi(B型号,raspian wheezy)和STM32F4板之间发送/接收数据.
要设置串口,我按照以下几个教程中的所有步骤进行操作:http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port
当无法获取到STM32F4板的连接,我读了你可以在本地测试的PI串口,如果你只需连接TX,RX引脚关PI海誓山盟,它应该只是重复Minicom中输入的数据.
遗憾的是,这也不起作用.
文件'cmdline'和'inittab'中ttyAMA0的设置正常.(如许多教程中所述)
并且还尝试了https://github.com/lurch/rpi-serial-console的自动配置程序
直接将RX连接到rpi上的TX引脚不会在minicom中提供任何输出.我还尝试了一个重复给定输入的python脚本.似乎什么都没有用,我有点迷失在这里.
Minicom启动命令应该是正确的(尝试使用不同的波特率):
root@raspberrypi:/home/jef# minicom -b 9600 -o -D /dev/ttyAMA0
OPTIONS: I18n
Compiled on Apr 28 2012, 19:24:31.
Port /dev/ttyAMA0
Run Code Online (Sandbox Code Playgroud)
在minicom的底部,它总是显示离线状态:
CTRL-A Z for help | 9600 8N1 | NOR | Minicom 2.6.1 | VT102 | Offline
Run Code Online (Sandbox Code Playgroud)
当使用python nothinig检查可用的串口时,会抛出:
python -m serial.tools.list_ports
no ports found
Run Code Online (Sandbox Code Playgroud)
用户在dailout组中,因此不应该是问题(以root和non root身份尝试):
root@raspberrypi:/home/jef# id
uid=0(root) gid=0(root) groups=0(root),20(dialout),1001(indiecity)
Run Code Online (Sandbox Code Playgroud)
验证getty不再使用串口:
root@raspberrypi:/home/jef# ps aux | grep getty
root 2809 0.0 0.1 3740 804 tty1 Ss+ 10:36 …
Run Code Online (Sandbox Code Playgroud) uart ×10
c ×3
arm ×2
i2c ×2
serial-port ×2
accessory ×1
bare-metal ×1
baud-rate ×1
bitrate ×1
c# ×1
c++ ×1
embedded ×1
invoke ×1
ipad ×1
linux ×1
linux-kernel ×1
modbus ×1
qemu ×1
raspberry-pi ×1
reliability ×1
rs485 ×1
spi ×1
usb ×1