Tag: serial port

USB VCP连接偶尔会失败

我的问题很简单:我在工业20端口USB集线器上运行20个CP210x(Silicon Lab)设备。 在大约1000次打开港口的试验中,我遇到了一个问题:打电话给 CreateFile(portName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); 阻止而且不会返回。 在这种情况下,重复或重新启动我的软件无济于事。 只插入/插入设备有帮助。 当然,端口名称包括反斜杠,这是更高COM端口号所需要的。 每次通信后,端口都会关闭而不会出错 CloseHandle(comport_p); 我可以提供更多有关我的来源的详细信息,但请注意,相关部分是提到的行。 我的软件中是否还有其他一些问题需要考虑?或者是否存在驱动程序问题?

将字符串转换为十进制

我正在使用RS232串行通讯来旋转电机。 串行通信是在字符串中完成的,但我需要十进制值。 任何线索如何继续。我在c语言编码。我尝试使用atoifunction,但它无法正常工作。 char *p; int z=atoi(p);

STM32上的ADC单次转换

我正在研究STM32 F103x上的ADC编程,从最简单的情况开始 – 单次转换。 测量内部温度传感器(连接到ADC1)的值,并使用USART将其发送到COM端口。 目标似乎很清楚但是当我尝试将源代码下载到闪存时,它不会向COM端口发送任何数据。 USARTfunction运行良好,我猜这些问题来自ADC配置部分,因为我正处于等待完全转换的循环中: while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); //Wail for conversion complete 这是我到目前为止的源代码。 /* Includes ————————————————————*/ #include “stm32f10x.h” #include uint16_t AD_value; const uint16_t V25 = 1750; //when V25=1.41V const uint16_t Avg_Slope = 5; //when avg_slc uint16_t TemperatureC; //Define output device PUTCHAR_PROTOTYPE { USART_SendData(USART1, (uint8_t) ch); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {} return […]

xcode,带有arduino的c ++串口

我正在制作一个非常简单的c ++程序,它通过一个串口向arduino发送一个角度,然后arduino将这个角度应用到伺服电机上。 我知道Unix看到串口设备就像一个文件,实际上这是c ++代码: #include #include using namespace std; int main() { int angole; FILE * arduino; do { arduino = fopen(“/dev/tty.usbmodem3a21″,”w”); cout<>angole; fprintf(arduino,”%d”,angole); sleep(1); }while(angole>=0 && angole<=179); } 这是arduino的: #include Servo servo; const int pinServo = 2; int angle; void setup() { Serial.begin(9600); servo.attach(pinServo); servo.write(0); } void loop() { if(Serial.available()>0) { angle = Serial.read(); […]

初始化与c库open()的串行通信会导致TX在RPi上发送一位

我正在尝试在RPI和FPGA之间建立串行通信。 但是,使用标准C库open()来初始化串行接口时会出现问题:我使用示波器监视通过RX和TX线路发送和接收的内容。 对open的调用会导致RPI的TX线变为低电平,持续一位的长度。 我没有看到其他计算机/ Linux PC的这种行为。 关键是,FPGA假设有效传输,因为他认为它是一个起始位,但事实并非如此。 我检查了安装在RPI上的minicom。 一样。 启动minicom会导致TX线发送一位。 一旦minicom启动,通信就会按预期运行,并且所有字节都具有正确的帧大小。 有没有办法在打开调用初始化串行通信时抑制TX线变低? 这是预期的行为吗?

Ubuntu串行通信:读取失败然后立即进入

我正在编写一个在运行Ubuntu服务器14.04的MIO-3260单板计算机上运行的程序,并与AMC DPRANIE C100A400驱动器通信。 程序向驱动器发送一串hex代码,并且应该为它发送的每条消息接收响应。 当我在Windows上的realTerm中尝试它时效果很好所以我不认为这是驱动器的问题。 但是,当我尝试从串口读取时,read()几乎一直都会返回-1,直到突然在一个看似随机的点上,我立刻得到了大量的消息。 我正在使用termios来设置串口。 这是我的代码。 我已经尝试在阻塞配置中进行设置,但如果我这样做,代码只会在第一次读取()时无限期挂起。 int fd; fd = open(“/dev/ttyS0”,O_RDWR | O_NOCTTY | O_NDELAY); struct termios SerialPortSettings; tcgetattr(fd, &SerialPortSettings); //get current settings of serial port cfsetispeed(&SerialPortSettings,B115200);//set input baud rate cfsetospeed(&SerialPortSettings,B115200);//set output baud rate SerialPortSettings.c_cflag &= ~PARENB;//clear parity bit (no parity) SerialPortSettings.c_cflag &= ~CSTOPB;//Stop bits = 1 SerialPortSettings.c_cflag &= ~CSIZE;//clears the mask […]

如何通过串口发送浮动

在Arduino上串行发送float , double和int16的最佳方法是什么? Serial.print()仅以ASCII编码方式发送值。 但我想将值作为字节发送。 Serial.write()接受字节和字节Serial.write() ,但是将值转换为字节的最佳方法是什么? 我试图将int16转换为byte* ,没有运气。 我也使用了memcpy,但它使用了很多CPU周期。 Arduino使用普通的C / C ++。 这是一个ATmega328微控制器。