之所以有这个贴子,是因为编程时遇到问题了,可能是问题没有描述清楚,参考大家的回复,问题还是没有解决。不好意思,让大家白忙一场。
申请到了一个试验箱,自己接上OLED12864,用I2C点亮了,T0更新时间,T1更新显示,CDC_ISP调试也非常爽。
可这一天,想做18B20。因为之前有用1602显示温度,移植了程序,没想到出了意外,“USB无法识别的端口”。
取消18B20,能恢复正常,加入18B20后,“USB无法识别的端口”。检查了18B20子程序,没发现什么问题。
想了几天都没有想到问题出在哪,最后从结构、系统上找原因,会不会是CDC代码的位置不对?会不会是lib文件的位置不对?会不会程序文件太大,CDC指令丢失了?
原谅我对系统的一无所知,我的想法可能跟很多大侠不在一个维度上,谁让我是菜鸟呢。
论坛里也有很多朋友遇到了跟我一样的问题,也有大侠指点方向,告诉方法,能试的我也试了,但问题还是没有解决。而且提出问题的朋友也不知道最后有没有解决问题。是如何解决的,我也不知道。甚至一度让我想到,STC如此不稳定,大家是不是转投STM阵营了?我要不要也转移?
想到即便转投STM,也许会遇到同样的问题,还能再转投第三方,第四方吗?先把这个问题解决了再看看。
也许是遇到自己的知识盲区了,把规格书再看一遍,规格书跟冲哥讲的不一样。也许按规格书来,问题就解决了。结果还是一样的。
再看视频,第22集 CDC通信。开始冲哥也遇到问题了,跟规格书要求的一样,
USBCLK = 0x00; //使能USB功能
USBCON = 0x90;
usb_init(); //调用USB CDC初始化函数,USB CDC 接口配置
EUSB =1; //使能 USB 中断
EA = 1; //打开总的中断开关
while(DeviceState !=DEVSTATE_CONFIGURED); //等待USB完成配置
是的,这几行代码,已经可以跟电脑通信了。规格书也会,冲哥的视频也好,都是这样的,没问题。
现实是,我是这么做的,冲哥也是这么做的,可CDC_ISP都出问题了。
第22集的最后,冲哥从ppt中复制了三行代码,
USBCON = 0x00;
USBCLK = 0x00;
IRC48MCR = 0x00;
delay_ms(800);
也许是时间的原因,冲哥没有仔细讲为什么要复制这几行代码,只知道复制这几行代码后,问题解决了。
如是,我也照做了。
居然还会出错!再看视频查资料,这几行代码的作用是释放USB端口,断开USB连结。恍惚间想明白了一个问题,
CDC连结后,单片机进入死循环。当电脑要与单片机通时,单片机宕机,端口又没有释放,当然就“USB无法识别的端口”。
怎么解决呢?看门狗啊,解决单片机死机的利器。
于是看门狗+释放端口+连结端口,CDC_ISP正常了,当单片机宕机时,计算机不断的连结,断开,连结,断开,CDC_ISP正常了,
感谢,终于搞定了。
至于看门狗的详细用法,冲哥的视频中有,规格书中也有,就不详细解释了。
再次感谢各位大佬的跟贴,谢谢!希望对于遇到同样问题的朋友有所帮助。 我记得之前也有人问过这问题{:4_167:} <p>mark</p>
<p>好像一些不必要的c文件可以不用参加编译,况且看hex大小不能断定bin的实际大小</p>
<p>汇编可以最小</p>
页:
1
[2]