我正在尝试将Linux上的开放串口从8E1更改为8N1而不更改DTR流控制线。 DTR连接到STM32的复位引脚,RTS连接到Boot0,允许我运行内置的引导加载程序,并在RAM中上传和运行代码。问题是引导加载程序是8E1,上传代码是8N1。我用来更改奇偶校验的代码片段是:
tcgetattr(fd, &settings);
settings.c_cflag &= ~PARENB;
settings.c_iflag &= ~INPCK;
tcsetattr(fd, TCSADRAIN, &settings);
但是这会导致DTR线路重置STM32。当我想要改变DTR线时我使用的是ioctl(fd,TIOCMSET和& status),我认为tcsetattr()应该对DTR没有影响。作为测试,我尝试了tcgetattr()和tcsetattr()调用而不更改任何数据,但它仍然失败。
我是否忽略了某些事情,或者这可能是一个我无法在正常程序中编码的驱动程序问题?