如何在Windows平台上和上面控制串口的DTR和RTS引脚?我希望它通过提升或降低其电压进行bitbanged或操作.
我在网上找到了这部分代码,关于如何在atmega32上初始化USART。它适用于我的应用程序,但我想更好地理解它。
void USART_initial (void){
#define BAUD 9600 // We set the desired baud rate( here we set it at 9600bps)
#include <util/setbaud.h> //
UBRRH = UBRRH_VALUE;
UBRRL = UBRRL_VALUE;
#if USE_2X
UCSRA |= (1 << U2X);
#else
UCSRA &= ~(1 << U2X);
#endif
UCSRB = (1<<RXEN)|(1<<TXEN); // Enable transmitter/receiver.
UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1); // Character size : 8 bit
Run Code Online (Sandbox Code Playgroud)
我的问题是 UBRRH 和 UBRRL 寄存器的确切用途是什么,为什么我需要使用它们?
非常感谢您提前
我正在尝试通过系统的一个串行端口设置网络接口.
我正在使用beaglebone和Xbee-wifi模块.基本上我正在尝试使用TCP/IP protocole在serialport bu上传送2个beaglebone.
我需要通过ssh,telnet或默认的Web端口80连接到beaglebone.所以我不需要在串行接口上使用单个端口.我需要一个在serialport上运行的newtork intarface.
反正有没有这样做?
硬件:beaglebone black os:angstrom
我得到了返回 NMEA 数据的 GPS 模块。当我尝试使用以下代码打印它返回的所有数据时,我得到了这个.
while True:
try:
rcv = port.read()
print rcv
Run Code Online (Sandbox Code Playgroud)
然后,我进行了一些修改,可以更清晰地读取 NMEA 数据。它看起来像这样:
port = serial.Serial("/dev/ttyAMA0", baudrate=9600, timeout=10.0)
line = []
print("connected to: " + port.portstr)
while True:
try:
rcv = port.read()
except:
rcv = ''
line.append(rcv)
if rcv == '\n':
line = "".join(line)
print line
line = []
Run Code Online (Sandbox Code Playgroud)
输出看起来像这样:
$GPGGA,183345.000,5023.3424,N,01857.3817,E,1,7,1.25,313.3,M,42.1,M,,*53
$GPGSA,A,3,09,26,28,08,15,18,17,,,,,,1.52,1.25,0.88*06
$ GPRMC,183345.000,A,5023.3424,N,01857.3817,E,0.40,55.07,050214,,,A*54
$GPVTG,55.07,T,,M,0.40,N,0.74,K,A*0D
$GPGGA,183346.000,5023.3423,N,01857.3817,E,1,7,1.25,313.3,M,42.1,M,,*57
$GPGSA,A,3,09,26,28,08,15,18,17,,,,,,1.52,1.25,0.88*06
问题是有时它会遗漏一些逗号或其他数据,并且 NMEA 解析器读取错误。有没有更好更干净的方法来通过串行读取整个 NMEA 帧?
我期待通过简单的通信在2个设备之间实现串行通信.
似乎HDLC和xBee中使用的协议使用0x7E作为起始分隔符.
有什么特别的原因,或者我可以使用任何角色作为替代.
我已经将 Arduino 设置为在收到“S”字节时发送数据。这适用于 Arduino 串行监视器。不过,我正在 Python 上绘制数据,使用 Pyserial 联系串行端口。这是我的 Arduino 草图,以明确我的意思:
#include <eHealth.h>
unsigned long time;
unsigned long interval = 8;
byte serialByte;
// The setup routine runs once when you press reset:
void setup() {
Serial.begin(9600);
}
// The loop routine runs over and over again forever:
void loop() {
if(Serial.available()>0){
serialByte = Serial.read();
if(serialByte == 'S'){
while(1){
float ECG = eHealth.getECG();
time = time + interval;
Serial.print(time);
Serial.print(" ");
Serial.print(ECG, 3);
Serial.println("");
if(Serial.available()>0){
serialByte = Serial.read();
if (serialByte …Run Code Online (Sandbox Code Playgroud) 我能够将hec字节发送到串口
stty -F /dev/ttyUSB0 speed 115200 cs8 -cstopb -parenb -echo
echo -en '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' > /dev/ttyUSB0
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试从文件循环读取测试中执行此操作时,它不想工作
#!/bin/bash
stty -F /dev/ttyUSB0 speed 115200 cs8 -cstopb -parenb -echo
while read line
do
name=$line
echo -en $name | tr -d ' ' > /dev/ttyUSB0
sleep 0.04
done < $1
Run Code Online (Sandbox Code Playgroud)
我像这样调用脚本
./sendData.sh file.txt
Run Code Online (Sandbox Code Playgroud)
file.txt有一些像这样的简单内容
试试1
\\ xFF\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00\\ x00
Run Code Online (Sandbox Code Playgroud)
试试2
\xFF\xF2\x00\xFF\xF2\x00\xFF\xF2\x00\xFF\xF2\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF
Run Code Online (Sandbox Code Playgroud)
有人能指出我缺少什么.
我有一个查询来计算基于文档的点的某个半径范围内的对象:http://www.plumislandmedia.net/mysql/haversine-mysql-nearest-loc/
它工作得非常好但是我只想搜索那些特定类型的对象,这导致了一个问题;
代码如下所示:
my $sql = "SELECT *
FROM (
SELECT b.*, pr.postcode, pr.prize, pr.title, pr.collection, pr.redeemed, pr.delivery, pr.archived, bt.category,
p.radius,
p.distance_unit
* DEGREES(ACOS(COS(RADIANS(p.latpoint))
* COS(RADIANS(b.lat))
* COS(RADIANS(p.longpoint - b.lng))
+ SIN(RADIANS(p.latpoint))
* SIN(RADIANS(b.lat)))) AS distance
FROM bubbles AS b, bubble_prizes AS pr, bubble_types AS bt
JOIN ( /* these are the query parameters */
SELECT ? AS latpoint, ? AS longpoint,
? AS radius, ? AS distance_unit
) AS p
WHERE b.lat
BETWEEN p.latpoint - (p.radius …Run Code Online (Sandbox Code Playgroud) 我正在将C#和.NET 4.5与Visual Studio 2012编译器/ IDE一起使用,以打开串行端口并与之交互。我的代码旨在连接到US Digital的QSB正交至USB转换器。
这是我用来打开端口并连接的代码。
this.Port = new SerialPort();
this.Port.BaudRate = 230400;
this.Port.PortName = "COM9";
this.Port.Parity = Parity.None;
this.Port.Handshake = Handshake.None;
this.Port.DataBits = 8;
this.Port.StopBits = StopBits.One;
this.Port.Open();
Run Code Online (Sandbox Code Playgroud)
在this.Port.Open()之后立即设置断点,使我可以验证串行端口是否确实已连接。在另一部分代码中,响应于按钮按下而调用以下内容:
this.Port.WriteLine("W168");
Run Code Online (Sandbox Code Playgroud)
该命令*应该使我的硬件旋转电动机,实际上,如果我使用Putty或使用我编写的Python脚本(两者使用与C#代码完全相同的设置)发送该命令,则它确实会旋转。然而什么也没发生。我可以在Putty或Python中打开端口,并以预期的结果执行命令,然后运行C#代码,但没有任何反应。
我是否缺少某些特定于C#的东西来阻止其工作?
对于它的价值,这是我可以使用的Python代码:
ser = serial.Serial("COM9", 230400, timeout=1)
ser.write(b"W168\n")
Run Code Online (Sandbox Code Playgroud)
链接到pySerial文档:http ://pyserial.sourceforge.net/pyserial_api.html#classes
C#代码中提及但上述python调用中未提及的字段的默认值为:
我正在使用Win32 CreateProcess函数来执行对外部可执行文件的调用.可执行文件返回一个字符串
有没有办法在调用可执行文件后捕获并查询返回的字符串?如果不这样做,我可能必须将字符串写入可执行文件中的文件,并在调用完成后在调用程序中读取该字符串.这看起来很蹩脚.