用430串口发送数据给舵机,我们一个工作周期20ms,给舵机发送数据11个字节,波特率用9600
那么传送数据时间=11*8/9600=9.17ms
问题是,430的发送时间也是9.17ms么?在线路上的传送时间是9.17ms没错。
现在我理解的是:数据我是用循环中断的方式发送的。430的TXbuff是一个字节的,所以只能一个字节一个字节的发,在发送这11个字节的9.17ms期间,cpu干不了其他工作,只能串口发送数据吗?
如果是pc机串口发送11字节的话,由于电脑缓存大,11个字节准备好后就可以干其他的事了吗?9.17ms其他时间可以做其他工作。
此帖出自
小平头技术问答
现在我理解的是:数据我是用循环中断的方式发送的。430的TXbuff是一个字节的,所以只能一个字节一个字节的发,在发送这11个字节的9.17ms期间,cpu干不了其他工作,只能串口发送数据吗?
——如果你使用的是硬件串口,那么只需要配置好串口并将需要发送的字节放进buff里就可以执行其他的程序了,单片机会自动发送你需要的内容。
——如果你使用模拟串口,CPU也不是不能腾出来干其他活。串口发送每一位都需要维持一定的时间,这个维持时间里是不需要占用CPU资源的,完全可以腾出来干其他活,只要你资源调度得好,串口发送甚至于可以认为是“不耗资源”。
如果是pc机串口发送11字节的话,由于电脑缓存大,11个字节准备好后就可以干其他的事了吗?9.17ms其他时间可以做其他工作。
——不是这么理解,同样是因为有相应的硬件设备,在发送的时候只要将内容写进相应的缓存里,就会自动逐个将数据发送出去。这个缓存可以是单字节的移位寄存器,也可以是DMA硬件控制的成片内存空间。如果缓存是单字节的,那么每发完一个字节就需要软件将下一个字节的内容填入寄存器。如果是DMA控制,就可以不需要软件处理,而是直接由硬件控制下一个发送的字节直到需要发送的内容完全处理完毕。
——再说说串口中断,这个中断的作用楼上几位说得不准确,串口中断分为发送中断和接收中断。发送中断就是一个字节的内容完全通过串口发出去了产生的,作用是产生中断让你处理下一字节的发送。接收中断好理解一些,就是完整接收到一个字节的数据产生中断让你去处理。一般只有硬件外设才会产生相应的中断。
——然后是查询法,我也没搞懂怎么使用查询法来处理串口发送。感觉是计数器法更合适一些,或者是查询法接收数据。如果你非得用CPU资源代替定时器来进行每个位发送时间的计量,那么没人能阻止得了你。你最好也别再提什么“CPU能不能腾出来”的问题。使用查询法接收数据比较常用到,由于你不知道数据会在什么时候到来,那么需要隔一段时间便查询一下寄存器(硬件串口)/IO口(模拟串口)来确认一下。这里还有个采样间隔的问题,只要你的设计满足采样定理,那么同样可以腾出CPU资源来干其他活。
最后,弱弱的问一句,舵机不是用PWM信号来控制吗?什么时候换成串口控制了...
一周热门 更多>