ST template WORD

Similar documents
ST template WORD

STM32Cube_FW_F4?RTC??????BUG

ST template WORD

STM32F3??ADC??????????ADC

标题

一、

LwIP TCP/IP STM32Cube

证券期货市场之主要诚信规范

untitled

Chapter #

计算机网络实验说明

C语言的应用.PDF

Microsoft Word - MAN2011A_CH_RTT.doc

EK-STM32F

UDP 8.2 TCP/IP OSI OSI 3 OSI TCP/IP IP TCP/IP TCP/IP Transport Control Protocol TCP User Datagram Protocol UDP TCP TCP/IP IP TCP TCP/IP TC

chap07.key

Microsoft Word - MAN2023A_CH_APPONE.doc

Symantec™ Sygate Enterprise Protection 防护代理安装使用指南

DVK530/531扩展板

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

AL-M200 Series

华恒家庭网关方案

2/14 Buffer I12, /* x=2, buffer = I 1 2 */ Buffer I243, /* x=34, buffer = I 2 43 */ x=56, buffer = I243 Buffer I243I265 code_int(int x, char *buffer)

TCP/IP TCP/IP OSI IP TCP IP IP TCP/IP TCP/IP

Microsoft Word - MSP430 Launchpad 指导书.docx

84

D-link用户手册.doc

C6_ppt.PDF

FPGAs in Next Generation Wireless Networks WPChinese

<4D F736F F D20D0C5CFA2BBAFB7A2D5B9D6D8B5E3D7A8CFEEB9E6BBAE2E646F63>

? 這 全 都 是 市 政 府 提 供 給 我 的 資 料 低 底 盤 公 車 計 畫 96 年 預 算 新 台 幣 4,500 萬 元 97 年 預 算 新 台 幣 1 億 6,500 萬 元 98 年 預 算 新 台 幣 3 億 2,300 萬 元, 共 有 307 台 低 底 盤 公 車,99

关于建立境内违法互联网站黑名单管理制度的通知

文档 1

光 一 科 技 重 大 事 项, 特 停 茂 业 商 业 重 要 事 项 未 公 告, 连 续 停 牌 浙 富 控 股 重 大 事 项, 特 停 键 桥 通 讯 重 大 事 项, 特 停 黑 牛 食 品 重 大 事 项, 特 停

金 圆 股 份 重 大 事 项, 特 停 长 城 影 视 临 时 停 牌 天 兴 仪 表 临 时 停 牌 商 赢 环 球 重 要 事 项 未 公 告, 连 续 停 牌 荣 安 地 产 临 时 停 牌 中 南 文 化

欢迎辞

金 陵 饭 店 中 兴 华 已 报 备 按 照 国 资 委 要 求 定 期 轮 换 天 衡 已 报 备 按 照 国 资 委 要 求 定 期 轮 换 *ST 中 富 中 喜 已 报 备 业 务 约 定 书 到 期 普

日 涨 幅 偏 离 值 达 到 7% 的 前 五 只 证 券 : 温 氏 股 份 ( 代 码 ) 涨 幅 偏 离 值 :11.68% 成 交 量 :1752 万 股 成 交 金 额 : 万 元 机 构 专 用 机 构 专 用

昆 明 机 床 瑞 华 已 报 备 前 任 服 务 年 限 较 长 毕 马 威 华 振 已 报 备 未 与 客 户 未 就 2015 年 审 计 收 费 达 成 一 致 意 见 中 国 核 电 天 健 已 报 备 定

金 利 科 技 临 时 停 牌 凤 凰 光 学 重 要 事 项 未 公 告, 连 续 停 牌 安 源 煤 业 重 要 事 项 未 公 告, 连 续 停 牌 万 泽 股 份 临 时 停 牌 爱 康 科 技 重 大 事 项, 特 停

商 业 城 大 华 标 准 70 万 70 万 驰 宏 锌 锗 瑞 华 标 准 140 万 150 万 亚 星 锚 链 江 苏 公 证 天 业 标 准 80 万 80

辉 丰 股 份 重 大 事 项, 特 停 南 方 轴 承 临 时 停 牌 德 力 股 份 临 时 停 牌 瑞 丰 光 电 临 时 停 牌 联 建 光 电 临 时 停 牌 卡 奴 迪 路 临 时 停 牌

股票代码: 股票简称:*ST新梅 编号:临

