使用GPIO库函数时,其端口参数怎么表达?

       今天。。呃。。应该说是昨天,自己学习了串口配置和外部中断配置,并实现了通过电脑控制蜂鸣器和LED,同时以中断的方式实现按键控制LED闪烁的代码程序,对之前所学的知识进行了一次综合性实践。这次在编写程序的过程中,发现了之前自己没注意到的问题,这个问题导致自己的程序最终没能达到自己想要的效果,经过彻夜的调试、验证、修改,终于找到原因所在,也加深了自己对之前所学知识的理解。

        今天先写串口通信配置方法和外部中断配置方法的笔记,代码部分睡醒再弄,通宵搞到早上7点,实在太困了。。。

一、USART串口通信配置方法

串口操作常用相关库函数

二、EXTI外部中断配置方法

    3.每个外部中断可独立配置触发方式,使能/失能,专用的状态位

    5.同一时间一个中断线只能与一个引脚映射

    6.IO口外部中断在中断向量表中只分配了7个中断向量,即只能使用7个中断服务函数

//指定要配置的中断线

//指定模式:事件/中断

外部中断一般配置步骤:

意法半导体在推出 STM32 微控制器之初,也同时提供了一套完整细致的固件开发包,
里面包含了在 STM32 开发过程中所涉及到的所有底层操作。通过在程序开发中引入这样的
固件开发包,可以使开发人员从复杂冗余的底层寄存器操作中解放出来,将精力专注应用程
序的开发上,这便是 ST 推出这样一个开发包的初衷。
但这对于许多从 51/AVR 这类单片机的开发转到 STM32 平台的开发人员来说,势必有一
个不适应的过程。因为程序开发不再是从寄存器层次起始,而要首先去熟悉 STM32 所提供
的固件库。那是否一定要使用固件库呢?当然不是。 但 STM32 微控制器的寄存器规模可不
是常见的 8 位单片机可以比拟,若自己细细琢磨各个寄存器的意义,必然会消耗相当的时间,
并且对于程序后续的维护,升级来说也会增加资源的消耗。对于当前“时间就是金钱”的行
业竞争环境,无疑使用库函数进行 STM32 的产品开发是更好的选择。本文将通过一个简单
的例子对 STM32 的库函数做一个简单的剖析。

      (扩展-IAP主要用于产品出厂后应用程序的更新作用,考虑到出厂时要先烧写IAP  再烧写APP应用程序要烧写2次增加工人劳动力基础上写了“STM32 IAP+APP ==>双剑合一”链接稍后 ...

    前些日子,因为需要在STM32F103系列处理器上,对采集的音频信号进行FFT,所以花了一些时间来研究如何高效并精确的在STM32F103系列处理器上实现/s/ ...

    简单的讲一下多拨的说明:一.多拨分物理多拨和虚拟多拨. 物理多拨是电信老套餐,就是一个宽带支持四个内网设备同时拨号上网,即2004年以前,允许家里四台电脑直接连LAN网口启动拨号,同时允许四拨在线.现 ...

上一节看完手册以后,你或许已经明白怎么配置一个GPIO接口让它实现输入输出的各种功能了。但是如果我问起你:如果要让GPIOA端口的P0和P1配置成推挽输出10MHz模式,你该怎么做,你会做些什么?
绝大多数人做的事情应该还是翻开手册里GPIO_CRL的寄存器定义,然后照着手册编程。GPIO外设的功能比较简单,需要配置的功能不算太多,这么做没什么难度。但有些外设的配置寄存器有许许多多控制位,比如下面这位:
这是串口通信外设的控制寄存器1(对没错,还有个控制寄存器2),里面的14个有效位都与通信的各种规则和状态密切相关,通过查手册一位一位地改显然有点不太经济且不甚直观。
标准固件库函数就是为这个而生的。ST官方将常用的对外设的操作和外设的各种状态封装成可读性更高的函数和结构供用户使用。我们就着GPIIO的库函数来看看,这玩意到底有什么魔力。
并且在你的main里包含两个.h。打开这gpio的两个文件,里面虽然看着纷繁,但核心思路我们一讲便通。

与之配套地,这些字段的有意义值被定义成了相关的枚举或宏,你可以在.h中找到这些东西:

这个结构体用来装载开发者对外设的配置参数并作为参数输入给Init函数。因此你在执行Init函数前需要像这样定义一个结构体并设置它的值:

在它上边右键单击后选择“Go to Defnition”可以查看这个函数的内容。我将它复制过来,并添加了中文注释进行讲解。请仔细阅读。

函数的运行原理请多加阅读和理解,里边的一些代码习惯也是你学习的榜样。
于是乎,我们只需要在刚才定义好初始化结构体之后运行一句Init函数就好:

虽然初始化结构体没必要一定和初始化函数在一个作用域,但我还是希望你能把他们两个放在同一个代码块(最好是为它们单独开辟一个大括号),这样逻辑更清晰,也更加节省空间。
最后,别忘了我们最开始就讲过的配置外设常用步骤,我们还差“挂时钟”一步,这你只需要在运行初始化之前先来一下:

这个函数在_rcc.h里声明,可以去看看,我们之后会讲。

运行Init函数之后,你想打开的端口就都启动了。你还可以用修改寄存器的办法去操作它们的电平,不过,你在刚才的函数中还有十几个没有用,它们都可以用来修改我们上节讲的那些寄存器,进而实现对IO
口的各种操作。你也可以“Go to
Definition”一下,去看看它们的内容并理解它们的功能。以下是一个例子,开启GPIOA的所有端口做输出,并开启GPIOB的所有端口做输入。


这里边不仅有对一个引脚的位操作,还有对字节和半字的操作,它们在电机控制、并口通讯等领域应用广泛。

我要回帖

更多关于 二端口网络四个参数 的文章

 

随机推荐