OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 33441|回复: 98

stm8s_IAP_xmode串口升级

  [复制链接]

8

主题

533

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2829
金钱
2829
注册时间
2016-5-13
在线时间
178 小时
发表于 2016-7-22 17:59:56 | 显示全部楼层 |阅读模式
本帖最后由 电脑小白 于 2018-7-18 15:56 编辑

重磅出击,全球独此一份代码。原子大大,求票票,求酷贴,求置顶。
PS: 此IAP是用超级终端工具通过串口发送bin文件进行升级操作的!
附件中有app的demo工程和bootloader工程源码。

新添加了:工程地址设置说明(设置地址很重要,要不然没法从bootloader跳到app里去运行)。见新的附件。
Copyright 2016-2020 Alex.Fang  All rights reserved.

Header:   stm8s105c6t6 IAP code
File Name: main.c
Author: Alex.Fang (www.openedv.com username=电脑小白)
Date: 2016-07-22


免责声明:
此代码你可以用来学习和交流。不得商用!应用此程序酿成事故由你自己承担!
本人不负责维护和支持此代码!如有疑问和看不懂别来烦我! ^_^
openedv论坛好友可以随便下载和转给他人参阅学习。
版权遵循 = GPL

开发环境为IAR的代码和范例:见39楼另一大神贡献的补充帖子。

main.c 代码内容:
[mw_shl_code=c,true]


/* Includes ------------------------------------------------------------------*/

#include <string.h>
#include <stdio.h>
#include "stm8s.h"
#include "stm8s_clk.h"
#include "main.h"
//#include "stm8s_wwdg.h"
#include "delay.h"
#include "flash.h"
#include "stm8s_flash.h"

#include "config.h"
#include "IO_config.h"

#include "crc16.h"
#include "xmodem.h"

#include "stm8s_uart2.h"

#include "uart2.h"
//#include "stm8s_tim2.h"

//#include "wwdg.h"

//#define NGI()     _asm("sim");    /* 禁止全局中断 */
//#define EGI()     _asm("rim");    /* 使能全局中断 */
//#define WFI()     _asm("halt");   /*进入到低功耗模 WFI */


/* Private defines -----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

//address for GO command
//TFunction GoAddress;



void STM8_CLK_Init(void)
{
                CLK_DeInit();//复位时钟寄存器
    CLK_HSICmd(ENABLE);//HSI = 16MHz
    CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //f_psc = 16MHz/1
               
                //CLK_ClockSecuritySystemEnable();//开启时钟安全系统
    //enableInterrupts();
}


void system_init(void)
{
        STM8_CLK_Init();
        FLASH_DeInit();
        Init_GPIO();
        Init_UART2();

}


void main(void)
{        
  //_asm("sim");//关全部中断
        
        disableInterrupts();
        system_init();
        //_asm("rim");//开全部中断
        enableInterrupts();
        
        
        uart2_data("\r\n\r\n",4);
        uart2_data("Bootloader Start...\r\n",21);        
        uart2_data("Ver=20160722_1.0\r\n",18);
        disableInterrupts();
        

        //unlock_PROG();        
  //unlock_DATA();
        
        //Print("goto app...\r\n");
        //goto_app();        
        //Print("Failed!\r\n");
        //waiting_time_count=200;
  Xmoden_STate = IDLE;
        //RS232_Tran_Chr(NAK);
        disp_menu();
  while (1)
  {
                RS232_ISR();
                RS232_Rec_Xmodem();
               
  }//end while
  
}


[/mw_shl_code]


xmode.c 代码如下:
[mw_shl_code=c,true]

uchar RS232_Rec;
uchar RS232_Rec_old;
uchar RS232_Rec_flag=0;
//uchar RS232_Trn_flag=1;

enum TXmoden_STate Xmoden_STate = IDLE;

uchar Xmodem_Buffer[135]; /* 128 for XModem  + 3 head chars + 2 crc + nul */
//uchar Xmodem_Buffer_Ptr=0;
//uchar ChkSum=0;
//uchar PSer=1,PT=0;
//uchar xerror;
uint16_t waiting_time_count=HOLDTIME;
uint32_t App_address=0;


