本帖最后由 丿灬幸灬 于 2018-12-31 23:06 编辑
ST - Link具有强大的MCU、漂亮的外壳和连接器,可用于许多项目。
描述
众所周知的ST - Link克隆是围绕一个STM32 MCU构建的,它们带有USB A接口,还有10个外露引脚。非常适合进行用途改造!
STM23F101CBT6是ARM Cortex - M3核微控制器,具有128KB闪存、16KB SRAM以及大量计时器、总线和GPIOs。
由于外部只有10个引脚,所以重新调整用途的选择并不是无止境的,但对于很多项目来说,这可能是一个很好的起点。
释放更多引脚
如果你需要更多的引脚,并且对焊接有信心,小的改动可以带来一些额外的好处。
如果将电阻R8替换为0Ω电阻或焊料桥,则MCU引脚43 ( PB7 )和MCU引脚46 ( PB9 )均与连接器引脚5 ( SWIM )相连。如果你不需要R8旁边680Ω的上拉电阻R10,这可能也是一个好主意。
通过这种简单的焊接操作,如果你设法从外部整理I2C总线上拉,你现在可以在引脚42(TX)和43(RX)上使用USART1,甚至在引脚42 ( SCL )和43 ( SCA )上使用I2C1。
设计
在你重新编程ST - Link之前,它必须被“解锁”。解锁它的方式是使用OpenOCD。
你还需要第二个ST - Link或其他SWD下载器和一些跳线。
ST - Link在PCB上有编程连接口。你可以打开盖子来接触它们,盖子没有粘在一起,但是你可以发现可以抽开。
PCB应该看起来像注释图片,有些ST - Link的引脚不同,但是用万用表测量引脚非常容易。
SWDIO连接应该连接到引脚34 (引脚编号从MCU上的点位置的引脚1开始),SWCLK是引脚37。
接地( GND )可以使用引脚10上的GND引脚进行测试,3.3V引脚也是如此。
没有必要找到GND和3.3V引脚来对stlink进行编程,因为您可以使用接口上的VCC和GND来连接,最好还是测量一下,
以确保SWDIO和SWCLK连接是正确的。
如果你使用引脚10连接地线或3.3V,你应该能够使用逻辑分析仪来抓取SWDIO和SWCLK信号。
解锁
- $ openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c "init" -c "halt" \
- -c "stm32f1x unlock 0" -c "shutdown"
- Open On-Chip Debugger 0.10.0
- Licensed under GNU GPL v2
- For bug reports, read
- http://openocd.org/doc/doxygen/bugs.html
- Info : auto-selecting first available session transport "hla_swd". To override use 'transport select '.
- Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
- adapter speed: 1000 kHz
- adapter_nsrst_delay: 100
- none separate
- Info : Unable to match requested speed 1000 kHz, using 950 kHz
- Info : Unable to match requested speed 1000 kHz, using 950 kHz
- Info : clock speed 950 kHz
- Info : STLINK v2 JTAG v28 API v2 SWIM v7 VID 0x0483 PID 0x3748
- Info : using stlink api v2
- Info : Target voltage: 3.249867
- Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
- target halted due to debug-request, current mode: Thread
- xPSR: 0x61000000 pc: 0x08003d5a msp: 0x20004e38
- Info : device id = 0x20036410
- Info : flash size = 128kbytes
- stm32x unlocked.
- INFO: a reset or power cycle is required for the new settings to take effect.
- shutdown command invoked
复制代码
接下来,拔下3.3V电源线来重新启动设备。
您现在可以擦除flash,并向其中写入自己的固件。
- $ openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c "init" -c "halt" \
- -c "flash write_image erase hello 0x8000000" -c "shutdown"
- Open On-Chip Debugger 0.10.0
- Licensed under GNU GPL v2
- For bug reports, read
- http://openocd.org/doc/doxygen/bugs.html
- Info : auto-selecting first available session transport "hla_swd". To override use 'transport select '.
- Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
- adapter speed: 1000 kHz
- adapter_nsrst_delay: 100
- none separate
- Info : Unable to match requested speed 1000 kHz, using 950 kHz
- Info : Unable to match requested speed 1000 kHz, using 950 kHz
- Info : clock speed 950 kHz
- Info : STLINK v2 JTAG v28 API v2 SWIM v7 VID 0x0483 PID 0x3748
- Info : using stlink api v2
- Info : Target voltage: 3.249867
- Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
- auto erase enabled
- Info : device id = 0x20036410
- Info : flash size = 128kbytes
- target halted due to breakpoint, current mode: Thread
- xPSR: 0x61000000 pc: 0x2000003a msp: 0x20004e20
- wrote 21504 bytes from file hello in 1.222309s (17.181 KiB/s)
- shutdown command invoked
复制代码
制作PCB
我从PCB逆向工程开始,并将其记录在KiCad的eeschema中。
结果是见附件
这是我的电脑绘制的的PCB,你的可能有点不同,但是MCU引脚到输出引脚的映射应该是相同的,否则ST Link固件无法工作。
即使没有增加引脚,也有5个GPIOs可供外部使用。这5个引脚中有2个支持TIM4 _ CH1和TIM4_CH3 )和1个ADC引脚( ADC_IN5 )
|