社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 3055|回复: 28

[原创] 【2月DIY】STM32F7开发板自己造

  [复制链接]

727

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

爱原创

发表于 2017-2-15 09:50:34 | 显示全部楼层 |阅读模式
本帖最后由 cruelfox 于 2017-2-18 19:47 编辑

  我去年就想自己造个144脚STM32F7+sdram的板子了,针对音频处理算法开发。虽然在任性DIY活动中已经获得了一块强大的F746G-Disco,从功能上差不多是满足了我的需求,但灵活性还是不够。或者说,带的东西过于多了又显得浪费。春节假期间用了几天时间,终于把我自己设计的F7板子设计好了。
  依旧是用Eagle免费版画的图和布线,依旧是两层PCB. 我没有把握这个板子上SDRAM能不能跑通,和8层PCB的F746G-Disco相比,板子的电气性能差太多。只能等板子做回来以后调试再检验。电路图就是围绕着STM32, SDRAM为重心的,再加了一片QuadspI的Flash ROM,剩下就是IO口按功能编组,和我需要的光纤输入输出了。高速USB口因为ULPI需要的线太难加上去了就舍弃掉,对我来说也不是很需要做到这个板子上。SDMMC因为使用到PC9这个脚,和I2S_CKIN功能冲突了也被迫丢弃。以太网、TFT都没考虑,一则暂时没经历搞,二则板子能不能跑起来已经不确定了,多个香炉多个鬼么……
sch.PNG
  最终的元件摆放是这样子的:为了缩短STM32和SDRAM之间的连线,就把SDRAM放在MCU的背面去了。走等长的蛇形线?我根本没经验,这个软件也没这个功能,两层板已经布得我头都要炸了。 layout.PNG
  好歹最后还是连通了,尽管MCU下面大面积铺地不可能——地被走线割裂得支离破碎。丝印的设计我这次采用了新的标法:在功能为主的引出I/O口处,比如I2S连接,就在PCB正面标引脚功能,方便插线。而在PCB背面,同时也把GPIO引脚名也标上,这样在写程序的时候好查,不用再对照线路图或设计文档。

  PCB图:黄色标出的是3.3V VDD
  顶层,红色,GND加亮,梅红色的那几小块GND是经过过孔才和其他GND连起来的,没有在顶层直接连到周围一圈GND。
topgnd.png

  底层,蓝色,GND加亮,浅蓝色的那几小块GND是经过过孔才和其他GND连起来的,没有在底层直接连到周围一圈GND。
botgnd.PNG

  已经投出去制板,等回来焊了调才知道SDRAM究竟在这两层板上能运行得怎样。

==== 分割线 =========

  pcb打样回来了,比预计慢了几天。马马乎乎,丝印做得偏了一点。
top.jpg
bottom.jpg

  请主角出场了:比板子还贵的 STM32F746ZET6
mcu.jpg

  开焊,有一段时间没焊这么多腿的芯片了,手生了……加之是晚上光线不很好,颇费眼神。不过运气不错,没有发生严重的锡粘连现象。先把MCU搞定,其它能省先省。
solder1.jpg

  背后焊一些去耦电容,SDRAM和它的去耦先空着。
decap.jpg

  焊到这个程度,简单测一下VDD GND没有短路,就准备上电测试了。拿一块STM32 Nucleo, 把SWD线和一个3.3V连出来,接到新板子上。用万用表监测一下电流。
test.jpg
电流稳定在10mA左右,应该没有大问题。然后,运行一下STM32 ST-Link Utility, 看SWD是否能找到STM32F746, OK. 下面就可以弄个程序测试运行了——焊个LED点个灯呀。

  我对ST的F0和F4系列已经熟悉了,F7是第一次开发,得先熟悉一下memory map. 结果手册里找不到熟悉的图——主要是想知道不同启动模式下Flash, SRAM是如何映射的到0地址的(在F0, F4下面是BOOT0引脚选择影射Flash还是bootloader),结果发现F7里面不是这么回事,没有这个映射了。在地址0处,是 ITCM-RAM, 而 Flash 有两个地址:0x08000000也就是和F0/F4一样的,但是是从AXIM接口访问;以及0x00200000,从ITCM接口访问。F7的总线比F4更复杂了:
bus.PNG

  呃,先不管了,就放个程序到SRAM里面去运行吧。
prog.PNG
  就拿以前F030的某个测试改来用了,因为Timer6貌似功能是一样的。把头文件、用到的引脚改一下。Makefile也挪用老工程的。编译:
/mnt/e/_make_/arm/stm32f746z/test# make
arm gcc -c -g -O2 -Wall -mcpu=cortex-m7 -mthumb -DSTM32F746xx -I../../ST -I../../CMSIS test.c
arm gcc -nostdlib -mcpu=cortex-m7 -mthumb -T ../STM32F746ZGTx_FLASH.ld test.o gpio_config.o startup_stm32f746xx.o -o test.elf -lc
startup_stm32f746xx.o: In function `LoopFillZerobss':
E:\_make_\arm\stm32f746z\test/startup_stm32f746xx.s:111: undefined reference to `SystemInit'
e:/arm-2014q3/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib/armv7e-m\libc.a(lib_a-init.o): In function `__libc_init_array':
init.c:(.text.__libc_init_array+0x22): undefined reference to `_init'
collect2.exe: error: ld returned 1 exit status

  这错是 ST原始的 startup_xxxx 那个汇编程序里面调用 SystemInit() 没有定义,因为我现在不打算用库,干脆就不管它了。启动脚本可以不用,反正现在还不用中断。于是直接Link:
/mnt/e/_make_/arm/stm32f746z/test# arm ld test.o gpio_config.o -o test.elf -entry=main -Ttext 0 -Tdata 0x20000000
把包含 main() 的目标文件 test.o 和包含 gpio_config() 的目标文件 gpio_config() 组成一个程序,以 main 为入口地址。并且把代码段指定为 0x0, 数据段指定为 0x20000000.  这两个地址都是SRAM.


  然后生成HEX文件
/mnt/e/_make_/arm/stm32f746z/test# arm objcopy -O ihex test.elf test.hex

  现在需要把 HEX 写到 0 地址的SRAM中去,我要用OpenOCD来干:
E:\OpenOCD\share\openocd\scripts>\OpenOCD\bin\openocd -f interface\stlink-v2-1.cfg -f target\stm32f7x.cfg
Open On-Chip debugger 0.9.0 (2015-08-15-12:41)
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 <transport>'.
Info : The selected transport took over low-level target control. The results might differ compared to plain jtag/SWD
adapter speed: 2000 kHz
adapter_nsrst_delay: 100
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : clock speed 1800 kHz
Info : STLINK v2 JTAG v25 API v2 SWIM v14 VID 0x0483 PID 0x374B
Info : using stlink api v2
Info : Target voltage: 3.257482
Info : stm32f7x.cpu: hardware has 8 breakpoints, 4 watchpoints

用telnet 连本机的4444端口:
Open On-Chip Debugger
> halt
target state: halted
target halted due to debug-request, current mode: Handler HardFault
xPSR: 0x41000003 pc: 0x00000036 msp: 0x20000fa8
> load_image f:/test.hex
212 bytes written at address 0x00000000
downloaded 212 bytes in 0.000000s (inf KiB/s)
> reg sp 0x20001000
sp (/32): 0x20001000
> reg pc 0x1
pc (/32): 0x00000001
> resume
>

上面蓝色标出的是输入的命令,第一条是停止CPU的执行,然后载入HEX文件到内存,接着修改 SP 寄存器,设置一个可用的堆栈在SRAM中,再把 PC 改到要执行的程序的地址(我的程序从0开始执行),最后 resume 是恢复程序的执行,就从新的 PC 开始了。LED亮起来
IMG_2574.jpg
  因为初始化了GPIO,总电流比没有程序的状态减少。STM32F746的默认时钟是16MHz的HSI,这个电流对照手册属于合理范围。后面再把启动代码、GNU LD脚本准备一下,正儿八经下程序,然后测试SDRAM.

------------------- 更新 --------------------
sdram.jpg
SDRAM也焊上了,学习了若干知识后,终于可以读写SDRAM了。目前只是在默认的16MHz时钟下操作的,初步验证板子可用,至于高频下性能如何,我将在 "当STM32遇到SDRAM" 这个主题中分享。

此内容由EEWORLD论坛网友cruelfox原创,如需转载或用于商业用途需征得作者同意并注明出处


评分

7

查看全部评分



回复

使用道具 举报

1293

TA的帖子

2

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

爱助人

发表于 2017-2-15 22:34:51 | 显示全部楼层
本帖最后由 freebsder 于 2017-2-15 22:36 编辑

点赞!难得见到一个用eagle的 两层板走这个东西出来确实显功夫。
8.02都出了居然已经归autodesk。
等长蛇线是这个吗?
http://v.youku.com/v_show/id_XMjQ4OTE3MTg2NA==.html

点评

这回两层板跑SDRAM还不知道什么结果呢。 Eagle我一直用的是很老版本的,我偏好用轻量级的软件工具,个人偏好。不好用的地方也暂时忍了。 这个链接看标题是差分线的等长约束,还不是那种8路以上一组线等长的走法。  详情 回复 发表于 2017-2-16 09:22
人已离开,无事别找,找也找不到。


回复

使用道具 举报

727

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

爱原创

 楼主| 发表于 2017-2-15 09:54:28 | 显示全部楼层
占楼,预留


回复

使用道具 举报

597

TA的帖子