东 华 能 源 江 苏 苏 亚 金 诚 已 报 备 因 地 域 及 审 计 时 间 安 排 等 原 因 中 兴 华 已 报 备 客 户 重 新 选 聘 会 计 师 事 务 所 亿 帆 鑫 富 立 信 已 报 备 客

Untitled Document

上市公司股东大会投票信息公告( )

郑 州 煤 电 重 要 事 项 未 公 告, 连 续 停 牌 金 圆 股 份 重 大 事 项, 特 停 永 鼎 股 份 重 要 事 项 未 公 告, 连 续 停 牌 长 城 影 视 临 时 停 牌 天 兴 仪 表 临 时 停 牌

卧 龙 地 产 重 要 事 项 未 公 告, 连 续 停 牌 春 兴 精 工 临 时 停 牌 *ST 沧 大 重 要 事 项 未 公 告, 连 续 停 牌 天 地 源 重 要 事 项 未 公 告, 连 续 停 牌 汇 冠 股 份

概述

一、选择题

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

在Spring中使用Kafka:Producer篇

untitled

ST template WORD

untitled

HD ( ) 18 HD ( ) 18 PC 19 PC 19 PC 20 Leica MC170 HD Leica MC190 HD 22 Leica MC170 HD Leica MC190 HD Leica MC170 HD

untitled

第 7 章 下 一 代 网 际 协 议 IPv6 141 足 的 措 施 只 能 是 权 宜 之 计 (3) 路 由 表 膨 胀 早 期 IPv4 的 地 址 结 构 也 造 成 了 路 由 表 的 容 量 过 大 IPv4 地 址 早 期 为 网 络 号 + 主 机 号 结 构, 后 来 引 入

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

今天 年春季号 总 92 期

*

( ) / / / / / / /

(Microsoft Word - 8\244T\244\362\277\337\272]\244W\265L\246W.doc)

Microsoft Word - 專家本色 doc


但, 你 应 该 听 过 我 们 走 在 大 路 上 这 首 歌, 或 许 还 知 道 革 命 人 永 远 是 年 轻 那 支 歌 ; 并 且, 几 乎 可 以 肯 定, 你 在 戴 红 领 巾 的 那 阵, 必 然 唱 过 牛 儿 还 在 山 坡 吃 草, 放 牛 的 却 不 知 道 哪 儿 去

2 临 终 助 念 答 问 序 临 终 关 怀, 由 佛 门 净 宗 古 来 祖 师 大 德 提 倡 助 念 往 生, 现 今 已 渐 为 社 会 大 众 所 重 视, 在 台 湾, 台 大 长 庚 等 各 大 医 院, 也 都 设 有 助 念 室 ; 大 陆 上 许 多 道 场, 也 有 专 为

校园之星

<4D F736F F F696E74202D FA8BEA861B8EAB7BDBEE3A658BB50C0B3A5CE28B773A6CBA5AB29>

之 原 則 及 國 防 部 訂 頒 國 軍 列 管 國 有 不 動 產 提 供 非 軍 方 單 位 使 用 處 理 原 則 規 定 不 符, 仍 應 以 出 租 方 式 辦 理 惟 可 就 偏 遠 地 區 提 供 官 兵 金 融 水 電 服 務 使 用 部 分, 研 議 降 低 租 金 標 準, 報

chineseall

釋禪波羅蜜次第法門

证券代码: 证券简称:锦江股份 公告编号:【】

1700 装 卸 搬 运 7645 装 卸 搬 运 服 务 2100 建 筑 7410 工 程 服 务 11% 装 卸 搬 运 服 务, 是 指 使 用 装 卸 搬 运 工 具 或 者 人 力 畜 力 将 货 物 在 运 输 工 具 之 间 装 卸 现 场 之 间 或 者 运 输 工 具 与 装 卸

前 言 教 育 无 小 事, 它 成 就 着 学 生 的 未 来 作 为 教 师, 他 们 无 时 无 刻 不 在 关 注 着 学 生 的 成 长 学 生 的 未 来 学 生 就 像 一 朵 含 苞 待 放 的 花 朵, 需 要 老 师 们 的 细 心 呵 护, 给 学 生 需 要 的 东 西, 而

《盗墓笔记》 南派三叔/著

<CFFBB7D1D5DFD0D0CEAAD1A72E6D7073>

独立学院建设与发展


