lqs0905 发表于 2018-11-8 16:15:32

一个关于LL库使用管脚重映射的BUG

本帖最后由 lqs0905 于 2018-11-30 09:30 编辑

我在使用LL库时在CUBEMX中设置了重映射,但是在生成的代码中却没有重映射,于是人工添加LL_GPIO_AF_RemapPartial_TIM3(); 然后防真但是走到这里就出现不能继续防真的情况,最后经分析在调用这个函数时禁用了Jlink ,但是在这个函数中没有Jlink的代码。最后发现这个问题如图,不知那位大神能告知原因,我写进去后再读出来值是错的导致我再次配置 AFIO->AMPR 出错

lqs0905 发表于 2018-11-8 16:17:11

我用的是IAR开发的

toofree 发表于 2018-11-9 00:38:15

本帖最后由 toofree 于 2018-11-9 00:56 编辑

这个需要工程。i在其它地方调用了没有? i 确定没被优化掉吗?看一下汇编代码。
__HAL_AFIO_REMAP_SWJ_NOJTAG() 的功能是只允许SWD调试,不允许JTAG调试。如果你用了JTAG模式,那就是行的,需要选成SWD。
对AFIO->AMPR进行操作时,请先读出来,然后做“与”或者“或”关系后,把你要修改的位加进去,不要直接改,这样会影响一大家子。




lqs0905 发表于 2018-11-9 08:22:59

toofree 发表于 2018-11-9 00:38
这个需要工程。i在其它地方调用了没有? i 确定没被优化掉吗?看一下汇编代码。
__HAL_AFIO_REMAP_SWJ_NOJT ...

i没有再别的地方调用,Keil 有显示不正确的问题IAR 目前没有发现。我之前就是选读AFIO进行与或,但是结果总是错的,这是为了试验才直接写进行验证的

lqs0905 发表于 2018-11-9 08:23:17

static void MX_TIM3_Init(void)
{

LL_TIM_InitTypeDef TIM_InitStruct;

LL_GPIO_InitTypeDef GPIO_InitStruct;

/* Peripheral clock enable */
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM3);

/**TIM3 GPIO Configuration
PB4   ------> TIM3_CH1
*/
GPIO_InitStruct.Pin = LL_GPIO_PIN_4;
GPIO_InitStruct.Mode = LL_GPIO_MODE_FLOATING;
LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
//AFIO->MAPR = 0x2000800;
LL_GPIO_AF_RemapPartial_TIM3();//程序走到这里就无法进行防真,本行是因为Cubemx在使用LL库时没有对TIM3进行映射才人工加上去的

TIM_InitStruct.Prescaler = 12;
TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
TIM_InitStruct.Autoreload = 0xffff;
TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
LL_TIM_Init(TIM3, &TIM_InitStruct);

LL_TIM_DisableARRPreload(TIM3);

LL_TIM_SetTriggerInput(TIM3, LL_TIM_TS_TI1FP1);

LL_TIM_SetSlaveMode(TIM3, LL_TIM_SLAVEMODE_RESET);

LL_TIM_IC_SetFilter(TIM3, LL_TIM_CHANNEL_CH1, LL_TIM_IC_FILTER_FDIV1);

LL_TIM_IC_SetPolarity(TIM3, LL_TIM_CHANNEL_CH1, LL_TIM_IC_POLARITY_RISING);

LL_TIM_DisableIT_TRIG(TIM3);

LL_TIM_DisableDMAReq_TRIG(TIM3);

LL_TIM_SetTriggerOutput(TIM3, LL_TIM_TRGO_RESET);

LL_TIM_DisableMasterSlaveMode(TIM3);

LL_TIM_IC_SetActiveInput(TIM3, LL_TIM_CHANNEL_CH1, LL_TIM_ACTIVEINPUT_DIRECTTI);

LL_TIM_IC_SetPrescaler(TIM3, LL_TIM_CHANNEL_CH1, LL_TIM_ICPSC_DIV1);

LL_TIM_IC_SetFilter(TIM3, LL_TIM_CHANNEL_CH1, LL_TIM_IC_FILTER_FDIV1_N8);

LL_TIM_IC_SetActiveInput(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_ACTIVEINPUT_INDIRECTTI);

LL_TIM_IC_SetPrescaler(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_ICPSC_DIV1);

LL_TIM_IC_SetFilter(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_IC_FILTER_FDIV1);

LL_TIM_IC_SetPolarity(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_IC_POLARITY_FALLING);

}

/** Configure pins as
      * Analog
      * Input
      * Output
      * EVENT_OUT
      * EXTI
*/
static void MX_GPIO_Init(void)
{

/* GPIO Ports Clock Enable */
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOC);
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOD);
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA);
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOB);

}

lqs0905 发表于 2018-11-9 08:35:23

这是源文件,用的是IAR 大神们帮看看

lqs0905 发表于 2018-11-9 16:39:28

:):):):)顶一下

lqs0905 发表于 2018-11-11 16:55:40

就这样沉了吗???

奏奏奏 发表于 2018-11-15 09:23:39

用STM32CubeMX配置我没见过会出现重映射BUG的,库手动选择LL库

xinshuwei 发表于 2018-11-15 20:23:01

用的库版本表示飘过呃呃呃:lol:lol
页: [1] 2
查看完整版本: 一个关于LL库使用管脚重映射的BUG