新闻动态

您的当前位置:主页 > 新闻动态 >

博天堂ag手机版基于STM32单片机对赛马灯的限制

发布时间:2020-02-18文章来源:博天堂ag,博天堂AG手机版,博天堂ag旗舰 点击数:

  首先,GPIO的配置种类有8种。分别为模拟输入、浮空输入,上拉输入、下拉输入、开漏输出、推挽输出、复用开漏输出、复用推挽输出。

  跑马灯实验的功能:LED灯进行有规律闪烁。(下面的LED灯的数量都为2个,所以关于寄存器的配置也将以两组的方式进行讲解)

  首先要知道普通的IO就两种功能一个为输入,一个为输出。然后再以输入和输出细分为以哪种模式输出、以哪种模式输入。要设置IO的模式这时就要使用到寄存器进行设置,STM32的IO端口一般由7个寄存器来进行控制。

  首先,一般一个程序的开始都会从入口main函数开始执行,而一个功能的实现之前都需要做一些准备工作,当然跑马灯也不例外,在程序执行前,IO需要初始化,而初始化要做的就是对程序需要用到的GPIO的寄存器进行配置。然后设定输出设备的初始状态,即跑马灯的初始状态。一般程序在执行前,输出设备都会是处于关闭状态。最后增加延时函数,让LED灯在亮与灭之间有一段时间的状态保留,不然时间过快,人类的视觉根本捕抓它的状态变化。

  下面来讲一下实现跑马灯效果的IO要怎么配置。首先先说一下使用LED来进行跑马功能的话只需要用到RCC-》APB2ENR、GPIOX-》CRL、GPIOX-》ODR三个寄存器(GPIOX中的X表示为GPIO的组别,例如GPIOB表示在GPIO的B组上,因为一般单片机上的GPIO一般都会有很多组的,这样也只是为了区分这些IO罢了)

  这里需要注意的是在配置GPIO前,都需要先使能该GPIO的时钟!(可能有人会问“为什么一定要是使能时钟呢?”答案是:GPIO也是外设的一种,然后外设是需要提供时钟信号工作,以便于设置GPIO的数据传输速度的高速/低速输出,所以有关数据的传输都是在时钟信号的基础上的。51单片的IO口也有时钟,只是为了方便,默认开启的,ST的为了更好的控制功耗,电路上做的可以选择开关时钟,降低功耗。补充网友的答案:“寄存器是基于触发器的,触发器的赋值是一定需要时钟的,而寄存器的时钟是由总线时钟提供的,就是说没有总线时钟的话,你给寄存器值它是不会读入的”)

  然后设置两个LED的GPIO的模式,因为LED是输出设备,所以GPIO将设置成输出模式,其中配置模式要用到的寄存器为配置寄存器CRL和CRH。其中CRH为高位寄存器,CRL为低位寄存器。(有人可能有疑问为什么用的是32位的寄存器为什么还要为两个寄存器来管理呢?难道是32位还不够配置吗?答案是:是的,不够用。配置寄存器对一个GPIO的配置要用4个位来完成。一组GPIO有16个引脚,一个引脚要4位的线位的寄存器来实现,所以就干脆把高八位给一个寄存器,低八位给另外一个寄存器,这就出现了CRL和CRH。也许有人还会有疑问说为什么一定要用4位来对一个引脚的配置呢?答案是肯定的,因为前面说了,对GPIO的配置首先配置为输入模式或者输出模式,然后再对输入、输出配置为哪种输出,哪种输入,是推挽输出呢,还是开漏输入呢,这都是需要至少2个位来进行配置,而且输入、输出模式各有4种模式,共8中,这样要以最少的资源来实现的线个位来实现是最省资源的,所以2*2=4,所以对于1个GPIO的模式的配置至少也就要4位了。)

  接着就是查看LED的GPIO的引脚接在IC哪个引脚上。怎么查看LED的引脚到底接在哪呢?这个要看开发板的原理图,不同的板子来说或者对于不同的商家来说在GPIO的引脚接线上会有不同,以我的开发板的原理图可以发现LED灯的GPIO分别接在了GPIOB的pin5和GPIOE的pin5上,根据电路性质,一般会将LED设置为推挽输出模式(可能这时就会有人问了,为什么就是推挽呢?为什么不是开漏呢?我的理解是:这是有电路性质决定的,推挽顾名思义就是灌电流与拉电流都可以输出,通俗地讲就是输出高低电平。而开漏是一直输出低电平,当你要输出高电平的时候需要加上拉)

  这样就把GPIOB组的pin5设置成了通用推挽模式,前面说了一个引脚需要4个位来配置,查看寄存器数据手册可看到,前面2个位是设置通用推挽模式的,后面2个位是基于这种模式的数据传输速率,在这里我们悬着的是“最大速度50MHz”,而GPIOB-》CRL=3《《20;就是设置数据传输速率为最大速度50MHz,GPIOB-》CRL为设置GPIOB的pin5为通用推挽模式。

  ODR是一个端口输出数据寄存器,也只用了低16位。该寄存器为可读写,从该寄存器读出来的数据可以用于判断当前IO 口的输出状态。而向该寄存器写数据,则可以控制某个 IO 口的输出电平。

  GPIOE-》ODR=1《《5;//设置LED的初始化状态为1(1为到电平,亮灭有其电路决定,我的开发板由于接了上拉,使得低电平才是有效的,即0为LED灯亮,1为LED灯灭)

  第一需要的是点亮LED的语句,在初始化中有提到,设置LED初始化状态即:GPIOB -》ODR = 1 《《 5;//PB.5 输出高

  整个跑马灯的工程就只需这三个文件,就能简单实现跑马的功能,如果你想要延时的时间是规律的,那么你就要去使用定时器了。因为定时器定时的时间是准时的,软件延时第一消耗CPU的资源,然后时间也不够精确,所以一般在对时间要求没有很精确的要求是才会使用软件延时的做法。

  本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

  51单片机PIC单片机AVR单片机ARM单片机嵌入式系统汽车电子消费电子数据处理视频教程电子百科其他技术STM32MSP430单片机资源下载单片机习题与教程

下一篇:最新LED灯

联系我们

地址:深圳市南山区茶光路1063号一本大楼378室
电话:13590357790
传真:0755-83549508
邮箱:tongtongzhaoming@163.com