/*******************************************************************************
** 函数名称 : check
** 功能描述 : 校验,CRC为真则为CRC校验,否则为校验和
** 入口参数 : <crc>[in] 选择是CRC校验还是SUM校验
**                          <buf>[in] 校验的原始数据
**                          <sz>[in]  校验的数据长度
** 出口参数 : 无
** 返 回 值 : 校验无误返回TURE,反之返回FALSE
** 其他说明 : 无
*******************************************************************************/
static int check(int crc, const unsigned char *buf, int sz)
{
        if (crc){
                unsigned short crc = crc16_ccitt(buf, sz);
                unsigned short tcrc = (buf[sz]<<8)+buf[sz+1];
                if (crc == tcrc)
                        return TRUE;
        }
        else{
                int i;
                unsigned char cks = 0;
                for (i = sz; i != 0; i--){
                        cks += *(buf++);
                }
                if (cks == *buf)
                      return TRUE;
        }
        return FALSE;
}


//----------------------------------------------------------
void RS232_ISR(void)
{
        Receive(&RS232_Rec,100);
        
        //Transmit(RS232_Rec);
        
        RS232_Rec_flag = 1;
}

//----------------------------------------------------------
void RS232_Tran_Chr(uchar chr)
{
    Transmit(chr);
}

void disp_menu(void)
{
        Print("\r\n----------bootloader----------\r\n");
        Print("1.download\r\n");
        Print("2.goto app\r\n");
        Print("------------------------------\r\n");
        Print("Please choose (1 or 2):\r\n");
        Print("Timeout = [     ");
}

void disp_1(void)
{
        Print("\r\nPress = 1\r\n");
        Print("Choose file...\r\n    ");
}

void disp_2(void)
{
        Print("\r\nPress = 2\r\n");
        Print("Goto app...");
        delay_ms(20);
        goto_app();        
        Print("\r\nFailed!\r\n\r\n");
        waiting_time_count=HOLDTIME;
        Xmoden_STate = IDLE;
        disp_menu();
}


