之二——I/O口初探
时间:10-02
整理:3721RD
点击:
距离上一次发帖已有几天了,今天终于有时间将这几天的成果拿出来分享给大家了,这次针对STM32F412Nucleo板子上现有的资源做了几个小的测试程序,一方面因为这块板子上自带的资源不多,可供演示的有限,另一方面,作为对这块板子的熟悉,以这几个小的程序可以初步的了解一下这块板子的使用。
在说工程代码之前,我先简单介绍一下开发环境的搭建及在搭建过程中遇到的问题和解决的办法,希望能给遇到同样问题的朋友一些帮助。开发STM32类型的芯片一般有两种,一种是直接在寄存器层面进开发,另一种是基于库的开发,前者一般要求开发者对于器件的底层硬件具有相当的熟悉度,一般都是工程师在这方面开发相关的库,当然也有一些能力很高的开发者在这一层面开发自己的库函数,然而对于大多数初学者或是能力还没达到一定水平的人来说,基于库的开发无疑是最好的选择,这一方面节省了许多在底层钻研的时间,另一方面,可以使我们更专注与想法的实现,大大缩短了开发周期,在基于库的开发方面,有基于官方器件库的开发,也有基于HAL库的开发,前者的开发环境的搭建相对比较简单,只需到ST的官网上下载相应的器件库,然后导入到自己使用的集成开发环境就可以了,比如KEIL5,后者开发环境的搭建相对比较麻烦一点,首先要到官网下载ST自己开发的图形化开发工具STM32CubeMx,它是一款图形化软件设置工具,允许使用图形化向导来生成C初始化代码,这样可以减轻开发工作量,时间和费用,然后接着下载安装Java Runtime Environment,即Java运行环境,我用的版本是JRE—8u112,可以到网上下载,然后先安装JRE,再安装STM32CubeMx,安装完这两个软件后,还得再去官网下载相应的HAL库,这用的是STM32Cubef4,下载好后导入到STM32CubeMx中即可,这样这边的就基本好了,最后就是KEIL5这边,现将下载好的器件库导入到KEIL中,然后安装ST—LINK的驱动程序就好了,在这儿要注意一点就是,以前不是用官方板子上集成的ST-LINK下载调试程序的话,在这直接用板子上的ST-LINK可能无法下载,可能是驱动程序不兼容的原因,所以我们如果遇到这种情况,可以找一个相对应的驱动程序重新安装一下,直到可以被识别为止,如下图所示:
在开发环境搭建好以后,我们就可以编写调试自己的代码了,在这儿我先利用官方的例程和自己写的几个小程序简单的测试一下,作为对这块板子上I/O口的初次探索使用,我们先来看一个利用板上三个不同颜色的LED灯实现的流水灯功能的小程序。我们先用KEIL打开这个官方例程,路径为:
打开工程后,我们先来看一下工程的文件结构,如下图所示:
从图上我们可以看出,工程大体分为六个部分,依次是STM32F412-Nucleo的库文件,工程的文件说明,芯片的器件库文件,用户文件及STM32F4的HAL库文件,其中主程序及用户自定义的一些程序文件放在用户文件中,HAL库文件包含我们基于HAL库编写程序时要用到的外设驱动程序,这两个文件使我们经常要用到的,也是比较重要的两个文件,然后我们就来看看具体实现功能的代码:
在主程序中,前边是一些系统时钟初始化和I/O口初始化及配置的函数,我们先略过不看,来直接看一下具体功能的实现函数,为了更明显的看一下功能的实现过程,我将LED2,LED3的实现函数屏蔽掉,只保留LED1的实现函数,然后编译下载到板子上,效果如下:
从图上可以看出,LED1是亮的,实际它是在按一定的频率再闪烁,说明功能实现是没有问题的,下面我们再返回到函数里边看它具体是如何实现的:
在我们跳转到这个函数的定义处时,我们看到他的I/O口赋值使用了异或运算,再看他的函数定义名,直译过来差不多是引脚触发,即他这个函数可能是每一次进入,I/O的电平翻转一下,以实现闪烁的功能,为了验证,我将延时改为了10s,下载后观察现象,发现点亮和熄灭的时间差不多都延长为10s,看来确实是这样实现的。
明白这个函数的功能后,我将剩下的两个LED灯的功能打开,下载到板子上后,流水灯的效果便展现在眼前。
好了,今天暂时就写到这儿,下一个帖子在写一写关于按键和串口的程序,来和大家分享一下。
写的不错。点赞,多多写报告给我们领路啊。
谢谢大家的分享。谢谢。
谢谢大家的分享。谢谢。
支持支持。顶一下。加油。
支持支持。顶一下。加油。
支持支持。顶一下。
顶顶顶顶顶顶顶顶顶顶顶顶顶顶