你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
lqs0905 提问时间:2018-11-8 16:15 /
本帖最后由 lqs0905 于 2018-11-30 09:30 编辑

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

举报

13个回答
lqs0905 回答时间:2018-11-8 16:17:11
我用的是IAR开发的
七哥 回答时间: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进行操作时,请先读出来,然后做“与”或者“或”关系后,把你要修改的位加进去,不要直接改,这样会影响一大家子。




评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

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 大神们帮看看

TIM3_PWM_IN.RAR

下载

9.68 MB, 下载次数: 2, 下载积分: ST金币 -1

源文件

lqs0905 回答时间:2018-11-9 16:39:28
顶一下
lqs0905 回答时间:2018-11-11 16:55:40
就这样沉了吗???
奏奏奏 回答时间:2018-11-15 09:23:39
用STM32CubeMX配置我没见过会出现重映射BUG的,库手动选择LL库

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

xinshuwei 回答时间:2018-11-15 20:23:01
用的库版本表示飘过  呃呃呃
tanic 回答时间:2018-11-16 09:02:06
SSSSSSSSSSSSS
lqs0905 回答时间:2018-11-29 20:22:31
奏奏奏 发表于 2018-11-15 09:23
用STM32CubeMX配置我没见过会出现重映射BUG的,库手动选择LL库

我源文件和CubeMx配置文件都上传了,能不能帮我看看问题出在什么地方
lqs0905 回答时间:2018-11-30 09:23:23
今天下了个CuberMX 5.0 问题依然还在,我又试了在Keill 环境下进行测试结果和IAR 一样。然后又换成HAL库发现是可以用的,经过研究发现Hal 库在进行重映时AFIO_REMAP_PARTIAL(REMAP_PIN, REMAP_PIN_MASK) do{ uint32_t tmpreg = AFIO->MAPR; \
                                                          tmpreg &= ~REMAP_PIN_MASK;    \
                                                          tmpreg |= AFIO_MAPR_SWJ_CFG;  \
                                                          tmpreg |= REMAP_PIN;          \
                                                          AFIO->MAPR = tmpreg;          \
                                                          }while(0U)
比LL库中的重映射 多了一个 tmpreg |= AFIO_MAPR_SWJ_CFG;  \ 才使的防直时不会出错。 所以我可以100%的肯定这是官方的一个BUG 。
lqs0905 回答时间:2018-11-30 09:24:56
本帖最后由 lqs0905 于 2018-11-30 09:27 编辑

总结起来就是 1.在使用LL库时生成的初始化函数没有进行重映射而HAL库却有2.LL库在进行重映时没有对JTAG口进行赋值,而HAL却有 希望官方能修复这个BUG

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版