标题:
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