历史上的今天
今天是:2025年03月12日(星期三)
2020年03月12日 | STM32开发笔记68: keil中使用ST-Link不能成功下载的真实原因
2020-03-12 来源:eefocus
单片机型号: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,其不再具有仿真功能;否则传递其它参数,可正常下载并仿真。
史海拾趣
|
最近在做一个课题,用at91sam7x256的芯片做一个U盘读写程序,IAR平台开发,有一个可运行程序,但是实际操作中有一些问题,做课题的板子自带FLASH是32M内存,但是程序只对板子的内部FLASH做读写,所以现在可用大小只有200多K,如何修改 ...… 查看全部问答> |
|
平台:2450+WINCE500 FLASH:三星MLC NAND FLASH 问题描述: 不用HIVE注册表时,XIP可以运行,待改成HIVE注册表后,串口信息如下: ---------------------------------------- [OEMIO:INF] + IOCTL_HAL_POSTINIT [OEMIO:INF]  ...… 查看全部问答> |
|
正在写一个SIP的程序。 遇到了这样一个困难。 首先在生成SIP软面板的时候,创建了一个窗口,得到句柄hwndsip。 我可以在这个面板上直接TextOut就输出了文本,直接InvalidateRect就可以将文本清除掉,在同一窗口下做这样的一系列操作都没什么问题 ...… 查看全部问答> |
|
请问各位老大: 使用SOAP调用WEB SERVICE时调用mssoapinit函数的时候返回错误信息查看msdn是参数不对代码如下: ISOAPClient *pSoapClient; ::CoInitializeEx(NULL,COINIT_MULTITHREADED); HRESULT hr = CoCreateInstance(CLSID_SoapClient,NUL ...… 查看全部问答> |
|
刚做了一个MEGA8的项目,纯粹是爱好,很不专业。用UltiBoard 做出来的PCB图,PAD位置有的出现蓝色,有的刚无。不知道什么原因,应该在哪里设置?请高手指教,多谢!… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:03 编辑 09年 无线环境监测的题目 看以前的论文中有一个用反向串联的2个1N4148 和一个4.7mH电感串联一个5.6K电阻到单片机IO口 控制接收电路 不懂怎么个原理啊 有清楚原理的不? 两个1N4148反向串 ...… 查看全部问答> |




