开发平台:STM32F103RE, 编译环境:MDK5.22 WIN10家庭版 STLINK2.1 SW模式 固件库:HAL库 问题:__HAL_AFIO_REMAP_SWJ_NOJTAG()和__HAL_AFIO_REMAP_USART1_ENABLE()同时使用,使用stlink2.1 sw无法下载和调试。。。。 现象:在调试串口1时,硬件板子使用的是PB6 PB7,所以就需要将串口1重映射到PB6 PB7,在程序中调用__HAL_AFIO_REMAP_USART1_ENABLE(),串口1页正常工作了。除此之外,板子还是使用到PB3口,所以不得不关闭JTAG口,但是这个情况下,我们还是想使用SW进行调试。所以程序中调用了__HAL_AFIO_REMAP_SWJ_NOJTAG()宏,PB3也能正常工作。但是问题就来了,在送STLINK2.1进行下载时,会提示无法找到目标,也就是找不到芯片。 1. 我们将__HAL_AFIO_REMAP_SWJ_NOJTAG()宏关闭后,但是保留__HAL_AFIO_REMAP_USART1_ENABLE()宏,串口1正常工作,又可以下载调试了。 2. 我们将__HAL_AFIO_REMAP_USART1_ENABLE()宏关闭后,但是保留__HAL_AFIO_REMAP_SWJ_NOJTAG()宏,PB3正常工作,又可以下载调试了。 去看了一下底层__HAL_AFIO_REMAP_SWJ_NOJTAG()和__HAL_AFIO_REMAP_USART1_ENABLE()是不会相互影响的。 请问这个现象是芯片的BUG?还是HAL库的BUG?还是说同时开启是没有问题的,只是我的程序有哪里没有注意到,有其他逻辑错误或者使用错误导致这种现象的。 |
根据实际测试:下载调试使用SWD模式,无需PB3参与,可以正常下载调试:
评分
查看全部评分
应该重新配置一下相关的GPIO 口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
注意:不要忘记在RCC_Configuration()中开启AFIO时钟,
//AFIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
还有,当执行了 __HAL_AFIO_REMAP_USART1_ENABLE()函数后,
单步调试,跟踪一下,SWG_CFG 寄存器,是否被修改了。
评分
查看全部评分
评分
查看全部评分