完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如题,在做通信时需要用到定时器来设置超时。LPC1768 timer0 初始化程序如下
T0PR = 24000000/1000000 * 100; // 100us T0PC = 0; T0TC = 0; T0MR0 = timerInterval; // 10ms T0MCR = 3; T0TCR = 0; // Timer Counter and Prescale Counter Disabled 在Uart的中断函数(每次接收到一个字节数据,会进入中断),复位timer0. 这样每次接收一字节数据,timer0复位一次,当一帧数据传输完毕,Uart不再接收到数据,此时timer0不在复位,当计时时间(10ms)到达后,进入timer0定时中断函数(由此判断一帧数据接收完毕),处理该帧数据。 在绝大多数情况下,通信没有问题。但是当将Uart波特率设置为:9600,上位机PC向下位机传输14字节数据数据时,实际结果是,下位机当接收到第8个字节数据时,产生了定时器中断,退出中断后,继续接收完剩下的数据。并不是接收完全部数据后,产生定时器超时中断,分析可能有两种原因: 原因1:PC上位机在发送第8个字节和第9个字节数据之间 间隔了10ms,导致定时器产生超时定时中断。但不可能,因为我是将这个14个数据一次写入串口调试助手,然后一次发送完毕,不可能会出现这种情形 原因2:在进入UART接收中断中,timer0并没有被复位,导致计时到达,产生超时中断。因为UART传输8个字节数据的时间为( 8 * 11bit * 1000 / 9600 = 9ms)(定时器设置:8个数据位、一个开始位、一个停止位、一个校验位,共11个位),那么就是timer根本就没有被复位。但这种情况也不可能发生,原因如下, 我再次由PC串口调试助手,一次发送17个字节数据,却没有这种现象,按照预想的接收数据,一次接收完17个字节数据后,等待超时中断,进入中断处理数据。若是上述原因,就无法解释这里。而且只在一次传输14或15个字节数据,才会有上述现象。 当我将timer超时时间设为11ms以上时,一次传输14或15个字节数据,又没有上述现象。 虽然可以将超时时间设置长一点解决这个问题,但是还是不是很理解这种现象产生的原因,来论坛就大家指教 |
|
相关推荐
1 个讨论
|
|
只有小组成员才能发言,加入小组>>
1914个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36383 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4412 浏览 0 评论
6076 浏览 1 评论
6787 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4229 浏览 0 评论
632浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
628浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
624浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
704浏览 2评论
810浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-3 10:33 , Processed in 1.098420 second(s), Total 61, Slave 48 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号