物联网ARM开发【STM32】

通用输入输出接口GPIO是嵌入式系统、单片机开发过程中最常用的接口,用户可以通过编程灵活的对接口进行控制,实现对电路板上LED、数码管、按键等常用设备控制驱动,也可以作为串口的数据收发管脚,或AD的接口等复用功能使用。因此其作用和功能是非常重要的,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。

芯片引脚

STM32芯片上的引脚类型被分为了:电源引脚、晶振引脚、GPIO引脚等。GPIO引脚类的所有引脚又通过编号分为了:PA类、PB类、等,根据芯片类型不同类数也不同,但每类引脚最多只有16个,例如:PA0~PA15。STM32-G030C8T6的部分引脚功能如下图:(注:所有实验均是基于STM32-G030C8T6型号核心板进行开发测试)

GPIO工作模式

GPIO引脚的工作模式分为两种:输入模式和输出模式,这两种模式也有不同的类型。

**输入模式:**浮空输入、上拉输入、下拉输入、模拟输入

**输出模式:**开漏输出、复用开漏输出、推挽输出、复用推挽输出

GPIO相关寄存器介绍

GPIO寄存器MODER(端口模式寄存器)

GPIO寄存器OTYPER(端口输出类型寄存器)

GPIO寄存器OSPEEDR(输出速度寄存器)

GPIO寄存器PUPDR(上拉 / 下拉寄存器)

GPIO寄存器IDR(输入数据寄存器)

GPIO寄存器ODR(输出数据寄存器)

GPIO寄存器BSRR(置位 / 复位寄存器)

使用GPIO口点亮LED灯

可以看出,LED灯通过PB0、1、2三个引脚和核心板相连接。

进入CbueMX,选中对于的STM32型号,然后配置引脚,配置完成如下图

此外,我们将这三个GPIO引脚设置成输出模式后,还可以进一步进行配置,例如选择是否上拉电阻,是否位推挽模式、传输速度、优先级等等

然后就可以生成代码工程,并导入到keil5中,下面对关键的代码进行分析。

GPIO的初始化,生成工程时,自动完成(CubeMX的好处…???)

在main文件中,就可以使用GPIO口对引脚进行操作,复位PB0, PB1, PB2 既点亮LED,反之至位则是关闭LED,如果加上Delay延迟函数,也就可以实现流水灯的效果。

使用按键控制LED的开关

可以看出,按键与核心板的PA8引脚相连

CubeMX的配置如上图,设置LED灯的引脚位输出模式,将按键设置成GPIO中断模式,按下按键能够产生中断,中断配置如下:

使能按键中断,按键产生的中断编号是EXTI8,处于4到15之间,另外还使能了串口USART1中断,让串口传输、接收数据时能够产生中断。使用到了串口,那么还要对它进行一个配置,如下图

基本配置:波特率、数据位、校验位、停止位。具体在串口再将,一般设置为115200和8 N 1

进入工程,分析代码

如上图,当中断源(按键、串口)产生了中断信号后,就会通过以上函数进行处理,CubxMX特别贴心的初始化好了产生中断的引脚以及对象,继续追踪代码

对于按键,在本核心板中是GPIO8的引脚产生的中断,对于按键的中断处理函数中,可以看见里面包含了两个函数(按键按下以及按下抬起产生),然后追踪其内部的回调函数进一步实现我们需要的功能(这两个函数其实是ARM里的虚函数,可以进行重写,不知道为什么这次追不到…)

以上代码实现的就是,按键改变LED的状态,以及当按键按下时,通过串口发送一个字符串Key Press,这里没有使用串口产生中断,串口产生中断的函数为HAL_UART_Transmit_IT

更为详细的GPIO介绍和原理的学习的博客地址:

【STM32】标准库与HAL库对照学习教程特别篇–GPIO详讲_stm32 hal库 电源设置_修成真的博客-CSDN博客

STM32之UART串口

通信定义

**同步通信:**一般情况下同步通信指的是通信双方根据同步信号进行通信的方式。比如通信双方有一个共同的时钟信号,大家根据时钟信号的变化进行通信(如下图的SPI)

**异步通信:**是指数据传输速度匹配依赖于通信双方有自己独立的系统时钟,大家约定好通信的速度。异步通信不需要同步信号,但是并不是说通信的过程不同步(如下图的UART)

**串行通信:**指的是同一时刻只能收或发一个bit位信息。因此只用1根信号线即可

**并行通信:**指的是同一时刻可以收或发多个bit位的信息,因此需要多根信号线才行

**单工:**要么收,要么发,只能做接收设备或者发送设备。比如收音机

**半双工:**可以收,可以发,但是不能同时收发, 比如对讲机

**全双工:**可以在同一时刻既接收,又发送。 手机

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值