1

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-2-15 10:28:19 | 显示全部楼层
DIY精神可嘉


回复

使用道具 举报

915

TA的帖子

2

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2017-2-15 10:43:15 | 显示全部楼层
这个芯片的包装,难道是样片

点评

不是。这是武汉力源的包装盒。  详情 回复 发表于 2017-2-15 11:04


回复

使用道具 举报

1542

TA的帖子

4

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2017-2-15 10:48:01 | 显示全部楼层
F7一片多少钱啊,赞赞赞

点评

这款F746ZE我买的五十多RMB一片. 还买了款F765ZG就一片超过一百了……  详情 回复 发表于 2017-2-15 11:06


回复

使用道具 举报

727

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

爱原创

 楼主| 发表于 2017-2-15 11:04:43 | 显示全部楼层
飞鸿浩劫 发表于 2017-2-15 10:43
这个芯片的包装,难道是样片

不是。这是武汉力源的包装盒。


回复

使用道具 举报

727

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

爱原创

 楼主| 发表于 2017-2-15 11:06:09 | 显示全部楼层
DavidZH 发表于 2017-2-15 10:48
F7一片多少钱啊,赞赞赞

这款F746ZE我买的五十多RMB一片.
还买了款F765ZG就一片超过一百了……


回复

使用道具 举报

27

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2017-2-15 11:23:59 | 显示全部楼层
PCB可以多打几块给战友


回复

使用道具 举报

764

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2017-2-15 12:53:45 来自手机 | 显示全部楼层
厉害


回复

使用道具 举报

29

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-2-15 13:49:31 | 显示全部楼层
厉害了,我的哥


回复

使用道具 举报

2

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2017-2-15 16:03:20 来自手机 | 显示全部楼层
小编,请问PCB版去哪里造?可以告诉我渠道吗?


回复

使用道具 举报

2

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2017-2-15 16:03:31 来自手机 | 显示全部楼层
小编,请问PCB版去哪里造?可以告诉我渠道吗?


回复

使用道具 举报

1万

TA的帖子

15

TA的资源

版主

Rank: 6Rank: 6

发表于 2017-2-15 16:10:08 | 显示全部楼层
eagle画完楼主是转GERBER文件给厂家还是直接给PCB文件呢????

点评

当然是给Gerber咯。 Eagle出Gerber很容易的。  详情 回复 发表于 2017-2-15 17:21
http://shop34182318.taobao.com/


回复

使用道具 举报

727

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

爱原创

 楼主| 发表于 2017-2-15 17:21:10 | 显示全部楼层
ddllxxrr 发表于 2017-2-15 16:10
eagle画完楼主是转GERBER文件给厂家还是直接给PCB文件呢????

当然是给Gerber咯。
Eagle出Gerber很容易的。


回复

使用道具 举报

2832

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2017-2-15 18:42:39 | 显示全部楼层
不错,看后续动作


回复

使用道具 举报

1万

TA的帖子

15

TA的资源

版主

Rank: 6Rank: 6

发表于 2017-2-15 21:21:21 | 显示全部楼层
楼主难道用的是LINUX系统么????怎么ARM命令都得自己键入呢????

点评

现在用的是WinXP, 下面也用了cygwin,所以有类似linux的shell环境。 arm是我自己写的一个小程序,用来简化 arm-none-eabi-gcc,arm-none-eabi-objdump 这样的调用,直接执行arm gcc 以及 arm objdump 就可以了。  详情 回复 发表于 2017-2-15 22:18
http://shop34182318.taobao.com/


回复

使用道具 举报

361

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2017-2-15 21:30:53 | 显示全部楼层
楼主NB,没用IDE,而用GCC。OpenOCD是调试器吗?


回复

使用道具 举报

146

TA的帖子

2

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-2-15 21:41:05 来自手机 | 显示全部楼层
eagle7可以布蛇形等长线了


回复

使用道具 举报

597

TA的帖子

1

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-2-15 21:49:10 | 显示全部楼层
老司机啊,不用ide


回复

使用道具 举报

727

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

爱原创

 楼主| 发表于 2017-2-15 22:18:54 | 显示全部楼层
ddllxxrr 发表于 2017-2-15 21:21
楼主难道用的是LINUX系统么????怎么ARM命令都得自己键入呢????

现在用的是WinXP, 下面也用了cygwin,所以有类似linux的shell环境。
arm是我自己写的一个小程序,用来简化 arm-none-eabi-gcc,arm-none-eabi-objdump 这样的调用,直接执行arm gcc 以及 arm objdump 就可以了。

点评

楼主玩得太高难了。不但画板用免费的软件,编程也用免费的软件。I服了YOU  详情 回复 发表于 2017-2-16 08:10


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-11-19 22:24 , Processed in 0.677042 second(s), 17 queries , Redis On.

快速回复 返回顶部 返回列表