void RS232_Rec_Xmodem(void)
{
        uint8_t packetno = 1;
        uint8_t bufsz;
        uint8_t crc = 1;//启用CRC校验
        uint16_t i=0;
        //uint16_t j=0;               
               
                if(Xmoden_STate == IDLE){
                        if(waiting_time_count!=0){
                                waiting_time_count--;
                                RS232_Tran_Chr(8);
                                RS232_Tran_Chr(8);
                                RS232_Tran_Chr(8);
                                RS232_Tran_Chr(8);
                                RS232_Tran_Chr(8);
                                //RS232_Tran_Chr('[');
                                RS232_Tran_Chr(waiting_time_count/100%10+'0');
                                RS232_Tran_Chr(waiting_time_count/10%10+'0');
                                RS232_Tran_Chr(waiting_time_count%10+'0');
                                RS232_Tran_Chr(']');
                                RS232_Tran_Chr(' ');
                                
                                delay_ms(100);
                                
                        }
                        else {
                                
                                Print("\r\nTimeout,goto_app!\r\n");
                                delay_ms(20);
                                goto_app();        
                                Print("\r\nFailed!");
                                waiting_time_count=HOLDTIME;
                                disp_menu();
                        }
                        if(RS232_Rec_flag)
                        {
                                if(RS232_Rec_old!=RS232_Rec){
                                        RS232_Rec_old=RS232_Rec;
                                        waiting_time_count=HOLDTIME;        
                                        if(RS232_Rec == 13){//回车
                                                disp_menu();
                                        }
                                        else if(RS232_Rec == '1'){
                                                disp_1();
                                                waiting_time_count=50;
                                                Xmoden_STate = WSTART;
                                                //RS232_Tran_Chr(NAK);
                                        }
                                        else if(RS232_Rec == '2'){
                                                disp_2();
                                        }
                                }
                          RS232_Rec_flag=0;        
                        }
                        return;
                }
               
    if(RS232_Rec_flag)
    {
                                RS232_Rec_flag=0;
                                
                                if((RS232_Rec == 'B')||(RS232_Rec == 'b')) {
                                        RS232_Rec=0;
                                        waiting_time_count=HOLDTIME;
                                        Xmoden_STate = IDLE;         //进入"空闲"状态
                                        disp_menu();
                                }
              else if(RS232_Rec==SOH){ //开始传输文件
                                  bufsz=128;
                                        App_address=MAIN_USER_RESET_ADDR;
                while(RS232_Rec==SOH){//接收到有效数据帧头
                          Xmodem_Buffer[0]=RS232_Rec;
                          for(i=0;i<132;i++){//接收一帧数据
                                                                Receive(&Xmodem_Buffer[i+1],10000UL);
                                                                //Receive_while(&Xmodem_Buffer[i+1]);
                          }
                                                        
                          if((Xmodem_Buffer[1]==(uint8_t)~Xmodem_Buffer[2])&&(packetno==Xmodem_Buffer[1])//包序号无误
                            &&(check(crc, &Xmodem_Buffer[3], bufsz))){//CRC校验无误
                            packetno++;
                                                                //
                                                                firmware_option();
                                                                App_address+=128;
                                                                //delay_ms(1);
                                              Transmit(ACK);                                                               
                                                        }
                          else {//要求重发
                                  Transmit(NAK);
                          }
                                                        
                                                        //delay_ms(10);
                                                        //Transmit(ACK);        
                                                               
                                                        waiting_time_count=1000;
                                      do {
                                              Receive(&RS232_Rec,1000);//读取下一帧数据的帧头
                                      }while((RS232_Rec!=SOH)&&(waiting_time_count--));
                                                        if(waiting_time_count==0)break;
                                                
                }
                                       
                                        Transmit(ACK);
                                        Receive(&RS232_Rec,10000);
                                        if(RS232_Rec==EOT){//文件发送结束标志  
                                          Transmit(ACK);
                                        }
                                        eraser_option();
                                        waiting_time_count=HOLDTIME;
                                        Xmoden_STate = IDLE;         //进入"空闲"状态
                                        disp_menu();
                                       
                          }
        else {
                                        if(waiting_time_count!=0){
                                                waiting_time_count--;
                                                delay_ms(100);
                                        }
                                        else {
                                                waiting_time_count=20;
                                                Transmit('C');//crc
                                                //Transmit(NAK);//sum
                                        }
                                }
    }
}
//本函数的调用方式如下:
//  Xmoden_STate = WSTART;
//  RS232_Tran_Chr(NAK);
//  while(Xmoden_STate != IDLE) RS232_Rec_Xmodem();
/*
void firmware_option(void)
{
        uint16_t i=0;
        uint16_t j=0;
  uint8_t FULL_status=0;               
        //uint8_t * p_str=pstr;
        FLASH_Unlock(FLASH_MEMTYPE_PROG);
        for(i=0;i<125;i++){
                if((Xmodem_Buffer[i+3]==CTRLZ)&&(Xmodem_Buffer[i+4]==CTRLZ)&&(Xmodem_Buffer[i+5]==CTRLZ))
                {
                        FULL_status=1;
                        j=i;
                        break;
                }
        }
        if(FULL_status==0){
           //App_address
                for(i=0;i<128;i++){
                        FLASH_EraseByte(App_address+i);
                        //delay_ms(1);
                        FLASH_ProgramByte(App_address+i,Xmodem_Buffer[3+i]);        
                }                 
        }
        else {
                //App_address
                for(i=0;i<j;i++){
                        FLASH_EraseByte(App_address+i);
                        //delay_ms(1);
                        FLASH_ProgramByte(App_address+i,Xmodem_Buffer[3+i]);        
                }
        }
        FLASH_Lock(FLASH_MEMTYPE_PROG);
}
*/
void firmware_option(void)
{
        uint16_t i=0;        
        //uint8_t * p_str=pstr;
        FLASH_Unlock(FLASH_MEMTYPE_PROG);
        //App_address
        for(i=0;i<128;i++){
                FLASH_EraseByte(App_address+i);
                //delay_ms(1);
                FLASH_ProgramByte(App_address+i,Xmodem_Buffer[3+i]);        
        }
        FLASH_Lock(FLASH_MEMTYPE_PROG);
}

