早就听说过ARM的各种牛逼,可是一看那密密麻麻的引脚就退缩了,一直停留在单片机层次上。这次自己画了一块STM32芯片的PCB板,想自己学习一下。
芯片型号:STM32F103C8T6,Cortex-M3系列,支持ISP串口烧写,支持单线调试SWD和JTAG接口。
封装:LQFP48
原理图如下:
设计时考虑以两种方法烧写程序:一、串口接口P4接TTL转USB直接接电脑,用mcuisp软件下载程序;二、SWD接口P5接某宝上购来的jlink ob ARM下载器,用SEGGER J-Link ARM软件或keil下载。
焊接后发现SWD无法下载。
设备管理器中“通用串行总线控制器”下出现J-Link driver标识,J-Link Commander软件能够正常识别芯片,J-Flash软件可以正常执行Target下Connect、Unsecure
chip等软件,但执行Program或Auto(F7)命令时报错:
-connecting....
--connected successfully,
--ERASING affecttd secttor.....
-ERROR:RAM check failed @ADDRESS 0x20000000
在网上查询后,一般认为是以下问题:
1、STM32芯片电源引脚电压不够
2、jlink下载线过长,干扰太大
3、复位脚被拉低
4、SEGGER J-Link ARM软件版本过老
5、焊接问题与接线问题
6、BOOT0和BOOT1设置问题
7、PCB板上电路干扰
J-Link Commander软件能够正常识别芯片能正确识别芯片,说明接线和焊接没有什么问题。jlink ob ARM下载线长不到30cm。SEGGER J-Link ARM软件版本V4.40。BOOT0和BOOT1都接100k接地。
反复尝试确定问题后,检查芯片所有引脚,电源引脚和GND引脚电压正常,正常时NRST引脚电压为2V左右,被拉低,重新检查复位电路,发现复位电容C22 104电压确实为2V左右,网上有人将复位电阻R26调节至1K并调节复位电容C22。
去掉复位电容C22后,发现NRST引脚电压仍为2V左右,然后将复位电阻R2改为470R,发现电压升至3.3V,重新下载程序,发现回复正常,反复下载后,一切正常。