首页 » 科学 » STM32F7开拓板自己造_板子_法式

STM32F7开拓板自己造_板子_法式

少女玫瑰心 2025-01-12 08:51:03 0

扫一扫用手机浏览

文章目录 [+]

依旧是用Eagle免费版画的图和布线,依旧是两层PCB. 我没有把握这个板子上SDRAM能不能跑通,和8层PCB的F746G-Disco比较,板子的电气性能差太多。
只能等板子做回来往后调试再考验。
电路图便是环绕着STM32, SDRAM为重心的,再加了一片QuadSPI的Flash ROM,剩下便是IO口按功能编组,和我须要的光纤输入输出了。
高速USB口由于ULPI须要的线太难加上去了就舍弃掉,对我来说也不是很须要做到这个板子上。
SDMMC由于利用到PC9这个脚,和I2S_CKIN功能冲突了也被迫丢弃。
以太网、TFT都没考虑,一则暂时没经历搞,二则板子能不能跑起来已经不愿定了,多个喷鼻香炉多个鬼么……

终极的元件摆放是这样子的:为了缩短STM32和SDRAM之间的连线,就把SDRAM放在MCU的背面去了。
走等长的蛇形线?我根本没履历,这个软件也没这个功能,两层板已经布得我头都要炸了。

STM32F7开拓板自己造_板子_法式 STM32F7开拓板自己造_板子_法式 科学

好歹末了还是连通了,只管MCU下面大面积铺地不可能——地被走线割裂得支离破碎。
丝印的设计我这次采取了新的标法:在功能为主的引出I/O口处,比如I2S连接,就在PCB正面标引脚功能,方便插线。
而在PCB背面,同时也把GPIO引脚名也标上,这样在写程序的时候好查,不用再对照线路图或设计文档。

STM32F7开拓板自己造_板子_法式 STM32F7开拓板自己造_板子_法式 科学
(图片来自网络侵删)

PCB图:黄色标出的是3.3V VDD

顶层,赤色,GND加亮,梅赤色的那几小块GND是经由过孔才和其他GND连起来的,没有在顶层直接连到周围一圈GND。

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

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

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

PCB打样回来了,比估量慢了几天。
马马乎乎,丝印做得偏了一点。

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

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

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

焊到这个程度,大略测一下VDD GND没有短路,就准备上电测试了。
拿一块STM32 Nucleo, 把SWD线和一个3.3V连出来,接到新板子上。
用万用表监测一下电流。

电流稳定在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更繁芜了:

呃,先不管了,就放个程序到SRAM里面去运行吧。

就拿以前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亮起来

由于初始化了GPIO,总电流比没有程序的状态减少。
STM32F746的默认时钟是16MHz的HSI,这个电流对照手册属于合理范围。
后面再把启动代码、GNU LD脚本准备一下,正儿八经下程序,然后测试SDRAM.

以上图文内容均是EEWORLD论坛网友:cruelfox 原创,在此感谢。

欢迎微博@EEWORLD

如果你也写过此类原创干货请关注微信"大众号:EEWORLD(电子工程天下)回答“投稿”,也可将你的原创发至:bbs_service@eeworld.com.cn,一经入选,我们将帮你登上头条!

与更多行业内网友进行互换请上岸EEWORLD论坛。

标签:

相关文章

泡泡胶的清除_泡泡_食用油

1. 用冰块冷敷:将冰块放在泡泡胶上,让其冷却,泡泡胶会变得硬一些,更随意马虎去除。2. 用食用油或润滑剂:将食用油或润滑剂涂在泡...

科学 2025-01-14 阅读0 评论0

汽车厂商的芯片构造_芯片_特斯拉

2019年4月23日,特斯拉CEO伊隆·马斯克在发布了最新自动驾驶演示视频,以向市场证明有足够实力深入自动驾驶技能,并推出自研芯片...

科学 2025-01-14 阅读0 评论0

显卡芯片怎么看_显卡芯片_显卡

我们在购买NVIDIA显卡的时候常常能看到显卡的型号上面有GS、GE、GT、GTX之类字母,这些字母代表了什么呢?GS便是普通版,...

科学 2025-01-14 阅读0 评论0