STM32开发笔记68: keil中使用ST-Link不能成功下载的真实原因

单片机型号:STM32F091RCT6


在STM32开发笔记67: 在keil中使用ST-Link不能成功下载的解决方法提到解决keil中使用ST-Link不能成功下载的一种方法,经仔细分析其实原因还在于程序上。

不能成功下载的程序中,包含如下程序,:

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不能成功下载的解决方法提到了一种解决方法,但这种方法仅适合程序下载,如果还希望能够进行仿真调试,是做不到的。

如何解决这一问题呢?可以参考下面的程序:

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,其不再具有仿真功能;否则传递其它参数,可正常下载并仿真。

 

 

 原创性文章,转载请注明出处CSDN:http://blog.csdn.net/qingwufeiyang12346。

 

 

 

 

 

你可能感兴趣的:(#,STM32快速开发,STM32快速开发)