STM32通用IO口

本文介绍了如何使用Keil5创建STM32工程,添加启动文件、库函数和配置头文件。重点讲解了GPIO的结构和模式,以及如何通过标准库初始化GPIO,包括推挽输出模式。同时提到了RCC时钟在启用外设前的重要性,并给出了点亮LED灯的示例代码。
摘要由CSDN通过智能技术生成

创建工程

 

本次学习是用标准库来开发stm32,所以在创建工程时需要添加必要的文件

启动文件

启动文件:https://pan.baidu.com/s/1VBbIG73hm5_4d8dO3UXBbw?pwd=3232

打开Keil5,创建一个新的工程,在工程文件夹下把下载好的启动文件夹放进去,然后再添加组

 

 添加库函数文件

刚刚添加好的启动文件可以用写寄存器的方式来开发stm32,但用寄存器的方法过于繁琐,所以还需要添加标准库。库函数文件:https://pan.baidu.com/s/1jYKRPQNz6K7rnYgFjlOjEw?pwd=3232

将库函数文件添加到工程文件夹里面,然后再添加组,把库函数文件夹中所有文件添加。

还要需要添加配置头文件包含关系的文件:https://pan.baidu.com/s/1JkgFp0GGdCvBFc5wQwU7jg?pwd=3232

也将这个文件添加到工程文件里面,再添加组即可。

其他设置

文件路径

刚刚添加的启动文件和库函数文件,不能直接用,还要把这些文件路径添加进去

设置STLink 

MDK默认使用的是ULink,需要再设置中修改成STLink

 

 条件编译,选择使用标准外设驱动

头文件包含关系的头文件,有一段条件编译,这里我们选择标准外设驱动

 

其他设置

Keil5的缩进和中文乱码问题比较麻烦,可以选择自己设置一下

这样就可以用标准库来开发stm32了

GPIO口

GPIO就是通用输入/输出口,GPIO有A~G端口,每个有0~15的IO口,每个端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。每个I/O端口位可以自由编程,然而必须按照32位字访问I/O端口寄存器(不允许半字或字节访 问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器进行读/更改的独立访问;这 样,在读和更改访问之间产生IRQ时不会发生危险。GPIO口可以配置成多种模式,包括浮空输入、下拉输入、上拉输入、模拟输入、开漏输出、推挽输出、推挽复用输出。

IO口的基本结构

输入部分

保护电路部分:如果输入的电压过大,上面的二极管导通,不会流入芯片;如果电压过低,下面的二极管导通,不会让电流从芯片流向外面。

上拉和下拉部分:上面接通的话,外部没有输入,会默认读取高电平,也就是被配置成上拉输入,下拉则反之。如果都没有接通则会配置成浮空输入,输入会不稳定,不建议配置成浮空输入。

施密特触发器:这里应该是翻译错误,施密特触发器可以自行去了解。

模拟输入和复用功能输入后面再细说。

输入的部分没有进入模拟输入和复用功能输入的话,就会转变成数字信号(0和1)存入寄存器,芯片和读取寄存器中的值。

输出部分

推挽输出:输出控制旁边上端的mos管导通,高电平具有驱动能力,能点亮LED灯

开漏输出:下端的mos管导通,高电平不具有驱动能力,如果想要操作外设,还要外接一个高电平

复用功能输出之后再了解 

RCC时钟

在使用一个外设之前,首先要开启对应外设的时钟。之后会细讲RCC时钟

关于GPIO的函数

固件函数链接:https://pan.baidu.com/s/1Q5bLtZ89uHsVwaPegwUPoQ?pwd=3232

在文档里面有各种函数的介绍和使用方法。

点亮LED灯

点亮一个LED灯

接线图

 代码部分

#include "stm32f10x.h"
int main(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启GPIOA的时钟
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//配置成推挽输出模式
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
    GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化
    GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);//置低电平
    while(1)
    {
        
    }
    return 0;
}

标准库初始化GPIO的方式,是通过一个结构体,在通过这个结构体完成GPIO的初始化。

小结

要使用GPIO输入输出,首先要打开对应外设的时钟,再创建GPIO_InitTypeDef的结构体变量,给变量赋值,再用结构体来初始化,最后用函数来读取/写入GPIO的高低电平。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值