电路基础与调试下载
JTAG/SWD下载
1. 什么是 JTAG/SWD?
- JTAG:全称 Joint Test Action Group,是一种标准调试接口,支持多信号线,常用于复杂的嵌入式系统。
- SWD:全称 Serial Wire Debug,是 ARM 公司推出的简化版 JTAG,只需要两条主要信号线(
SWDIO和SWCLK),适合资源受限的嵌入式设备(如 STM32)。
这两种接口可以通过调试器(如 J-Link、ST-Link)连接开发板,实现对设备的调试和程序下载功能。
2. 调试和下载的区别与结合
下载功能
- 将编译好的程序代码通过 JTAG/SWD 接口直接写入目标设备的 Flash 存储器。
- 下载后,设备可以独立运行新程序。
调试功能
- 通过 JTAG/SWD,开发者可以实时与目标设备交互,进行以下操作:
- 设置断点:程序运行到某行代码暂停,方便检查。
- 单步执行:逐行执行代码,观察变量变化。
- 查看和修改寄存器、内存状态。
- 实时调试异常或逻辑错误。
结合使用
- JTAG/SWD 接口在下载程序时,先将程序写入设备 Flash,随后无需重新连接,可以直接启动调试功能。这种无缝切换极大提高了开发效率。
3. JTAG/SWD 调试下载的优势
- 多功能一体:
- 一个接口同时支持下载和调试功能,减少硬件和软件的切换时间。
- 实时调试:
- 可以直接查看程序运行中的状态,不需要打印日志,效率更高。
- 精确定位问题:
- 支持设置断点和观察变量值,快速定位代码问题。
- 硬件层面支持:
- 可以调试硬件问题,如中断异常、寄存器配置错误等。
4. 示例:STM32 的 JTAG/SWD 下载和调试
硬件配置
- 使用 ST-Link 调试器,将其与 STM32 开发板连接。
- SWCLK:时钟信号线。
- SWDIO:数据信号线。
- GND 和 VCC:电源和地线。
- 确保 STM32 的调试引脚功能未被其他外设占用。
软件配置
- 使用 Keil 或 STM32CubeIDE,设置调试工具为 ST-Link。
- 编写程序后,点击“下载”(Download)按钮将程序写入 Flash。
- 切换到“调试模式”(Debug),开始实时调试程序。
5. 总结
JTAG/SWD 是一种功能强大的接口,结合了程序下载和调试两大功能。它不仅可以快速将程序写入设备,还能实时调试程序运行过程,非常适合嵌入式开发中需要频繁测试和优化的场景。通过 JTAG/SWD,开发者可以快速定位问题并验证解决方案,极大提高开发效率。
当程序被写入嵌入式设备的非易失性存储器(如 Flash)后,即使设备断电,程序也不会丢失。要清除设备上的程序,可以通过以下方式实现:
擦除
1. 使用调试工具清除
方法
通过调试工具(如 J-Link、ST-Link)连接设备,使用开发环境中的“擦除 Flash”功能来清除存储器内容。
步骤
- 连接调试器(例如 ST-Link)到设备。
- 打开开发工具(如 Keil、STM32CubeIDE、IAR 等)。
- 找到“擦除 Flash”或类似选项。
- 执行操作,清空设备 Flash 中的内容。
结果
设备中的程序会被完全擦除,Flash 恢复到初始状态。
2. 写入一个空程序
方法
将一个简单的空程序(通常是一个只执行死循环的代码或占位符代码)写入设备,覆盖原有程序。
示例代码
int main(void)
{
while (1)
{
// 空程序,什么也不做
}
}结果
原有程序被覆盖,设备重新上电后将运行新写入的空程序。
3. 使用设备的引导模式
一些嵌入式设备支持进入特殊的“引导模式”(Boot Mode),可以通过此模式跳过运行现有程序,并提供工具清除 Flash。
方法
- 根据设备手册,设置引导引脚(如 BOOT0/BOOT1)。
- 重启设备进入引导模式。
- 使用专用工具(如 STM32CubeProgrammer)连接设备。
- 擦除或重写 Flash。
结果
程序被清除或覆盖,设备恢复为初始状态。
4. 通过自定义固件清除
方法
在某些应用场景中,可以编写一个程序,主动擦除设备自身的 Flash 内容。嵌入式设备通常提供 Flash 擦写的相关 API。
示例代码
以下代码以 STM32 为例,清除特定区域的 Flash:
#include "stm32f4xx_hal.h"
void Clear_Flash(void)
{
FLASH_EraseInitTypeDef EraseInitStruct;
uint32_t PageError;
HAL_FLASH_Unlock();
EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS;
EraseInitStruct.Sector = FLASH_SECTOR_1; // 指定要擦除的扇区
EraseInitStruct.NbSectors = 1;
EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3;
HAL_FLASHEx_Erase(&EraseInitStruct, &PageError);
HAL_FLASH_Lock();
}注意
使用此方法前需要确保不会影响程序运行的稳定性。
5. 使用特定命令清除
一些嵌入式设备支持特定的清除命令,可以通过串口或其他通信接口发送命令,指示设备擦除自身存储器。
示例
- 对于一些芯片,可以通过
Bootloader提供的串口命令(如Erase Memory)实现 Flash 清空。
6. 重新写入其他程序
如果不需要完整清除原程序,可以直接写入新的程序,覆盖原有内容。这种方式简单快捷,是开发中最常用的方法。
注意事项
- 保护区: 某些设备的 Flash 可能有保护区,必须先解除保护才能擦除。
- 谨慎操作: 擦除或覆盖 Flash 是不可逆的,确认后再执行操作。
- 设备手册: 不同芯片的操作方式可能不同,应参考具体芯片的用户手册或开发文档。
总结
清除设备上写入的程序通常通过调试工具、写入空程序、引导模式等方式实现。在开发中,最常用的方式是通过调试工具执行“擦除 Flash”操作或直接覆盖写入新的程序。
电路基础

突变与连续


不同芯片判定电平0/1有区别,单片机接3.3V
电平协议

STM32 电平:单端,0V 到 3.3V/5V,逻辑 1 为高电平。
RS232 电平:单端,±3V 到 ±15V,逻辑 1 为负电平。
RS485 电平:差分,A-B 电压差 ±0.2V 以上,逻辑 1 为 A>B。
核心区别:STM32 用 TTL 电平,直接输出;RS232/RS485 用不同电平标准,需转换芯片才能与 STM32 通信。
上下拉电阻原理


按键没按下I/O端口为一个很弱的低电平
按下了就被短接覆盖成高电平

梯形表示选择
单片机中除了ARM内核以外的功能都叫做外设

