STM32F7开发板自己造 stm32f407开发板
lipiwang 2024-10-16 13:09 10 浏览 0 评论
去年就想自己造个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都没考虑,一则暂时没经历搞,二则板子能不能跑起来已经不确定了,多个香炉多个鬼么……
最终的元件摆放是这样子的:为了缩短STM32和SDRAM之间的连线,就把SDRAM放在MCU的背面去了。走等长的蛇形线?我根本没经验,这个软件也没这个功能,两层板已经布得我头都要炸了。
好歹最后还是连通了,尽管MCU下面大面积铺地不可能——地被走线割裂得支离破碎。丝印的设计我这次采用了新的标法:在功能为主的引出I/O口处,比如I2S连接,就在PCB正面标引脚功能,方便插线。而在PCB背面,同时也把GPIO引脚名也标上,这样在写程序的时候好查,不用再对照线路图或设计文档。
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论坛。
相关推荐
- 前端入门——css 网格轨道详细介绍
-
上篇前端入门——cssGrid网格基础知识整体大概介绍了cssgrid的基本概念及使用方法,本文将介绍创建网格容器时会发生什么?以及在网格容器上使用行、列属性如何定位元素。在本文中,将介绍:...
- Islands Architecture(孤岛架构)在携程新版首页的实践
-
一、项目背景2022,携程PC版首页终于迎来了首次改版,完成了用户体验与技术栈的全面升级。作为与用户连接的重要入口,旧版PC首页已经陪伴携程走过了22年,承担着重要使命的同时,也遇到了很多问题:维护/...
- HTML中script标签中的那些属性
-
HTML中的<script>标签详解在HTML中,<script>标签用于包含或引用JavaScript代码,是前端开发中不可或缺的一部分。通过合理使用<scrip...
- CSS 中各种居中你真的玩明白了么
-
页面布局中最常见的需求就是元素或者文字居中了,但是根据场景的不同,居中也有简单到复杂各种不同的实现方式,本篇就带大家一起了解下,各种场景下,该如何使用CSS实现居中前言页面布局中最常见的需求就是元...
- CSS样式更改——列表、表格和轮廓
-
上篇文章主要介绍了CSS样式更改篇中的字体设置Font&边框Border设置,这篇文章分享列表、表格和轮廓,一起来看看吧。1.列表List1).列表的类型<ulstyle='list-...
- 一文吃透 CSS Flex 布局
-
原文链接:一文吃透CSSFlex布局教学游戏这里有两个小游戏,可用来练习flex布局。塔防游戏送小青蛙回家Flexbox概述Flexbox布局也叫Flex布局,弹性盒子布局。它决定了...
- css实现多行文本的展开收起
-
背景在我们写需求时可能会遇到类似于这样的多行文本展开与收起的场景:那么,如何通过纯css实现这样的效果呢?实现的难点(1)位于多行文本右下角的展开收起按钮。(2)展开和收起两种状态的切换。(3)文本...
- css 垂直居中的几种实现方式
-
前言设计是带有主观色彩的,同样网页设计中的css一样让人摸不头脑。网上列举的实现方式一大把,或许在这里你都看到过,但既然来到这里我希望这篇能让你看有所收获,毕竟这也是前端面试的基础。实现方式备注:...
- WordPress固定链接设置
-
WordPress设置里的最后一项就是固定链接设置,固定链接设置是决定WordPress文章及静态页面URL的重要步骤,从站点的SEO角度来讲也是。固定链接设置决定网站URL,当页面数少的时候,可以一...
- 面试发愁!吃透 20 道 CSS 核心题,大厂 Offer 轻松拿
-
前端小伙伴们,是不是一想到面试里的CSS布局题就发愁?写代码时布局总是对不齐,面试官追问兼容性就卡壳,想跳槽却总被“多列等高”“响应式布局”这些问题难住——别担心!从今天起,咱们每天拆解一...
- 3种CSS清除浮动的方法
-
今天这篇文章给大家介绍3种CSS清除浮动的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。首先,这里就不讲为什么我们要清楚浮动,反正不清除浮动事多多。下面我就讲3种常用清除浮动的...
- 2025 年 CSS 终于要支持强大的自定义函数了?
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!1.什么是CSS自定义属性CSS自...
- css3属性(transform)的一个css3动画小应用
-
闲言碎语不多讲,咱们说说css3的transform属性:先上效果:效果说明:当鼠标移到a标签的时候,从右上角滑出二维码。实现方法:HTML代码如下:需要说明的一点是,a链接的跳转需要用javasc...
- CSS基础知识(七)CSS背景
-
一、CSS背景属性1.背景颜色(background-color)属性值:transparent(透明的)或color(颜色)2.背景图片(background-image)属性值:none(没有)...
- CSS 水平居中方式二
-
<divid="parent"><!--定义子级元素--><divid="child">居中布局</div>...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- maven镜像 (69)
- undefined reference to (60)
- zip格式 (63)
- oracle over (62)
- date_format函数用法 (67)
- 在线代理服务器 (60)
- shell 字符串比较 (74)
- x509证书 (61)
- localhost (65)
- java.awt.headless (66)
- syn_sent (64)
- settings.xml (59)
- 弹出窗口 (56)
- applicationcontextaware (72)
- my.cnf (73)
- httpsession (62)
- pkcs7 (62)
- session cookie (63)
- java 生成uuid (58)
- could not initialize class (58)
- beanpropertyrowmapper (58)
- word空格下划线不显示 (73)
- jar文件 (60)
- jsp内置对象 (58)
- makefile编写规则 (58)