感觉自己也是闲无聊,处于对stm32的执念,我一直觉得串口中断就应该是那种有一个输入中断,一个输出中断的,然后奈何才疏学浅,一直不知道怎么弄,后来查到了Jetson TX2的IO中断,发现它就是采用的检测IO的输入输出,相比于之前的SIGIO中断有一个好处:
SIGIO中断,串口的输入输出都会引起该中断
POLLIN中断,只有串口的输入才会引起,这就减少了判断
实际上最简单的方法就是查询,也就是直接在循环里面read(), 有就读取,但是这样始终都会占用时间,没有中断节省时间,POLLIN中断则会更方便。
GPIO的中断参考下面的链接:
https://developer.ridgerun.com/wiki/index.php/Gpio-int-test.c
我将这个文件改装了一下,和自己写的串口中断放在一起,大家有兴趣的可以在这里下载。
函数的主要部分:
memset((void*)fdset, 0, sizeof(fdset));fdset[0].fd=my_fd;fdset[0].events = POLLIN;rc = poll(fdset, nfds, timeout); if (rc < 0) {printf("\npoll() failed!\n");return -1;}USART_Send_Dis(1,2);if (fdset[0].revents & POLLIN){read(fdset[0].fd, Buff_Rec, 20);USART_Rec(Buff_Rec,20);tcflush(my_fd, TCIFLUSH);cout<<"get -------------"<<endl;memset(Buff_Rec,0,20*sizeof(u8));//printf("\npoll() stdin read 0x%2.2X\n", (unsigned int) buf[0]);}
这里面最关键的是POLLIN的使用,其他的串口初始化、参数设置,都跟我在第二节里面讲的一样