Microsoft Word - 澎湖田調報告-宏達組9804.doc


平 凡 足 迹 李 本 川 作 者 为 中 国 科 学 院 海 洋 研 究 所 研 究 员,1935 年 生, 山 东 荣 成 人 我 今 年 63 岁 了 大 前 年 丈 夫 和 儿 子 在 一 个 月 内 先 后 离 开 了 人 世, 女 儿 又 已 出 嫁, 现 在 是 孑 然 一 身 我 是

ARM Cortex-M3 (STM32F) STMicroelectronics ( ST) STM32F103 Core: ARM 32-bit Cortex -M3 CPU 72 MHz, 90 DMIPS with 1.25 DMIPS/MHz Single-cycle multiplica

static struct file_operations gpio_ctl_fops={ ioctl: gpio_ctl_ioctl, open : gpio_open, release: gpio_release, ; #defineled1_on() (GPBDAT &= ~0x1) #def

ChinaBI企业会员服务- BI企业

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

MASQUERADE # iptables -t nat -A POSTROUTING -s / o eth0 -j # sysctl net.ipv4.ip_forward=1 # iptables -P FORWARD DROP #

(UTM???U_935_938_955_958_959 V )

<4D F736F F D20C9CFBAA3CAD0BCC6CBE3BBFAB5C8BCB6BFBCCAD4C8FDBCB6BFBCCAD4B4F3B8D95FBDA8D2E9B8E55F5F E646F63>

untitled

路由器基本配置

<4D F736F F D20CDB6D7CAD5DFB1A3BBA4B5E4D0CDB0B8C0FDA3A831322D3234A3A9>

操作指南 10 月 /2015 年 如何配置 SCALANCE W AP 的 DHCP 功能? SCALANCE W DHCP IP 地址 Unrestricted

联想天工800R路由器用户手册 V2.0

中文朗科AirTrackTM T600 迷你无线路由器用户手册.doc

一.NETGEAR VPN防火墙产品介绍

bingdian001.com

<4D F736F F F696E74202D20A1B6CFEEC4BFD2BB20B3F5CAB6BCC6CBE3BBFACDF8C2E7A1B7C8CECEF1C8FD20CAECCFA A1A24950D0ADD2E9BACD4950B5D8D6B72E707074>

Transcription:

从零开始使用 CubeMX 创建以太网工程 前言 在前面一篇文章中, 介绍了如何使用 CubeMX 来建立一个简单的 TCPEchoserver 工程 但是在新建 CubeMX 项目时, 是通过直接选择 ST 的开发板的方式实现的 对于大多数实际的开发场景, 可能并不是在 ST 的开发板上进行的, 所以在这篇文章中, 我将介绍如何从零开始建立一个以太网工程 今年 ST 推出的 Nucleo-144 板子上集成了以太网接口, 所以在本文中, 将以 STM32F746-Nucelo 板为例, 通过 CubeMXv4.18 来新建一个 TCPEchoserver 的程序 用 CubeMX 建立基于 STM32F746-Nucleo 的工程 用 CubeMX 进行初始化配置 这回我们直接选择 STM32F746-Nucleo 板上对应的芯片 STM32F746ZGT6U, 而不是选择 STM32F746-Nucleo 板 1. 新建一个 Project, 在向导中选择 STM32F746ZGT6U 这个时候我们看到的还是一个空的工程 如下图 : 2. 外设使能, 引脚配置 2.1 以太网外设引脚配置

Nucleo-144 板上用的 PHY LAN8742A,RMII 接口 在 Cubemx 中使能 ETH 外设, 选择 RMII 接口 Cubemx 会自动配置对 应的以太网接口 如下图 : STM32 的很多引脚都有复用功能, 同一个功能也可以 remap 到不同的引脚 所以这里要记得将 CubeMX 自动配置的引脚和实际电路中使用的引脚进行对比, 保证是一致的 从 UM1974 中可以找到 Nucleo-144 板上以太网引脚分配表 对比这张表格和 CubeMX 的默认配置, 会发现 PB11,PB12 引脚在 STM32F746-Nucleo 板中没有用做以太网的接口, 而是用作其他用途了 STM32F746-Nucleo 上的引脚分配 : CubeMX 的默认分配 : 在 Cubemx 中修改引脚配置 :

修改方法见下图, 用同样的方法配置 PG11 和 PG13 配置 PG11 和 PG13 后, 对应 PB11 和 PB12 会自动清除之前的配置, 以免冲突 输入要配置的引脚, 回车找到 对应引脚的位置 ( 闪烁提示 ) 左键点击, 选择要配置的 功能 (ETH_TX_EN) 到现在位置, 已经将所有的 GPIO 口都配置好了 在 Configuration 页面中, 还可以看到所有配置的 GPIO 并可以做进一步的配置, 这里就先用默认的设置 2.2 使能 LwIP 协议栈 在这个工程内, 我们会用到 LwIP 协议栈, 所以还需要在这一页的 Middlewares 部分将 LWIP 勾选上 之后就可以在 Configuration 页面对 LWIP 协议栈进行配置了

3. 时钟配置 接下来进行时钟配置 CubeMX 默认系统时钟 16MHz, 但以太网外设需要至少 25MHz 的系统时钟, 所以这里会看到 Clock Configuration 页面显示 X 打开 Clock Configuration 页面会自动跳出一个提示框, 可以选择让 CubeMX 来帮你自动调整时钟配置, 也可以自己手动进行 调整 这里, 我选择让 CubeMX 自动配置,CubeMX 会自动将时钟配成 216MHz 4. 配置以太网参数 1 2 在 Parameter Settings 页面, 可以配置 MAC 地址,PHY 的地址, 是否进行自动协商等 这里, 我们设置了 MAC 地址为本地地址 02 :00 :0 :00 :00 :00 LAN8742a 的 PHY 地址由上电时 PHYAD0 的状态决定 根据 STM32F746-Nucleo 板的原理图, 设置 PHY 地址为 0

接收数据的模式有轮询和中断两种方式, 中断方式需要和操作系统一起使用, 这里我们没有使用任何操作系统, 所以在 RX Mode 这一项只能选择 Polling Mode 最后一项是 TX IP Header Checksum Computation,STM32 的 MAC 控制器可以在发送数据时自动添加 IP 数据报的 checksum, 如果需要这项功能, 就将这一项设置为 By hardware 在 Advanced Parameters 页, 可以根据所用的 PHY 修改寄存器的地址和一些 MASK 的设置 因为 STM32F746 的两款开发板上用的都是 PHY LAN8742A, 所以 CubeMX 中默认的配置是以 LAN8742A 为例进行设置的 所以这里, 我们不需要做任何修改就可以直接用 但如果是其他的 PHY, 可以在 PHY 这一项选择 user PHY, 然后根据所用 PHY 的数据手册, 配置下面的参数, 对于部分无法通过 CubeMX 进行配置的参数, 需要手动的修改代码 将有冲突的地方删除, 或者添加某个功能 Advanced Parameters 页分为三个部分 : External PHY Configuration 复位延时, 读 / 写超时的参数设置 Common :External PHY Configuration PHY 的基础寄存器配置, 这部分寄存器对于大部分 PHY 都是相同或类似的 Extended :External PHY Configuration PHY 的扩展寄存器配置, 这部分对于每个 PHY 都是不一样的 如果是使用非 CubeMX 默认的 PHY, 这部分内容需要特别注意 4. 修改 LWIP 的参数 配置好以太网的参数后, 点击 OK, 回到 CubeMX 的配置界面 选择 LWIP 继续进行参数配置

首先是 GeneralSettings 页面, 在这里我们可以看到 LWIP 的版本号 配置 IP 地址信息, 可以选择通过 DHCP 的方式动态分配 IP, 也可以分配一个静态的 IP 地址 这里, 我们选择配置静态的 IP 地址 192.168.0.10, 子网掩码 255.255.255.0, 网关 192.168.0.1 ICMP 协议打开, 因为我们用的是 TCP 协议, 所以把 UDP 协议关掉 不用担心不知道每项参数是做什么用的, 选择每一项参数后都会在窗口的底部显示该项参数的解释 在 Key Options 这一页里, 有更多的参数可以配置 关于接收 / 发送内存的配置也是在这里 选择右上方的 Show Advanced Parameters 后, 还有更多的参数配置项 这里, 我们也可以不做修改, 使用默认值 CubeMX 中每个参数项的名称和代码中 的名称相同, 这样也方便了在代码中进行查找

到此为止, 我们在 CubeMX 中需要做的配置就全部完成了 选择 Project >Generate Code, 生成初始的工程 添加用户代码 用 IAR 打开前面已经生成好的工程 我们还需要两步就可以完成一个简单的 TCP EchoServer 程序了 1. 新建 tcp_echoserver.c 文件, 在 tcp_echoserver.c 里要做下面这几件事情 : 1) 新建一个 tcp_echoserver_pcb( 调用 tcp_new 函数 ); 2) 将新建的 tcp_echoserver_pcb 与要监听的端口绑定 ( 调用 tcp_bind 函数 ) 3) 转成监听状态 ( 调用 tcp_listen 函数 ) 4) 注册回调函数 tcp_echoserver_accept, 当有新连接建立后会调用该函数 ( 调用 tcp_accept 函数 ) 5) 注册回调函数 tcp_echoserver_recv, 当该连接接收到数据后会调用该函数 ( 调用 tcp_recv 函数 ) 6) 完成 tcp_echoserver_recv 函数, 在该函数内, 将收到的数据再发出去

