你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32F7】开发篇 - 详解STM32F7 TCPServer工程【申精】 精华  

[复制链接]
tjcfeng 发布时间:2015-10-21 13:55
本帖最后由 tjcfeng 于 2015-10-21 15:12 编辑

    STM32F7-Discovery资源丰富、外设众多,除了最显眼的那个触摸屏外,估计关注比较多的就是网络的功能了。网上有一些例程都是HTTP、FTP、Telnet的,却没有最基本的TCP的例子(也许我没找到),所以用了一上午的时间来尝试一下TCP的用法。TCPIP协议栈很复杂,我不会浪费时间去深究这些东西,因为毕竟做的是应用层的程序,经过MDK的封装,已经完全可以抛开具体的协议部分,只调用接口即可完成通讯。
    又提到了MDK的中间件的封装,有了这个东西减少了我们很多很多工作,只需要鼠标指指点点就可以完成众多的配置选项,所以我没有理由去拒绝使用它,除非你反感MDK,那当我没说。

    闲话少叙进入正题,首先建立一个STM32F7的工程。建立的过程不再重复,如果真的不会,请参考《 【STM32F7】STM32F7开发篇-超详细操作步骤》进行操作。
    下面开始勾选各种支持库,也是MDK最大的特色。本来不想再抓图了,无奈靠文字描述估计写这个帖子会累死,所以还是凑合看图吧。
    打开配置界面,F7的配置项比以往的多了很多很多,不过很清晰,一个一个来看。

***********************************************************************************************
    板级支持(Board Support),专门针对某种板子提供的驱动。为了可以在任意的STM32F7开发板上使用,这项选不选随意。

1.png
    1.CMSIS部分,操作系统相关,有了系统好办事,而且包括了网络硬件的驱动,所以此项必选。
    CORE是核心部分,不能少
    Keil RTX是操作系统,可以开线程
    Ethernet MAC是MAC驱动
    LAN8742A是STM32F7-Discovery的物理收发器驱动

2.png
    2.STM32F7的硬件层驱动部分,可以选择Classic,也可以用STM32CubeMX。如果选了STM32CubeMX,就要使用这个软件来生成配置代码再放到MDK里。Classic足够了,是MDK自带的。
    其中Startup必选,这个是启动文件
    其他的,如Common、Cortex都需要选上。这个图不全,下面还有PWR、RCC都需要选上。当然多选了没有关系,少选的话这个配置窗体会实时显示依赖关系,依赖项没有选上会用橘黄色标识,提示应该选择。

3.png
    3.最后一部分,网络库的支持。这里就是封装好的网络相关的中间件了,省去了写代码、调试的工作。
    CORE必选,ETH别忘了至少加一个网络接口,TCP、UDP也要选上。即使不用UDP,不选的话编译时会报错。
    在Service中,提供了HTTP、FTP、Telnet等支持包,这里没有用上,所以没选。如果开发相关程序,可以自行选择。


************************************************************************************************
    中间件选择完了,会在工程中添加许多对应的文件。展开工程树,所有带有黄钥匙的文件都是不需要更改的,所以略过不看,只看各种配置文件。
4.png
    1.RTX_Conf_CM.c,操作系统相关的配置。双击该文件后代码在右边显示,但是直接看代码可没那么好看,所以用MDK提供的功能:Configuration Wizard配置精灵就方便多了。
    这里面改动的不多,主要是“RTOS Kernel Timer input clock frequency”,STM32F7是216MHz,改成216000000,216后面6个0,别写错了。
    另外“Defualt Thread stack size”和“Main Thread stack size”要改大一些,400和800。普通小程序无所谓用默认的就行了,但是一旦用了某些协议栈或图形界面之类的,默认的就不够了,如果不改会在运行时进入osError,然后就完蛋了。

5.png
    2.RTE_Device.h,这是STM32F7需要使用的外设的使能和引脚配置。这个工程只操作网络,所以其他的都没有勾选。
    选择之前应该看看数据手册,不要选错了,或者从STM32CubeMX里看也可以,不需要深究,选对即可。


