STM32开发常见问题解决方法汇总(不断更新)

*配置问题

1. 使用STLINKV2,在keil中首次使用下载程序时没有异常,但后边再下载时会出现

No target Connected!
Error: Flash Download failed - Target DLL has been cancelled
或在STM32cubeIDE中调试时出现Failed to start GDB server

在这里插入图片描述

首先排查引脚设置,确保STM32的SW引脚(SWDIO、SWCLK)配置正确,且在SYS mode 的debug选择Serial Wire,不然下载一次后就无法在下载了,只能通过配置BOOT引脚重新烧录。
在这里插入图片描述

如果仍然有问题 ,一般情况下是因为我们用STLINKV2直接给板子供电,但山寨调试器通常性能不稳定,会导致STM32芯片因供电不足而写保护。你可以通过以下方法判断:
*STLINK连接板子,按住“复位”键的时候,MDK魔术手里点击setting,STLINK识别了芯片。
*STLINK连接板子,BOOT0上拉,MDK魔术手里点击setting,STLINK识别了芯片。
如果以上两种情况都出现了,那就说明确实是芯片写保护了。

怎么解决呢?首先,下载STM32 ST-LINK Utility,打开软件,点击connect to the target后立即按住复位键,2s后松开复位键,让STLINK识别芯片;
在这里插入图片描述
正确识别后,点击Target->Erase Chip,完成芯片擦除。
在这里插入图片描述
重新用MDK查看STLINK是否连接板子,没问题了!

  • 当然,还有一种比较不正常的情况,就是一切配置都是正确的,STM32 ST-LINK
    Utility也能链接和擦写,但下载几次后莫名的就报错下载不了了,我的经验是重启电脑。解决!

2.STlink下载后不自动运行,需要复位后才能运行

一般大家都会在软件配置中选择Reset and Run
在这里插入图片描述
但有时会发现不起作用,那是因为在配置的Pack页中,debug description中勾选了enable,取消选择后才能生效。
在这里插入图片描述

3.STM常用的固件烧录方式

常用的烧录方式有ICP、IAP、ISP三种方式。

在这里插入图片描述

  • ICP【In circuit programming】

即在电路编程或在线编程,一般是指利用调试器通过调试接口将程序代码写进芯片存储器的过程。调试器可以是ST官方的STLINK或其它公司的产品,比如JLINK,ULink等。 这里的调试端口可以是SWD或JTAG接口。针对ICP编程方式,ST官方有提供相应的软件工具,比如STLINK_Utility,keil和STM32cubeIDE也集成了烧录工具,至于其它公司的调试器,也有配套的软件工具。
在使用STLINK时,在SWD模式下,只需要4根接线,分别为VCC、GND、SWCLK、SWDIO,但建议不连接VCC,板子单独供电,以免因供电不足出错;在JTAG模式下,JTMS、JTCK、JTDI、JTDO、JNTRST五个引脚,板卡必须单独供电。

  • IAP【In application programming】

即在应用编程。一般是指芯片里已经存在具有升级更新功能的代码在里面了,用户基于该部分功能代码再将另外的程序代码写进芯片存储器的过程。也就是说芯片里平常有两套代码,一套用于实现代码的更新升级,往往称之为用户引导代码或启动代码。另外一套就是芯片平常运行的功能代码,我们称之为用户应用代码。

  • ISP【In system programming】

即在系统编程。我们可以把该模式看做一种特殊的IAP模式,只是片内的启动代码是由芯片厂家这个特定用户出厂时写好提供的。一般来讲该段代码位于特定存储位置、用户不可更改。使用ISP方式编程的话,可以选择内嵌系统启动代码认可的通信接口,比如USART,I2C,SPI,CAN,USB等,借助于芯片厂家或第三方提供的软件工具来实现。
具体到STM32系列芯片,软件工具可以使用ST官方提供的Stm32CubeProgrammer或IDE。对于STM32芯片的ISP方式烧录编程,往往需要对硬件BOOT脚做合适的电平设置,以及对选项字进行正确配置,确保芯片从系统存储区启动、运行。另外,烧录完毕后,记得将相关BOOT脚电平进行调整,以保证下次芯片启动后运行在正确的程序空间,一般是指调整回芯片主程序区。
在这里插入图片描述
以串口烧录ISP为例,首先,计算机串口连接单片机的U1_RX、U1_TX和GND,设置Boot0接VCC,Boot1接GND,需要在烧写软件中选择 DTR的低电平复位,RTS高电平进bootloader,按复位按键,进行下载;下载完成后,Boot0接GND,Boot1接任意,按一次复位开始运行。

