模仿Arduino Nano 做一个HK32F030M 的紧凑开发板,排针间距和Arduino Nano 相同,整体尺寸略小,适合插在面包板上。兼容HK32F030MF4P6 和0301M,板载CH340N 串口和DS1307 时钟模块。开源工程地址:HK32F030MF4P6 紧凑开发板。
尺寸4.2 X 1.8cm,因为引脚数量更少,本来板子是可以更短一点的,但是没必要。一开始是设计成两层PCB ,工程里有个弃用的两层板,能用,但是感觉地平面惨不忍睹,有些信号线也不得不绕很大一圈,所以之后更新成四层板了,和两层板电路上差别不大,主要更改了几个引脚的顺序和编程接口,然后就是免费打样只能是绿色的。开发板的主要特性:
- 7pin 编程接口:把SWD 和串口放在一起,配合一个转接板,可以直接连到带串口功能的dap link 编程器上;
- CH340N 串口模块:用串口连接电脑有两种方式,一种是用上面的7pin 编程接口连接到编程器,另一种就是通过CH340N 模块连接到USB。两种方式不可同时使用,USB 接口可选择type-c 或micro-b;
- DS1307 时钟模块:HK32F030M 没有RTC 功能,所以外挂一个模块;
- 预分配I2C 引脚:HK32F030M 有很灵活的引脚重映射功能,但是太灵活了也烦人,而且板载DS1307 要连接到I2C 总线,所以就预分配了引脚,板载了上拉电阻,省的以后纠结;
- 预分配串口引脚:同上,固定了TX 和RX 引脚;
- 预分配SPI 引脚:同上,不过SPI 总线上没有连接东西,只是在板子上画了丝印,所以不用预分配的方案也OK;
测试进度:用官方例程测试了板载的LED、编程接口及串口、CH340N 串口,没什么问题,所以供电模块肯定也没问题,DS1307 就默认OK 吧。
HK32F030M 的官方固件库和例程可在这里找:https://bbs.21ic.com/icview-3236132-1-1.html。
复位电路
由于0301M 可以复用NRST 为PA0 引脚,所以为了不降低扩展性,复位电路采用了类似51 单片机的上电复位,NRST 上只接了一个上拉电阻,复位通过给单片机断电来实现。
开发板上电后,PMOS Q1 默认导通,给单片机提供3.3V 供电。当PNP 三极管Q2 基极被拉到低电平,也就是REBOOT 信号有效时,Q1 截止,单片机断电,REBOOT 恢复高电平或高阻态时单片机恢复供电,上电复位。这个电路在连接编程器时可能无法给单片机复位,因为编程器能通过SWD 引脚给单片机供电,加上漏电隔离应该就行了,但是需要至少两个二极管,可能放不下,而且太啰嗦。
7pin 编程接口
设计成7 个针只是因为就需要这么多,恰好不对称,就当是一种防呆设计~ 如上图,引脚定义从上到下依次是:
左 | 右 |
---|---|
SWCLK | RST |
SWDIO | 3.3V |
TXD | GND |
RXD | NC |
其中RST 在这里是连接到上电复位电路的REBOOT,RXD 和TXD 分别连接到单片机的RXD 和TXD,所以编程器的TXD 要连接到这里的RXD 上。把RST 引脚和GND 调换一下或许会更好,因为这样一来去掉串口TXD 、RXD 和RST 后,剩下的四个引脚就是最少所需的编程接口,刚好排成2x2 的正方形,但是既然已经这么画了,就无所谓了吧。
DAP LINK 调试器转接板
就是个10pin 转7pin 的小转接板,用来把某宝上买的DAP LINK 直接连接到这个7 针接口上,省的杜邦线搞半天,实物:
红框里的是转接板,下面长的是某宝上买的DAP LINK。转接板用2x5pin 弯排母连接到DAP LINK,再用2x4pin 直排母连接到7 针接口,想要防呆功能的话,可以手工把2x4pin 排母多出来的1pin 用胶堵住。上面多出来的两个白色插针是+5V 和GND,7 针接口不连接+5V,想从USB 直接取5V 供电的话,就从这两个插针飞线出去。转接板本身很简单,原理图都不用画,其他的各种link 也可以自制个转接板。
引脚功能 - 板载LED
参考原理图,预分配的引脚都用短接符标出来了。板子上一共只有两个LED,一个是电源指示灯,另一个连接到PA2 引脚,也是SPI 的SCK 引脚,和Arduino 的习惯一样。VCAP 可以直接用作PD7,不用配置,但在030M 上,PD7 似乎只能用作普通引脚,不能使用复用功能。板子上通过插针引出了NRST,0301M 上可以配置IOMUX 寄存器把NRST 复用为PA0,据说030M 的有些批次也可以。
所以,加上PD7 和PA0,如果不复用SWDIO 和SWCLK,一共只有16 个IO 引脚,说多不多,某宝零售8 毛钱一片的单片机还要什么自行车。
DS1307 时钟模块和I2C
既然说了是开发板而不是核心板,还是应该尽量集成一两个外设才算名副其实,所以除了串口,又加了这个RTC 模块。I2C 的SCL 和SDA 分别分配到了PB4 和PB5,板子上加了4.7K 上拉到3.3V。
考虑到调试时可能没有5V 电源,所以DS1307 也能用板子上的3.3V 供电,接上肖特基二极管用来在有5V 时自动切换。图上也说了,DS1307 适配的电池是CR2032 之类的锂电池,标准电压3.6V,所以要使用DS1307 的自动充电功能,必须有5V 供电。C15 的目的是短暂维持供电,不一定有用,可以不装或装个普通的0.1uF。图上的RTC-CELL 连接到外置备份电池,板子上有个连接电池的插针,标记为CEL:
CH340N USB 转串口
没什么好说的,只有一个稍微特殊的地方:
就像图上红字说的,0 欧电阻R4 是预留的,默认不装。HK32F030M 没有自带的bootloader,只能用编程器下载程序,如果有兴趣自己整个USB 下载程序的bootloader,接上R4 就可以用RTS# 信号控制单片机重启复位。CH340N 的TXD 上串了二极管,不会给单片机漏电。
供电
也没什么好说的,和Arduino Nano 差不多。板子上带了1117 和662K,分别提供5V 和3.3V 电压,单片机使用3.3V 供电。外部大于6V 的供电通过VIN 引脚输入给1117,5V 的外部供电就直接连到5V 插针上,内部没有任何保护,直接连到662K,然后生成3.3V 给单片机供电。HK32F0301M 有支持5V 供电的型号,要兼容有点麻烦,3.3V 又不是不能用,所以不管了。
焊盘上的过孔
多说一句,我后来很喜欢在把过孔直接放在焊盘边上,如下图:
这个板子还好,如果是更密集的板子,不这么做就没地方打过孔了。听说过焊盘上放过孔可能漏锡导致问题,我是纯手工焊接,焊锡膏加热风,所以无所谓。