6.png
    3.Net_Config_ETH_0.h,这个就是刚才添加的那个ETH接口了。这个配置就简单多了,都是常用的,也就是地址、网关、DNS什么的,最下面的“Dynmic Host Configuration”是控制自动获取网络还是使用配置项的,随意吧。至于“MAC Address”,有默认值了,但是为了便于在众多的连接中区分,所以我改成了0x1234567890,一会儿就能看到。


7.png
    4.Net_Config.c,最后一个了,也是最简单的一个。“Local Host Name”就是用于显示的主机名。更改后编译烧写到板子中,已经可以正常联网了,因为ARP的功能包括在里面了,跟路由通讯是正常的。打开路由的界面,板子的名字、IP、MAC显示出来,连接正确。


************************************************************************************************
    所有的配置项完成,接下来该写程序了。大部分功能已经完成,代码量相对少了很多,节省了不少时间。


8.png
    系统时钟配置,可以使用各种工具自动生成代码拷过来,自己写的话就麻烦多了,我才不会去写。

9.png
    MPU设置和Cache设置。MPU也就是内存保护单元,设置起始地址、长度、读写权限以及缓存等,然后再打开I-Cache、D-Cache,用于提高性能。

10.png
    程序入口点,这里我开了个主线程,没什么用,习惯罢了。while里要调用net_main函数,用于处理网络的各种事件,具体的执行内容可以参考手册。MDK提供的中间件没有开放源码,所以怎样实现的是看不到的,不过可以看看lwip的源码,大同小异。


11.png
    真正自己的代码来了,就这么一点点,还包括了接口函数在内。
    首先执行的是net_initialize,初始化函数,只要执行一次就行了,这个必须在所有操作前调用一次。
    然后就是Listen了,首先get一个socket,其实就是绑定过程,然后再按照指定的端口监听。监听过程中的事件都在回调函数里处理。
    回调函数,处理Client的连接、断开、数据传输等事件,一个switch解决。
    发送数据,我又创建了一个线程,不过单纯是为了代码好写,可以精确定时、而且方便启动停止,代码量最少,否则还要再去配置SysTick,太麻烦了。
   
    整个代码的作用就是监听端口,当有Client连接进来后,每秒发送一次字符串“abcdern”,没了。

12.png
    看效果,功能实现。没有加上各种容错机制,毕竟只是为了实现功能,不是做产品。

    全文完。发现写帖子的时间和写代码的时间差不多,一天就过去了,我晕。
    最后附上工程文件: STM32F7_TCP.rar (54.26 KB, 下载次数: 231)
收藏 20 评论103 发布时间:2015-10-21 13:55

举报

103个回答
tjcfeng 回答时间:2015-10-21 13:57:42
本帖最后由 tjcfeng 于 2015-10-21 13:58 编辑

好吧,来篇具体的吧,后面有工程的附件下载后编译直接烧到板子上可看到效果,省得有人以为都是没验证的东西。
沐紫 回答时间:2015-10-21 14:11:03
谢谢楼主,大力支持
tjcfeng 回答时间:2015-10-21 14:12:36
沐紫 发表于 2015-10-21 14:11
谢谢楼主,大力支持

感谢感谢
foxglove 回答时间:2015-10-21 14:17:06
STM32F7 TCPServer
moyanming2013 回答时间:2015-10-21 14:50:18
学习。。。
yanlinwei 回答时间:2015-10-21 15:53:23
netlhx 回答时间:2015-10-21 16:36:37
好贴必顶
fyaocn 回答时间:2015-10-21 16:54:50
TCP本身就要精通才好
tjcfeng 回答时间:2015-10-21 16:59:42
本帖最后由 tjcfeng 于 2015-10-21 17:01 编辑
fyaocn 发表于 2015-10-21 16:54
TCP本身就要精通才好

这里是为了演示快速开发,不需要深究TCPIP协议栈。

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版