4.运行或调试时出现提示 break at address “0x1ffff020” with no debug information available,or outside of program code.

或者是No source available for “_end() at 0x200001e0” 等问题
在这里插入图片描述

首先,请检查自己的电路连接,是否存在ST-Link供电和其他供电同时供电的情况,如果是,请只保留一个供电。
其次,查看启动模式选择引脚BOOT0和BOOT1是否配置正确。
BOOT0 = 0时,从主flash空间启动用户程序,这是正常的启动模式;
BOOT0 = 1,BOOT1 = 0时,从系统存储器启动,当程序出现严重错误导致无法下载程序时,可尝试该启动方式;
BOOT0 = 1,BOOT1 = 1时,从内部SRAM启动,多用于调试。
如果上述方式无法解决,请重新创建工程,重新配置。极大的可能就是工程配置参数出现异常导致的。

5.生成独立的初始化c文件

如果希望生成独立的初始化文件,可在下列配置中勾选选项。
在这里插入图片描述

----------------------------------------------------------------------------

*编程中的常见问题

1.外部中断(EXTI)

先来说明一下中断和事件的理解:
事件分为可见和不可见,可见就是我们可以通过寄存器查询到其状态值,不可见就是没有查询的接口,我们无法获知。绝大多数的事件都是不可见的,但多数与中断相关联,我们可以通过中断来使用相应的事件。事件可以触发中断,也可以触发其他事件。EXTI可以捕获外部出入线电平变化等事件,还可以生成EXTI中断等中断请求。
中断会产生中断请求,并执行对应的中断处理程序.
而事件则是向其它模块发送触发信号,对于其它模块如何处理这个信号,则由模块自己来决定.
在这里插入图片描述
上图是STM芯片的外部中断事件线,可以看出,A-G端口的相同位,也就是相同编号的引脚,共用外部中断事件线,所以在引脚配置时,不能将不同端口的相同编号的引脚同时配置为外部中断。

2.使用HAL库编程,在main函数中必须首先调用HAL_Init函数,初始化HAL库

主要内容包括FLASH预读取、配置中断优先级、配置systick产生1ms时基、调用HAL_MspInit()初始化底层硬件。
HAL_MspInit()在"stm32f1xx_hal_msp.c"中进行定义。

3.对各个底层硬件的初始化,通常调用HAL_xxx_Init

该函数再回调HAL_xxx_MspInit函数实现具体初始化内容。

5.使用硬件IIC无输出

网上说是硬件bug,经过以下操作忽然可以用来,记录一下,但没有复现bug。

  1. 将HAL_I2C_MspInit函数中的__HAL_RCC_I2C1_CLK_ENABLE()提前到__HAL_RCC_GPIOB_CLK_ENABLE()前面。
  2. 提高系统时钟频率。后来尝试降回内部时钟的8MHz,bug没有复现,所以可能还会出问题,再研究。

6.PWM1模式下,只有CCR>ARR才能输出占空比100%

7.芯片内部晶振虽好用,但是精度还是和外部晶振有差距的

在秒表点灯试验中就可以明现感受到不准,所以用户时间测量、频率测量时还是要加外部晶振。

