打印
[应用相关]

keil中使用ST-Link不能成功下载的真实原因

[复制链接]
1704|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
晓伍|  楼主 | 2019-7-4 11:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不能成功下载的程序中,包含如下程序,:

CInit::CInit(uint8_t mode)
{
        //底层初始化
        HAL_Init();       
       
        //GPIO时钟使能
          __HAL_RCC_GPIOA_CLK_ENABLE();
          __HAL_RCC_GPIOB_CLK_ENABLE();
        __HAL_RCC_GPIOC_CLK_ENABLE();
        __HAL_RCC_GPIOD_CLK_ENABLE();
          __HAL_RCC_GPIOE_CLK_ENABLE();

        GPIO_InitTypeDef GPIO_InitStructure;
               
        GPIO_InitStructure.Pin = GPIO_PIN_All;
        GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;
        GPIO_InitStructure.Pull = GPIO_NOPULL;

        HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
        HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
        HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
        HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);
        HAL_GPIO_Init(GPIOE, &GPIO_InitStructure);
}
这些程序将在目标板初始化的时候调用,目的是将所有的引脚设置为GPIO_MODE_ANALOG,以降低功耗。仔细分析可以看出,这样设置后,也会将SW-DP相应的引脚设置为GPIO_MODE_ANALOG,这就是其不能成功下载的原因。虽然在STM32开发笔记67: 在keil中使用ST-Link不能成功下载的解决方法提到了一种解决方法,但这种方法仅适合程序下载,如果还希望能够进行仿真调试,是做不到的。


使用特权

评论回复
沙发
晓伍|  楼主 | 2019-7-4 11:14 | 只看该作者
如何解决这一问题呢?可以参考下面的程序:

CInit::CInit(uint8_t mode)
{
        //底层初始化
        HAL_Init();       
       
        //GPIO时钟使能
#ifdef STM32F091xC
          __HAL_RCC_GPIOA_CLK_ENABLE();
          __HAL_RCC_GPIOB_CLK_ENABLE();
        __HAL_RCC_GPIOC_CLK_ENABLE();
        __HAL_RCC_GPIOD_CLK_ENABLE();
          __HAL_RCC_GPIOE_CLK_ENABLE();
#endif
#ifdef STM32F070x6
        __HAL_RCC_GPIOA_CLK_ENABLE();
          __HAL_RCC_GPIOB_CLK_ENABLE();
          __HAL_RCC_GPIOF_CLK_ENABLE();
#endif

        if (mode == 1)
        {
                GPIO_InitTypeDef GPIO_InitStructure;
               
                GPIO_InitStructure.Pin = GPIO_PIN_All;
                GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;
                GPIO_InitStructure.Pull = GPIO_NOPULL;
#ifdef STM32F091xC
                HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
                HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
                HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
                HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);
                HAL_GPIO_Init(GPIOE, &GPIO_InitStructure);
#endif
#ifdef STM32F070x6
                HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
                HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
                HAL_GPIO_Init(GPIOF, &GPIO_InitStructure);
#endif
        }
}
我们在进行初始化的时候可以传递参数,如果我们希望其低功耗运行,则传递参数1,其不再具有仿真功能;否则传递其它参数,可正常下载并仿真。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

4143

帖子

1

粉丝