我想利用STM32F4做一个SWD离线,一烧多的烧录器,请教如何实现?

2019-07-20 00:57发布

我想利用STM32F4做一个SWD离线一个烧多个板子的烧录器,请教如何实现?是先用电脑把hex文件,通过JFlash软件,下载到离线烧录器中,但离线烧录器中的,SWD协议怎么弄呢?SWD一般只有VCC,CLK,SWD,GND,是要向被烧的多个板子,统一发数据指令吗?具体如何实现?请教!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
42条回答
challenger
2019-07-23 09:21
LineReset代码

static void SwdLineReset(void)
{
  u8 i;
  SWD_OUT;
  SWD_DIO_H;
  for(i=0;i<56;i++)
{
    SWD_Delay();
    SWD_CLK_H;
    SWD_Delay();
    SWD_CLK_L;
}
}



写命令头函数

static void SwdSendByte(u8 dat)
{
  u8 i;
  SWD_OUT;
  for(i=0;i<8;i++)
  {  
    if((dat&0x80)==0x80)
    {
      SWD_DIO_H;
    }
    else
    {
       SWD_DIO_L;
    }
    dat<<=1;
    SWD_CLK_H;
    SWD_Delay();
    SWD_CLK_L;
    SWD_Delay();
  }
}



读取一个data函数

static u32 SeqRead(u8 cmd)
{
  u32 dat=0;
  u8 i=0;
  SwdSendByte(cmd);
  SWD_IN;
  for(i=0;i<3;i++)//ack 此处需要处理判断
  {
   SWD_CLK_H;
    SWD_Delay();
    SWD_CLK_L;
    SWD_Delay();
  }
dat=0;
  for(i=0;i<32;i++)
  {
    dat=dat>>1;
    SWD_CLK_H;
    SWD_Delay();
    SWD_CLK_L;
    if(SWD_DII)
    {
      dat|=0x80000000;
    }
    SWD_Delay();
  }
  //parity
  SWD_IN; //trn
        for(i=0;i<2;i++)
  {
        SWD_CLK_H;
        SWD_Delay();
        SWD_CLK_L;
        SWD_Delay();
        }
        SWD_DIO_L;
        SWD_OUT;
        for(i=0;i<5;i++)
  {
        SWD_CLK_H;
        SWD_Delay();
        SWD_CLK_L;
        SWD_Delay();
        SWD_CLK_H;
        SWD_Delay();
        SWD_CLK_L;
        SWD_Delay();
        }
  SWD_IN; //trn
  return dat;
}

一周热门 更多>