void eraser_option(void)
{
        uint16_t i=0;        
        //uint8_t * p_str=pstr;
        FLASH_Unlock(FLASH_MEMTYPE_PROG);
        //App_address
        while(FLASH_ReadByte(App_address-1)==CTRLZ){
                FLASH_EraseByte(App_address-1);
    App_address--;
        }
        FLASH_Lock(FLASH_MEMTYPE_PROG);
}







[/mw_shl_code]



串口IAP升级操作步骤说明
1、准备工作
   先拷贝升级所需要的文件到桌面。
   (Win xp有自带的超级终端,怎么打开xp自带的超级终端这里不做介绍)
    Win7win10需要自行下载超级终端软件。
2、打开超级终端,如下图

1

1
3、打开后弹出新建连接对话框,点击cancel(不新建,若没有提前配置好的需要新建)。
   如果从没有打开过超级终端,那么将会提示输入国家代号和拨号,如下:
   国家代号输入:020
   拨号:123(随便填)
   分号:456(随便填)
   拨号模式选择:脉冲拨号。

2

2
4、打开配置好的配置文件:File->open

3

3

5、找到driver文件夹下ttys9600.ht文件  (有时候需要自己去建立超级终端配置,,如何配置这里不做介绍)

4

4

6、进入升级模式
   输入enter回车键,会自动返回当前mcu的版本号入下图。(查询当前mcu版本)
   连续输入5次空格键将进入升级模式。(注意要30秒内要按下数字键1
   升级模式返回如下显示:
   Bootloader start...
   1---下载bin文件 2---运行下载好的bin固件

5

5

7、键盘在timeout不等于0的时间内输入“1”。Timeout=0时会自动退出升级模式的。
   输入1以后会进入发送固件模式。如下图:
   选择要发送的bin文件。Transfer-->Send file...

6

6

8、发送升级bin固件
   Protocol要选择为xmode.注意不是1k-xmodeBrowse找到driver下的bin固件。
   点击send开始传输。

7

7


9、找到文件如下:

8

8

10、加载文件后,并选择好xmode协议传输。
    点击send后将开始传输固件到mcu

9

9

11、传输文件过程。
  

10

10
  

11

11
  

12

12

12、文件传输完毕。
自动进行30秒倒计时。
30内没有按键按下将自动退出升级模式,执行刚更新的固件。
此时间段内如果按下数字键2,将立即退出升级模式并执行刚更新的固件。

13

13
13、按下了数字键2后,退出升级模式如下图:
按下1会提示:press=1
按下2会提示:press=2
出现“start...”提示,就是升级完成已经在运行新的固件了。

14

14
14、至此升级操作已经完成。

日期:
2016-07-22   
版本:
V1.0







stm8s_IAP.zip

9.79 MB, 下载次数: 22298

工程地址设置说明.zip

36.88 KB, 下载次数: 603

虽然不明白你们在说什么,但感觉很厉害的样子。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

18

主题

238

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1823
金钱
1823
注册时间
2014-8-5
在线时间
211 小时
发表于 2017-8-12 12:52:44 | 显示全部楼层
通过学习楼主的STM8S IAP  自己也写了一个,也是串口XMODEM  128字节模式   大小为 3K
可以支持所有STM8S系类,已留好接口,改成 I2C   SPI 或者其它通信方式都非常方便
开发环境为 IAR  ,纯C语言
主要的难点就是:  STVD可以直接设置中断向量重映射,而IAR却没有这个功能,而且STM8S 的中断向量是固定在0X8000不可更改的。在IAP代码中,我是通过直接改写IAP中除复位中断外的向量跳转地址。
此中断映射方式不会多占FLASH或者SRAM
个人猜测 STM32F0系类代码也可以通过手动改写向量中断表的方式来重定向中断向量表。
STM8S的中断向量函数固定为4字节,第一个字节固定为0X82,后面3个字节为函数地址,大家可以用ST LINK V2把STM8S的FLASH数据读出来观察即可明白。
关于中断向量重映射的方法,请看代码。代码中有注释
注意!
1、IAP中的0X8000地址的4个字节一定不能改,此值为STM8S的复位向量地址入口,个人没有测试改了会怎么样,但是只知道会出问题,而且可能无法修复
2、在IAP代码中一定不能用中断!因为中断向量表已经被手动更改了,如果用了中断就会跳到APP代码中去,如果没有APP代码就会死机。
3、APP代码是可以正常使用中断的,无影响。

支持STM8S全系列,3K大小,IAR环境,纯C语言。Bootloader工程:
Bootloader_Release.zip (7.76 MB, 下载次数: 10896)
回复 支持 13 反对 0

使用道具 举报

6

主题

315

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1665
金钱
1665
注册时间
2018-1-29
在线时间
159 小时
发表于 2020-2-10 09:12:36 | 显示全部楼层
楼主分享的是基于XModem协议的串口BootLoader,用超级终端作为上位机烧写器。有的时候项目需要专用的烧写器,怎么办?
我这里给大家分享一个基于VC6绿色版的PC端串口文件传输项目源码,也是采用XModem 128字节协议。稍作修改就可以作为你自己的专用串口烧写器了。

xmodem_Flash_Down.rar

2.53 MB, 下载次数: 100

回复 支持 2 反对 0

使用道具 举报

8

主题

533

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2829
金钱
2829
注册时间
2016-5-13
在线时间
178 小时
 楼主| 发表于 2016-10-11 17:20:08 | 显示全部楼层
wangjun110 发表于 2016-10-11 15:22
有没有寄存器版呢?stm8感觉直接操作寄存器好些。

我不想写寄存器的。
虽然不明白你们在说什么,但感觉很厉害的样子。
回复 支持 1 反对 0

使用道具 举报

10

主题

254

帖子

0

精华

高级会员

Rank: 4

积分
594
金钱
594
注册时间
2015-10-17
在线时间
145 小时
发表于 2016-7-22 18:16:02 | 显示全部楼层
沙发,帮顶,欢迎加入楼主粉丝群:321616391
开着单片机翱翔在天空
回复 支持 反对

使用道具 举报

8

主题

533

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2829
金钱
2829
注册时间
2016-5-13
在线时间
178 小时
 楼主| 发表于 2016-7-31 12:12:37 | 显示全部楼层
下载的有117次,顶贴的就一个。宝宝很伤心……请允许我哭一会儿先……
虽然不明白你们在说什么,但感觉很厉害的样子。
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2013-12-20
在线时间
17 小时
发表于 2016-8-3 13:35:29 | 显示全部楼层
我来顶一个
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2013-12-20
在线时间
17 小时
发表于 2016-8-3 14:03:42 | 显示全部楼层
ttys9600.ht这个文件我怎么找不到呢?我是WIN7的系统,然后下载了XP的超级终端,找不到你说的文件
回复 支持 反对

使用道具 举报

8

主题

533

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2829
金钱
2829
注册时间
2016-5-13
在线时间
178 小时
 楼主| 发表于 2016-8-3 18:23:46 | 显示全部楼层
超级终端和 ttys9600.ht 文件

HyperTerminal.zip

232.08 KB, 下载次数: 1309

虽然不明白你们在说什么,但感觉很厉害的样子。
回复 支持 反对

使用道具 举报

2

主题

50

帖子

0

精华

高级会员

Rank: 4

积分
507
金钱
507
注册时间
2015-2-11
在线时间
121 小时
发表于 2016-8-3 22:34:07 | 显示全部楼层
来顶一个,不错不错
回复 支持 反对

使用道具 举报

0

主题

0

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-7-9
在线时间
8 小时
发表于 2016-8-18 19:35:35 | 显示全部楼层
绝对要顶一下,楼主牛逼。。。
回复 支持 反对

使用道具 举报

8

主题

533

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2829
金钱
2829
注册时间
2016-5-13
在线时间
178 小时
 楼主| 发表于 2016-8-22 09:37:51 | 显示全部楼层
原子大大,能给个酷贴吗?
虽然不明白你们在说什么,但感觉很厉害的样子。
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-10-27
在线时间
6 小时
发表于 2016-8-23 10:27:04 | 显示全部楼层
楼主威武!!!!!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

6

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2011-3-22
在线时间
3 小时
发表于 2016-9-1 09:57:31 | 显示全部楼层
谢谢楼主。。。
回复 支持 反对

使用道具 举报

8

主题

533

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2829
金钱
2829
注册时间
2016-5-13
在线时间
178 小时
 楼主| 发表于 2016-9-14 11:43:00 | 显示全部楼层
Disclaimer of liability:
This code you can use to learn and communicate. No commercial! Use this procedure to cause accidents by yourself!
I am not responsible for the maintenance and support of this code! If you have any questions and cannot read ^_^ don't bother me!
Openedv forum friends can easily download and transfer to other people see learning.
Copyright follow = GPL
虽然不明白你们在说什么,但感觉很厉害的样子。
回复 支持 反对

使用道具 举报

5

主题

179

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
8194
金钱
8194
注册时间
2016-9-7
在线时间
1113 小时
发表于 2016-9-15 10:38:06 | 显示全部楼层
多谢分享,已经收藏
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2016-9-17
在线时间
0 小时
发表于 2016-9-17 17:35:10 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2013-11-5
在线时间
5 小时
发表于 2016-9-27 13:45:24 | 显示全部楼层
谢谢分享!
回复 支持 反对

使用道具 举报

8

主题

533

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2829
金钱
2829
注册时间
2016-5-13
在线时间
178 小时
 楼主| 发表于 2016-9-29 09:31:39 | 显示全部楼层

Disclaimer of liability:
This code you can use to learn and communicate. No commercial! Use this procedure to cause accidents by yourself!
I am not responsible for the maintenance and support of this code! If you have any questions and cannot read ^_^ don't bother me!
Openedv forum friends can easily download and transfer to other people see learning.
Copyright follow = GPL
虽然不明白你们在说什么,但感觉很厉害的样子。
回复 支持 反对

使用道具 举报

35

主题

106

帖子

0

精华

高级会员

Rank: 4

积分
546
金钱
546
注册时间
2016-4-20
在线时间
181 小时
发表于 2016-10-11 15:22:27 | 显示全部楼层
有没有寄存器版呢?stm8感觉直接操作寄存器好些。
回复 支持 反对

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2013-7-3
在线时间
5 小时
发表于 2016-10-12 21:36:08 | 显示全部楼层
不得不顶,学习了~!
回复 支持 反对

使用道具 举报

0

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2014-8-17
在线时间
20 小时
发表于 2016-10-15 09:40:09 | 显示全部楼层
收藏一下,以后或许有用到
回复 支持 反对

使用道具 举报

39

主题

597

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2109
金钱
2109
注册时间
2011-9-3
在线时间
119 小时
发表于 2016-10-29 12:12:01 | 显示全部楼层
收藏一下。谢谢分享。
回复 支持 反对

使用道具 举报

8

主题

533

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2829
金钱
2829
注册时间
2016-5-13
在线时间
178 小时
 楼主| 发表于 2016-11-4 20:26:51 | 显示全部楼层
原子大大,能给个酷贴吗?:$:$:$
虽然不明白你们在说什么,但感觉很厉害的样子。
回复 支持 反对

使用道具 举报

45

主题

173

帖子

0

精华

高级会员

Rank: 4

积分
777
金钱
777
注册时间
2013-4-23
在线时间
159 小时
发表于 2016-11-8 09:34:00 | 显示全部楼层
楼主厉害的
回复 支持 反对

使用道具 举报

0

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2013-3-3
在线时间
10 小时
发表于 2016-11-20 19:20:59 | 显示全部楼层
电脑小白,你好,感谢你的帖子,赞!
不过可以用secuCRT软件,比windows自带的 终端好用多了呢
回复 支持 反对

使用道具 举报

8

主题

533

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2829
金钱
2829
注册时间
2016-5-13
在线时间
178 小时
 楼主| 发表于 2016-11-21 16:14:11 | 显示全部楼层
casy 发表于 2016-11-20 19:20
电脑小白,你好,感谢你的帖子,赞!
不过可以用secuCRT软件,比windows自带的 终端好用多了呢

可以用secureCRT软件的。我也用secureCRT测试过,可以升级。只不过我比较懒,没有去写用secureCRT的操作方法。
虽然不明白你们在说什么,但感觉很厉害的样子。
回复 支持 反对

使用道具 举报

22

主题

181

帖子

0

精华

高级会员

Rank: 4

积分
878
金钱
878
注册时间
2014-7-7
在线时间
311 小时
发表于 2016-11-22 12:16:24 | 显示全部楼层
阻塞好严重!建议楼主做成状态机形式!当然,如果单单是iap那倒没什么所谓!
回复 支持 反对

使用道具 举报

8

主题

533

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2829
金钱
2829
注册时间
2016-5-13
在线时间
178 小时
 楼主| 发表于 2016-11-22 18:40:07 | 显示全部楼层
our单片机 发表于 2016-11-22 12:16
阻塞好严重!建议楼主做成状态机形式!当然,如果单单是iap那倒没什么所谓!

关键是stm8这款内存比较小。如果可以建立一个大的数组就不用这么慢了。升级过程大概5分钟。每次接收100多字节就去保存了。so 速度很慢。大家不要介意速度慢,没办法缓存不够大。
虽然不明白你们在说什么,但感觉很厉害的样子。
回复 支持 反对

使用道具 举报

4

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2012-9-15
在线时间
6 小时
发表于 2016-11-29 14:58:14 | 显示全部楼层
楼主厉害,我最近用AN2659例子修改,发送查询版本的命令,一直返回NACK呢,不知道那里的问题?发送同步7f,有返回ACK,很奇怪
回复 支持 反对

使用道具 举报

8

主题

533

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2829
金钱
2829
注册时间
2016-5-13
在线时间
178 小时
 楼主| 发表于 2016-12-2 11:35:08 | 显示全部楼层
原子大大,能给个酷贴吗?:$
虽然不明白你们在说什么,但感觉很厉害的样子。
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2013-8-26
在线时间
28 小时
发表于 2017-1-23 10:29:09 | 显示全部楼层
非常好的学习资料,谢谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2017-1-24
在线时间
8 小时
发表于 2017-3-8 10:43:34 | 显示全部楼层
学习一下,谢谢分享
回复 支持 反对

使用道具 举报

0

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2013-10-10
在线时间
17 小时
发表于 2017-3-11 19:54:47 | 显示全部楼层
下来学习一下,正好需要
回复 支持 反对

使用道具 举报

8

主题

533

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2829
金钱
2829
注册时间
2016-5-13
在线时间
178 小时
 楼主| 发表于 2017-3-13 14:04:50 | 显示全部楼层
顺便提醒一下:这两个工程都是用的stvd进行编译的。编译器用的是CXSTM8_32K这货。
回复 支持 反对

使用道具 举报

jiangbo0320 该用户已被删除
发表于 2017-3-24 23:56:17 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

40

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1051
金钱
1051
注册时间
2015-1-4
在线时间
88 小时
发表于 2017-5-13 02:12:23 | 显示全部楼层
very good, nice job !!!
回复 支持 反对

使用道具 举报

8

主题

533

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2829
金钱
2829
注册时间
2016-5-13
在线时间
178 小时
 楼主| 发表于 2017-5-16 17:58:32 | 显示全部楼层
原子大大,求票票,求酷贴,求置顶。
虽然不明白你们在说什么,但感觉很厉害的样子。
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2012-11-13
在线时间
1 小时
发表于 2017-6-29 11:52:56 来自手机 | 显示全部楼层
多谢参考,顶顶顶!
回复 支持 反对

使用道具 举报

8

主题

533

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2829
金钱
2829
注册时间
2016-5-13
在线时间
178 小时
 楼主| 发表于 2017-7-11 09:35:49 | 显示全部楼层

原子大大,求票票,求酷贴,求置顶。
虽然不明白你们在说什么,但感觉很厉害的样子。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-8-14
在线时间
3 小时
发表于 2017-8-14 14:47:11 | 显示全部楼层
前段时间项目需要用了一个STM的IAP升级,Boot文件只有256字节大小     “STM8 TinyBoot”
回复 支持 反对

使用道具 举报

18

主题

238

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1823
金钱
1823
注册时间
2014-8-5
在线时间
211 小时
发表于 2017-8-18 15:33:38 | 显示全部楼层
Draven 发表于 2017-8-14 14:47
前段时间项目需要用了一个STM的IAP升级,Boot文件只有256字节大小     “STM8 TinyBoot”

那这个就很牛逼啊,不过STM8S 好像有一个区域是专门用来放Bootloader代码的,不能用了这个区域没有
回复 支持 反对

使用道具 举报

8

主题

533

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2829
金钱
2829
注册时间
2016-5-13
在线时间
178 小时
 楼主| 发表于 2018-1-29 16:21:58 | 显示全部楼层
原子大大,求票票,求酷贴,求置顶。IAR的请看39楼。
虽然不明白你们在说什么,但感觉很厉害的样子。
回复 支持 反对

使用道具 举报

10

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
360
金钱
360
注册时间
2017-3-2
在线时间
39 小时
发表于 2018-1-30 14:14:21 | 显示全部楼层
这是好贴啊,应该支持,应该置顶,让更多的人知道
回复 支持 反对

使用道具 举报

13

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
315
金钱
315
注册时间
2017-12-25
在线时间
87 小时
发表于 2018-3-8 11:45:36 | 显示全部楼层
513393302@qq.co 发表于 2017-8-12 12:52
通过学习楼主的STM8S IAP  自己也写了一个,也是串口XMODEM  128字节模式   大小为 3K
可以支持所有STM8S ...

膜拜大神!!!
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2013-10-24
在线时间
9 小时
发表于 2018-3-28 00:07:16 | 显示全部楼层
谢谢了
回复 支持 反对

使用道具 举报

8

主题

533

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2829
金钱
2829
注册时间
2016-5-13
在线时间
178 小时
 楼主| 发表于 2018-3-29 14:03:56 | 显示全部楼层
原子大大,求票票,求酷贴,求置顶。
原子大大,给个精华帖也行呀。
虽然不明白你们在说什么,但感觉很厉害的样子。
回复 支持 反对

使用道具 举报

160

主题

966

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2095
金钱
2095
注册时间
2014-3-7
在线时间
490 小时
发表于 2018-7-4 17:46:42 | 显示全部楼层
看看学习
回复 支持 反对

使用道具 举报

160

主题

966

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2095
金钱
2095
注册时间
2014-3-7
在线时间
490 小时
发表于 2018-7-4 17:57:03 | 显示全部楼层
电脑小白 发表于 2018-3-29 14:03
原子大大,求票票,求酷贴,求置顶。
原子大大,给个精华帖也行呀。

求给精华  !哈哈
回复 支持 反对

使用道具 举报

160

主题

966

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2095
金钱
2095
注册时间
2014-3-7
在线时间
490 小时
发表于 2018-7-4 17:59:13 | 显示全部楼层
本帖最后由 ssssssssssss 于 2018-7-4 18:02 编辑
电脑小白 发表于 2016-8-3 18:23
超级终端和 ttys9600.ht 文件

可以啊
回复 支持 反对

使用道具 举报

160

主题

966

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2095
金钱
2095
注册时间
2014-3-7
在线时间
490 小时
发表于 2018-7-4 18:00:01 | 显示全部楼层
电脑小白 发表于 2018-3-29 14:03
原子大大,求票票,求酷贴,求置顶。
原子大大,给个精华帖也行呀。

两年时间都不爱你
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 07:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表