[STC单片机]

关于stc单片机isp协议的一些疑问

[复制链接]
4578|23
手机看帖
扫描二维码
随时随地手机跟帖
菜鸟一坨|  楼主 | 2017-6-2 14:42 | 显示全部楼层 |阅读模式
现在在做的项目与stc单片机的isp协议相关,使用stm32给stc12单片机升级程序,在连续发送7f后,单片机是会回复的,然后stm32回复单片机型号相关的帧,单片机也回复,但是stm32向单片机发送修改波特率的帧后,单片机就不回复了,数据应该是没有问题的,校验和什么的都对,但就是不回复,尝试过几种不同的波特率,也没用,希望有了解的指点一下,,,,,,,,,,,,,,

相关帖子

菜鸟一坨|  楼主 | 2017-6-2 14:47 | 显示全部楼层
求援助,必有重谢

使用特权

评论回复
ningling_21| | 2017-6-2 15:19 | 显示全部楼层
是不是时间上有要求?

使用特权

评论回复
菜鸟一坨|  楼主 | 2017-6-2 15:48 | 显示全部楼层
ningling_21 发表于 2017-6-2 15:19
是不是时间上有要求?

我觉得可能也是哪里有一些要求,但是我加了几种延时,都没用,无奈

使用特权

评论回复
hp34401a| | 2017-6-2 16:18 | 显示全部楼层
如果用stc15,isp有官方例程。

使用特权

评论回复
菜鸟一坨|  楼主 | 2017-6-2 16:22 | 显示全部楼层
hp34401a 发表于 2017-6-2 16:18
如果用stc15,isp有官方例程。

我知道,可是stc15和stc12好像不一样呢?

使用特权

评论回复
ningling_21| | 2017-6-2 16:36 | 显示全部楼层
刚开始的波特率需1200/2400/4800,不能高于4800

使用特权

评论回复
菜鸟一坨|  楼主 | 2017-6-2 16:43 | 显示全部楼层
ningling_21 发表于 2017-6-2 16:36
刚开始的波特率需1200/2400/4800,不能高于4800

对啊,我一直在使用1200,但是修改波特率那一帧单片机就是不回复,前一帧与型号有关的就回复,所以不知道为什么

使用特权

评论回复
ningling_21| | 2017-6-2 17:36 | 显示全部楼层
菜鸟一坨 发表于 2017-6-2 16:43
对啊,我一直在使用1200,但是修改波特率那一帧单片机就是不回复,前一帧与型号有关的就回复,所以不知道 ...

修改后的波特率是多少? 是如何计算出来的?

使用特权

评论回复
woshizhengjie89| | 2017-6-5 12:28 | 显示全部楼层
抓数据包啊,我就做过自己用QT写的上位机成功烧录

使用特权

评论回复
woshizhengjie89| | 2017-6-5 12:31 | 显示全部楼层
协议不对,建议用原厂烧录软件抓其数据包

使用特权

评论回复
菜鸟一坨|  楼主 | 2017-6-5 14:32 | 显示全部楼层
woshizhengjie89 发表于 2017-6-5 12:31
协议不对,建议用原厂烧录软件抓其数据包

我就是抓的数据包,但是把修改波特率那一帧发给单片机,单片机不回复,前面一帧型号相关的帧就回复,不知道为什么

使用特权

评论回复
菜鸟一坨|  楼主 | 2017-6-5 14:33 | 显示全部楼层
ningling_21 发表于 2017-6-2 17:36
修改后的波特率是多少? 是如何计算出来的?

我试过115200/9600等几种波特率,就是通过下载器下载的时候抓的数据包

使用特权

评论回复
菜鸟一坨|  楼主 | 2017-6-5 14:39 | 显示全部楼层
woshizhengjie89 发表于 2017-6-5 12:28
抓数据包啊,我就做过自己用QT写的上位机成功烧录

我是这样做的:上电后,单片机程序运行,检测0x7f, 检测到之后就isp复位,复位的同时,stm32仍然不断的发送0x7f给单片机,当单片机回复第一个字节后,停止发送0x7f,接收完单片机发来的一帧0x50帧后,发送回复0x50帧,然后单片机回复0x8f帧,这时候我用stm32回复0x8f修改波特率帧单片机就不回复了,不知道为什么,所有的数据帧都是抓包抓到的

使用特权

评论回复
菜鸟一坨|  楼主 | 2017-6-5 14:47 | 显示全部楼层
woshizhengjie89 发表于 2017-6-5 12:28
抓数据包啊,我就做过自己用QT写的上位机成功烧录

如果可以,能不能把程序给我发一份参考参考啊,弄了好久了,老是有问题

使用特权

评论回复
菜鸟一坨|  楼主 | 2017-6-5 14:55 | 显示全部楼层
                if (isp_recv_end_flag)
                {
//                        com3_send_str(USART_RX_BUF[4] + 2, USART_RX_BUF);
                        if (isp_type == 0x50)
                        {
                                for (len = 0; len < 15; len++)
                                {
                                        USART_SendData(USART1, buf_1[len]);
                                        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                                        delay_ms(2);
                                }
                        }
                        if (isp_type == 0x8f)
                        {
//                                delay_ms(20);
                                for (len = 0; len < 15; len++)
                                {
                                        USART_SendData(USART1, buf_2[len]);
                                        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                                        delay_ms(2);
                                }
                        }
                        isp_recv_end_flag = 0;
                }


上面是我对两帧的处理,一模一样,但是第一帧回复,第二帧不回复

使用特权

评论回复
woshizhengjie89| | 2017-6-5 21:50 | 显示全部楼层
不用管协议,   直接抓数据包啊!  看人家发什么,你就发什么,   目前没有对的协议出现,  你如果有时间可以总结出来

使用特权

评论回复
fengfeng的恒| | 2017-6-6 09:12 | 显示全部楼层
修改了波特率,那STM32的波特率有没有同时改变过来?

使用特权

评论回复
菜鸟一坨|  楼主 | 2017-6-6 11:28 | 显示全部楼层
现在我知道为什么了,其实是有数据的,但是我用串口助手抓单片机发送的数据时,我不知道为什么波特率不对的时候竟然连错误的数据都没有抓到,因为一般而言在波特率不对时可以抓到有问题的数据,但不会什么都抓不到。在修改波特率帧发送后,单片机就修改了波特率,而我的串口助手因为不能实时修改波特率,又没有抓到错误的数据,所以我认为没有抓到数据,但实际上单片机发数据了,所以很抱歉麻烦大家了,以后还是要认真用示波器抓包或者修改串口助手波特率。

使用特权

评论回复
评论
飞舞的水瓶 2021-9-2 10:46 回复TA
最近在研究这个,但是卡在51回复的第二条信息上(收不到第二条回复),所以想和你们探讨一下您的解决方案。各位大佬!多多指教 
菜鸟一坨|  楼主 | 2017-6-6 11:31 | 显示全部楼层
fengfeng的恒 发表于 2017-6-6 09:12
修改了波特率,那STM32的波特率有没有同时改变过来?

恩,是的,其实我修改了,但是没有在正确的位置修改,谢谢建议

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

27

帖子

0

粉丝