找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3101|回复: 2
打印 上一主题 下一主题
收起左侧

Usart3的remap映射

[复制链接]
跳转到指定楼层
楼主
ID:82781 发表于 2015-6-13 16:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
搞了一下午的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;
  }  

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:82781 发表于 2015-6-13 16:21 | 只看该作者
嵌入式系统中的内存管理不同于PC中的C和c++中的malloc和NEW,进行动态分配内存,但是这样是会带来副作用的内存碎片,是连续的内存区,,这样就造成了一个很大的风险,如果内存持很大那么这种便不是什么了,如果内存不够大,很小,那么程序运行反复的开辟后最后一定会导致内存分配失败,导致程序崩溃!所以要人为的开辟内存分区,然后管理,指定一块内存区,然后把内存区在进行分区管理,申请,就在管理的内存区段内操作,总之嵌入式C和C/C++还是有区别的!
回复

使用道具 举报

板凳
ID:82781 发表于 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;
  }  
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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