banalmaster的个人空间 https://bbs.21ic.com/?880876 [收藏] [复制] [RSS]

日志

关于单片机单步调试可以实现功能,一步烧写却不能实现功能的解决方法 ...

热度 3已有 1305 次阅读2013-6-14 11:17 |个人分类:技术总结|系统分类:单片机| 单片机, 可能性, 通信, 硬件

        在调试单片机时,遇到用到MCU内部的自带硬件时,很可能会遇到这种问题(如果代码是自己写的话,可能性更大):所写的代码单步调试没有问题,可以实现功能,但是如果一步烧写的话,(通常为F5),则不能实现预期的功能。
        我在调试TI的MSP430芯片和ATMEL的AVR芯片时,遇到串口通信或I2C总线的通信,需要用到MCU自带的USART硬件,当进行多个数据的读写时,都遇到这种情况。参照官方的参考代码,似乎没有错误,可是就是不能实现功能。
        起初以为是调试器和IDE的问题,经过分析,原来是代码的问题。
        MCU的主频一般都是MHz级的,而I2C和串口通信最快也就是kHz级,例如要发送两个数据时,单片机让总线发送数据后立即执行后续指令,但是由于总线速度较慢,并没有完成数据的传输就被CPU执行后续操作,必然会达不到预期的功能。
        解决的方法可以在数据操作之间增加适当的延迟函数,即可解决问题。通过增加延时函数,我的代码都可以一步烧写并实现功能了。

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)