### 回答1: 以下是ST-Link V2烧录STM32微控制器的基本步骤: 1. 连接ST-Link V2到电脑的USB口上,并连接STM32微控制器板子与ST-Link V2,确保连接正确。 2. 在Keil中新建一个工程并打开,然后在"Project"选项卡中点击"Options for Target"。 3. 在"Options for Target"窗口中选择"Debug"选项卡,选择"ST-Link"作为调试器,并点击"Settings"按钮。 4. 在"Target Settings"窗口中,选择"Debug"选项卡,并勾选"Connect under reset"选项。在"Flash Download"选项卡中选择"Use:ST-Link",并勾选"Reset and Run"选项。然后点击"OK"保存设置。 5. 在Keil中打开"Flash"选项卡,选择"ST-Link"作为烧录器,并选择要烧录的程序文件。然后点击"Start/Stop Debug Session"按钮,Keil将开始编译并烧录程序到STM32微控制器上。 以上是基本的步骤,具体细节可能因具体情况而异。如果遇到问题,可以参考Keil和ST-Link V2的官方文档或者在论坛上寻求帮助。 ### 回答2: Stlinkv2是一种STM32微控制器烧录工具,具有快速、便捷、可靠的特点。除了搭配官方的ST Link Utility软件使用外,还可以与Keil软件相结合,以便更好地完成STM32微控制器的烧录工作。 1. 安装Keil软件和STM32CubeMX软件 首先,需要安装Keil软件和STM32CubeMX软件,这两个软件均可以从官方网站上下载到。Keil软件是一款强大的微控制器编程软件,STM32CubeMX软件则是一款用于编写STM32微控制器代码的工具。安装完成后,需要将这两个软件连接起来以便更好地完成STM32微控制器的烧录工作。 2. 连接Stlinkv2工具 将Stlinkv2工具通过USB线缆连接到电脑上,此时Stlinkv2工具的LED指示灯应该会亮起。 3. 从STM32CubeMX软件中生成代码 接下来需要从STM32CubeMX软件中生成代码。首先打开STM32CubeMX软件,然后选择需要烧录的芯片型号,在代码生成器中选择Keil软件,并指定代码保存路径。代码生成器会自动生成包含所有初始化设置的代码文件。 4. 在Keil软件中打开代码文件 在Keil软件中打开从STM32CubeMX软件生成的代码文件,对代码进行修改,实现所需的功能。接着需要配置开发板硬件参数,如时钟频率等。 5. 进行烧录 在完成代码的编辑和开发板硬件参数的配置之后,就可以进行烧录工作了。首先需要在Keil软件的“Options for Target”菜单中选择“Utilities”,然后选择“ST-Link”作为烧录工具,并指定芯片型号和其他相关参数。最后单击“Flash”按钮,Keil软件便会开始自动烧录STM32微控制器。 总之,使用Stlinkv2烧录STM32教程需要安装Keil软件和STM32CubeMX软件,将Stlinkv2工具连接到电脑上并进行官方软件的配置。下一步是从STM32CubeMX软件中生成代码,然后在Keil软件中编辑代码和配置硬件参数,最后进行烧录操作。这样一步步完成,就可以成功烧录STM32微控制器,实现所需的功能。 ### 回答3: STLINKV2是一种用于与STM32微控制器通信的调试和编程工具。STLINKV2可以通过USB接口连接到计算机,并通过仿真和调试软件与STM32微控制器通信。本篇文章将介绍如何在Keil软件中使用STLINKV2工具烧录STM32微控制器。 步骤一:首先,需要在Keil软件中创建一个新工程。在创建工程的同时,需要选择STM32微控制器的型号。接着,需要为工程添加相应的.c和.h文件。 步骤二:在Keil软件的工具栏中选择Options for Target,然后在Debug选项卡中选择STLINKV2仿真器。 步骤三:在工具栏中点击Flash按钮,打开Flash的对话框。此时需要选择Memory Map选项卡,并选择具体的Flash片区。接着,在File路径栏中选择需要烧录的文件。注:需要注意,文件版本和烧录器件的型号必须匹配。 步骤四:确认操作后,点击Start按钮,开始烧录操作。本操作通常需要几秒钟或几分钟(具体时长取决于所烧录的文件大小和设备速度等因素)。 步骤五:烧录成功后,Keil软件会提示“successfully programmed 1 bytes”或类似的消息。此时,STM32微控制器已经被成功烧录,并可以正常工作。 总结:本文介绍了如何使用STLINKV2仿真器和Keil软件烧录STM32微控制器。通过此方法,可以使烧录和调试过程变得更加简单和高效。如果您需要进一步了解STM32微控制器的开发,请参考相关的 STM32教程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值