需要注意, 本文的目的是示例如何用 CubeMX 建立一个简单的 TCP EchoServer 程序, 所以考虑的都是最基本简单的情况 比如, 在回发数据部分, 我们假设 Client 发来的数据都在一个 Pbuf 的大小以内 完成 tcp_echoserver.c 后, 将其加入到工程项目中 #include "stats.h" #include "tcp.h" void tcp_echoserver_init(void); static err_t tcp_echoserver_accept(void *arg, struct tcp_pcb *newpcb,err_t err); static err_t tcp_echoserver_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p,err_t err); static struct tcp_pcb *tcp_echoserver_pcb; void tcp_echoserver_init(void) err_t err; tcp_echoserver_pcb = tcp_new(); if(tcp_echoserver_pcb!=null) err = tcp_bind(tcp_echoserver_pcb,ip_addr_any,7); if(err == ERR_OK) tcp_echoserver_pcb = tcp_listen(tcp_echoserver_pcb); tcp_accept(tcp_echoserver_pcb,tcp_echoserver_accept); else memp_free(memp_tcp_pcb, tcp_echoserver_pcb); static err_t tcp_echoserver_accept(void *arg, struct tcp_pcb *newpcb,err_t err) /* initialize lwip tcp_recv callback function for newpcb */ tcp_recv(newpcb, tcp_echoserver_recv); return ERR_OK; static err_t tcp_echoserver_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p,err_t err) tcp_write(tpcb,p->payload,p->len,1); pbuf_free(p);

