头像-10351

LiuYang

  • 天津市天津市
  • 单片机、嵌入式、RF/无线、测试测量LED/显示、传感器/MEMS
  • 工控电子

个人成就

获得 305 次赞

帮助过251人

STM32F7_TCP.rar

stm32f7-discovery资源丰富、外设众多,除了最显眼的那个触摸屏外,估计关注比较多的就是网络的功能了。网上有一些例程都是http、ftp、telnet的,却没有最基本的tcp的例子(也许我没找到),所以用了一上午的时间来尝试一下tcp的用法。tcpip协议栈很复杂,我不会浪费时间去深究这些东西,因为毕竟做的是应用层的程序,经过mdk的封装,已经完全可以抛开具体的协议部分,只调用接口即可完成通讯。 又提到了mdk的中间件的封装,有了这个东西减少了我们很多很多工作,只需要鼠标指指点点就可以完成众多的配置选项,所以我没有理由去拒绝使用它,除非你反感mdk,那当我没说。 闲话少叙进入正题,首先建立一个stm32f7的工程。建立的过程不再重复,如果真的不会,请参考《【stm32f7】stm32f7开发篇-超详细操作步骤》进行操作。 下面开始勾选各种支持库,也是mdk最大的特色。本来不想再抓图了,无奈靠文字描述估计写这个帖子会累死,而且ickey帖子里有代码是发不出去的,所以还是凑合看图吧。 打开配置界面,f7的配置项比以往的多了很多很多,不过很清晰,一个一个来看。 *********************************************************************************************** 板级支持(board support),专门针对某种板子提供的驱动。为了可以在任意的stm32f7开发板上使用,这项选不选随意。

  • 浏览量:8838
  • 下载量:46
  • 下载:0IC币
  • 上传者:LiuYang
  • 上传时间:2015-10-18

A80.rar

    前几天刚刚把那两个烦人的灯给关上,现在还得打开,没办法,谁让它们是测试gpio最好的办法呢。当然,这次再打开,可不是把fex文件再恢复回去,而是直接操作gpio寄存器,可以人为地控制开关、闪烁,也就是所谓的单片机的 “hello world”了。     要在linux下直接操作寄存器,需要先映射内存,获取寄存器的虚拟地址,然后再根据偏移量得到各个功能的寄存器用于操作。这就是uio驱动的写法。当然,目前我还没有找到比较好的可以响应中断的方法,而通过驱动程序将中断信号传给用户态程序的方法又不那么通用,所以暂时没有实现中断,先不考虑了。     现在习惯了用go语言来写程序了,所以这一次也不例外,用最新的golang 1.5.1来编译,代码简洁效率高,虽然这个gpio体现不出来,呵呵。golang 1.5.1 的环境搭建先不写出来,留着给fireprime了:-)。     下面开始:     首先是内存映射,打开/dev/mem文件,这个文件其实就是整个内存,在其中找到需要控制的地址,也就是映射后的寄存器地址了然后用mmap获得内容。需要注意的是,由于pagesize是4k的,所以所有外设入口点要与上0xfffff000,否则不能成功。     为了方便使用全部的寄存器,防止偷懒造成类封装的功能不全,所以我将gpio分为了两部分,一部分是port,一部分是pin,两个合起来就是gpio了。port部分里主要是对各个寄存器的地址的确定,再加上一些必要的初始化。     另一部分就是pin的实现了。其实这个pin的寄存器已经在port中初始化完成,pin类只是继承下来(所谓的继承),并在这个类里只操作对应pin的寄存器,其他无关寄存器不去理会。     这样分开写还有一个好处就是,如果要对一个组内实现8位、16位、32位的输出,可以直接赋值,而不需要每次更改一个pin的高低电平循环来实现,否则效率就太低了。     来看看调用的代码:     封装完调用就简单多了,这里就是控制这两个led,根据原理图确定ph6和ph17两个口。每次执行时ph6关掉,ph17翻转。     效果如下:     顺便sho

GPIO.rar

    前几天刚刚把那两个烦人的灯给关上,现在还得打开,没办法,谁让它们是测试gpio最好的办法呢。当然,这次再打开,可不是把fex文件再恢复回去,而是直接操作gpio寄存器,可以人为地控制开关、闪烁,也就是所谓的单片机的 “hello world”了。     要在linux下直接操作寄存器,需要先映射内存,获取寄存器的虚拟地址,然后再根据偏移量得到各个功能的寄存器用于操作。这就是uio驱动的写法。当然,目前我还没有找到比较好的可以响应中断的方法,而通过驱动程序将中断信号传给用户态程序的方法又不那么通用,所以暂时没有实现中断,先不考虑了。     现在习惯了用go语言来写程序了,所以这一次也不例外,用最新的golang 1.5.1来编译,代码简洁效率高,虽然这个gpio体现不出来,呵呵。golang 1.5.1 的环境搭建先不写出来,留着给fireprime了:-)。     下面开始:     首先是内存映射,打开/dev/mem文件,这个文件其实就是整个内存,在其中找到需要控制的地址,也就是映射后的寄存器地址了然后用mmap获得内容。需要注意的是,由于pagesize是4k的,所以所有外设入口点要与上0xfffff000,否则不能成功。     为了方便使用全部的寄存器,防止偷懒造成类封装的功能不全,所以我将gpio分为了两部分,一部分是port,一部分是pin,两个合起来就是gpio了。port部分里主要是对各个寄存器的地址的确定,再加上一些必要的初始化。     另一部分就是pin的实现了。其实这个pin的寄存器已经在port中初始化完成,pin类只是继承下来(所谓的继承),并在这个类里只操作对应pin的寄存器,其他无关寄存器不去理会。     这样分开写还有一个好处就是,如果要对一个组内实现8位、16位、32位的输出,可以直接赋值,而不需要每次更改一个pin的高低电平循环来实现,否则效率就太低了。     来看看调用的代码:     封装完调用就简单多了,这里就是控制这两个led,根据原理图确定ph6和ph17两个口。每次执行时ph6关掉,ph17翻转。     效果如下:     顺便sho