菜鸟一坨 发表于 2017-6-2 14:42

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

现在在做的项目与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 + 2, USART_RX_BUF);
                        if (isp_type == 0x50)
                        {
                                for (len = 0; len < 15; len++)
                                {
                                        USART_SendData(USART1, buf_1);
                                        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);
                                        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

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

菜鸟一坨 发表于 2017-6-6 11:31

fengfeng的恒 发表于 2017-6-6 09:12
修改了波特率,那STM32的波特率有没有同时改变过来?

恩,是的,其实我修改了,但是没有在正确的位置修改,谢谢建议
页: [1] 2
查看完整版本: 关于stc单片机isp协议的一些疑问