return ERR_OK; 2. 在 main 函数中添加 tcp_echoserver_init(), 在 while(1) 中添加 MX_LWIP_Process() 查询接收数据 记得要将代码加 在 /*USER CODE BEGIN*/ 和 /*USER CODE END*/ 之间, 这样才不会在下次用 CubeMX 生成代码时被覆盖掉 extern void tcp_echoserver_init(void); int main(void) MX_LWIP_Init(); /* USER CODE BEGIN 2 */ tcp_echoserver_init(); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ MX_LWIP_Process(); /* USER CODE END 3 */ 一个简单的 TCP Echoserver 程序就完成了 测试结果 我们来看一看 ping 测试和 TCP 测试工具的结果 1. 通过电脑 (192.168.0.11)ping STM32F746-Nucleo 板 (192.168.0.10)

2. 通过 TCP 测试工具模拟客户端, 向 STM32F746-Nucleo 板发一串数据 测试结果说明我们刚刚建立的 TCP EchoServer 程序已经能正常工作了

重要通知 - 请仔细阅读 意法半导体公司及其子公司 ( ST ) 保留随时对 ST 产品和 / 或本文档进行变更 更正 增强 修改和改进的权利, 恕不另行通知 买方在订货之前应获取关于 ST 产品的最新信息 ST 产品的销售依照订单确认时的相关 ST 销售条款 买方自行负责对 ST 产品的选择和使用, ST 概不承担与应用协助或买方产品设计相关的任何责任 ST 不对任何知识产权进行任何明示或默示的授权或许可 转售的 ST 产品如有不同于此处提供的信息的规定, 将导致 ST 针对该产品授予的任何保证失效 ST 和 ST 徽标是 ST 的商标 所有其他产品或服务名称均为其各自所有者的财产 本文档中的信息取代本文档所有早期版本中提供的信息 2015 STMicroelectronics - 保留所有权利