历史上的今天

今天是:2024年09月03日(星期二)

正在发生

2020年09月03日 | stm32中gpio的学习浅谈

发布者:老卫 来源: eefocus关键字:STM32  GPIO 手机看文章 扫描二维码
随时随地手机看文章

在基本入门熟悉了开发环境后,我开始学习stm32中的gpio口用法,学习的方法还是最直观简便的先控制LED灯。然而stm32中点亮led倒没有51单片机那么简便。有过51单片机学习经验的伙伴们,肯定熟悉下图的代码(51中控制led的程序)。

      

如果同样方法写在stm32中肯定是不行的了,首先因为stm32中没有51头文件中那样定义好了P0口可以直接进行总线操作,其次stm32中的gpio口默认是输入模式并且还需要打开相关引脚口的时钟。可能很多人会觉得stm32中官方给的固件库可以直接操作寄存器从而控制gpio口,但是我觉得我这样的初学者还是多了解下底层的方法便于更好的理解。要实现stm32点亮一个led灯(即让gpio口输出一个高电平)一共分三步:


       第一步:通过时钟控制寄存器rcc打开相应gpio口的时钟如下例中的PB0。

       第二步:通过CRL寄存器设置gpio口为推挽输出模式。

       第三步:通过ODR寄存器将相应gpio口输出电平。


所谓单片机中的寄存器,其实就是一些有特殊功能的内存单元,是生产官方配置的。而我们正是通过寄存器来实现单片机的各种控制。下面来讲解下我所用的三种方法,首先是最原始的直接操作内存单元。相应的寄存器内存地址是通过官方手册查找的,代码如下:

      

很明显,虽然第一种方法是非常简短且不需要额外库函数的代码,但是程序的可读性和可移植性都非常差。于是我便采用了第二种使用寄存器映射的方法,所谓寄存器映射也可以理解成就是定义寄存器别名的过程。


第三种也是最后一种便是使用官方所给的固件库了,其实原理大致也就是用宏定义和结构体定义些基地址,然后把寄存器的位操作过程等都写在库函数中封装起来,我们只要操作相应库函数就可以了。为了增加可读性,我把库函数再宏定义了一遍。


上图代码中那个延时函数是为因为还有没有学习中断才这样写,师兄也指出来和我说那是很不好的习惯,因为在等待延时过程中别的任务都无法运行并且时钟的延时精度不高。由于之前我的C语言功底并不很扎实,所以在结构体,枚举,宏定义以及一些强制类型转换的指针操作,我都添加了许多注释来增加印象。以上图文便是我本篇博客的全部内容了,继续保持学习分享更多的博客。

关键字:STM32  GPIO 引用地址:stm32中gpio的学习浅谈

上一篇:STM32学习系列---STM32之GPIO
下一篇:stm32F051系列教程 1.点灯

推荐阅读

    今年上半年努比亚发布了首款电竞游戏手机——红魔,在华硕ROG、黑鲨等友商的衬托下,红魔的外观格外讨人喜欢,RGB灯带、钻石切面等十分炫酷,无奈的是搭载一颗骁龙835芯片,成为其最大的短板,随着一批又一批使用骁龙845处理器的手机上市,红魔显得后劲不足。不过有消息传来,红魔2即将发布,据爆料大神Roland Quandt称,红魔2很快就快发布了,相...
原理:单片机的TXD、RXD是TTL电平,所以你得万变不离其宗的将其它信号转成TTL电平,只有这样给单片机下载程序才有可能成功!其中CH340、PL2303等芯片是直接将USB信号转换为TTL电平或者TTL电平转换为USB信号,而MAX232等芯片是将TTL转换为RS232信号或者将RS232信号转换为TTL.MAX232:外围电路简单,但是占用pcb面积大,不美观 PL2303:水货多不稳定,外围电...
万用表主要分指针式万用表和数字万用表,目前使用指针式的万用表很少,接下来介绍数字万用表的使用。数字万用表是一种最常用的一种测量电流、电压和电阻,的工具。无论是电工,热工,还是制作或维修电子器具的工作人员都,要用它来测量。数字万用表使用范围特别广泛,万用表本身轻便,易携带。受到众多使用者的青睐。测量电压。电压分为直流电压,交流电压...
2021年8月31日,ISO国际标准化组织正式发布了ISO/SAE 21434:Road vehicles-Cybersecurity engineering(道路车辆 信息安全工程)标准,该标准定义了针对所有车载电子系统、车辆部件、车载软件及外部网络的网络信息安全工程设计实践/做法。标准发布 标准主要规定了道路车辆电子电气系统及其组件和接口在概念、开发、生产、运行、维护和销毁阶段工程相...

史海拾趣

问答坊 | AI 解惑

51单片机C语言应用程序设计实例精讲

再发一跟好的 ,51单片机C语言应用程序设计实例精讲 ..........…

查看全部问答∨

这个矩阵按键的程序是不是有问题?

我买的其他开发板的例子程序中 在这个子程序部分: 1.uchar keyscan(void)  //键盘扫描函数,使用行列反转扫描法 2.{ 3. uchar cord_h,cord_l;//行列值中间变量 4. P3=0x0f;            // ...…

查看全部问答∨

单片机如何模拟红外线编码遥控输出

哪位大哥知道,单片机如何模拟红外线遥控编码输出,有4进1出的单片机吗?我是个菜鸟不懂…

查看全部问答∨

送分100分:三极管为什么有放大功能

三极管为什么有放大功能,请从最底层的讲解。…

查看全部问答∨

欧洲公司招客户服务软件工程师,国外培训,北京或山东

客户服务软件工程师, Software Customer Service Engineer Job Description: Responsibilities:   Work within a global R&D team located in Europe and China with work language of English to provide the services as follo ...…

查看全部问答∨

STM32可不可以支持多任务操作呀?

                                 STM32可不可以支持多任务操作呀?在不使用操作系统的情况下。比如一边记下外部脉冲,M3核还可以同时处理实时显示, ...…

查看全部问答∨

求助!!u-boot tftp下载问题!!

移植的u-boot-1.1.6,用tftp命令直接下载内核和文件系统,然后启动都很正常,上图是我自己做的menu菜单,然后下载内核和文件系统都出现了如下提示,下载完后内核启动到一半就死了。 NAND erase: mtdparts variable not set, see \'help mtdparts ...…

查看全部问答∨

求助怎么用g2553产生500HZ正弦波?

有现成的程序当然是最好不过的了!…

查看全部问答∨

传感器

请问有没有人知道什么是 benchmarking sensor principle?  谢谢了!…

查看全部问答∨

多核处理器芯片,如何让一个处理器固定的执行某一段程序,另一个处理器执行其余程序

对于多核处理器芯片,比如arm cortex a9 双核的,如何让一个处理器固定的执行某一段程序,而另一个处理器执行其余的程序 \0\0\0eeworldpostqq…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved