标题: Usart3的remap映射 [打印本页]

作者: xuwei    时间: 2015-6-13 16:21
标题: Usart3的remap映射
搞了一下午的M-BUS,尽然是因为一个狗屁的remap搞错了,原来
USART3_REMAP[1:0] = 11时才会是正确的映射!我晕菜!一个小小的错误导致了一下午没搞出个名堂来!这下好了,真相大白于天下!


  if((GPIO_Remap & 0x80000000) == 0x80000000)
  {
    tmpreg = AFIO->MAPR2;
  }
  else
  {
    tmpreg = AFIO->MAPR;
  }
  tmpmask = (GPIO_Remap & DBGAFR_POSITION_MASK) >> 0x10;
  tmp = GPIO_Remap & LSB_MASK;
  if ((GPIO_Remap & (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) == (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK))
  {
    tmpreg &= DBGAFR_SWJCFG_MASK;
    AFIO->MAPR &= DBGAFR_SWJCFG_MASK;
  }
  else if ((GPIO_Remap & DBGAFR_NUMBITS_MASK) == DBGAFR_NUMBITS_MASK)
  {
    tmp1 = ((uint32_t)0x03) << tmpmask;
    tmpreg &= ~tmp1;
    tmpreg |= ~DBGAFR_SWJCFG_MASK;
  }
  else
  {
    tmpreg &= ~(tmp << ((GPIO_Remap >> 0x15)*0x10));
    tmpreg |= ~DBGAFR_SWJCFG_MASK;
  }
  if (NewState != DISABLE)
  {
    tmpreg |= (tmp << ((GPIO_Remap >> 0x15)*0x10));
  }
  if((GPIO_Remap & 0x80000000) == 0x80000000)
  {
    AFIO->MAPR2 = tmpreg;
  }
  else
  {
    AFIO->MAPR = tmpreg;
  }  


作者: xuwei    时间: 2015-6-13 16:21
嵌入式系统中的内存管理不同于PC中的C和c++中的malloc和NEW,进行动态分配内存,但是这样是会带来副作用的内存碎片,是连续的内存区,,这样就造成了一个很大的风险,如果内存持很大那么这种便不是什么了,如果内存不够大,很小,那么程序运行反复的开辟后最后一定会导致内存分配失败,导致程序崩溃!所以要人为的开辟内存分区,然后管理,指定一块内存区,然后把内存区在进行分区管理,申请,就在管理的内存区段内操作,总之嵌入式C和C/C++还是有区别的!
作者: xuwei    时间: 2015-6-13 16:23
搞了一下午的M-BUS,尽然是因为一个狗屁的remap搞错了,原来
USART3_REMAP[1:0] = 11时才会是正确的映射!我晕菜!一个小小的错误导致了一下午没搞出个名堂来!这下好了,真相大白于天下!


  if((GPIO_Remap & 0x80000000) == 0x80000000)
  {
    tmpreg = AFIO->MAPR2;
  }
  else
  {
    tmpreg = AFIO->MAPR;
  }
  tmpmask = (GPIO_Remap & DBGAFR_POSITION_MASK) >> 0x10;
  tmp = GPIO_Remap & LSB_MASK;
  if ((GPIO_Remap & (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) == (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK))
  {
    tmpreg &= DBGAFR_SWJCFG_MASK;
    AFIO->MAPR &= DBGAFR_SWJCFG_MASK;
  }
  else if ((GPIO_Remap & DBGAFR_NUMBITS_MASK) == DBGAFR_NUMBITS_MASK)
  {
    tmp1 = ((uint32_t)0x03) << tmpmask;
    tmpreg &= ~tmp1;
    tmpreg |= ~DBGAFR_SWJCFG_MASK;
  }
  else
  {
    tmpreg &= ~(tmp << ((GPIO_Remap >> 0x15)*0x10));
    tmpreg |= ~DBGAFR_SWJCFG_MASK;
  }
  if (NewState != DISABLE)
  {
    tmpreg |= (tmp << ((GPIO_Remap >> 0x15)*0x10));
  }
  if((GPIO_Remap & 0x80000000) == 0x80000000)
  {
    AFIO->MAPR2 = tmpreg;
  }
  else
  {
    AFIO->MAPR = tmpreg;
  }  




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1