问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

STM32F407VET6 学习笔记:GPIO引脚认识分类与开发板原理图

创作时间:
作者:
@小白创作中心

STM32F407VET6 学习笔记:GPIO引脚认识分类与开发板原理图

引用
CSDN
1.
https://m.blog.csdn.net/qq_64257614/article/details/138497119

本文是一篇关于STM32F407VET6微控制器的学习笔记,主要介绍了GPIO引脚的分类、开发板原理图以及如何点亮LED灯。文章内容包括:pack包的安装、STM32F407VET6引脚GPIO的详细归纳、各种外设(定时器、串口、CAN、SPI、I2C)的引脚分配、开发板的基本参数和原理图、与ST_LINK下载器的连接方法、点亮LED的代码示例等。

pack包的安装

学习新的单片机型号时,需要添加新的型号的pack包。一般商家提供的资料中会有个pack包,Keil没有添加这个pack的便需要添加,否则无法正常编程。这个直接双击安装就行了。

STM32F407VET6引脚GPIO归纳

STM32F407VET6 根据STM命名规则可知,共有100个引脚。引脚定义在STM32F407_405英文数据手册英文数据手册的47页。以手册为主、归纳是我自己人工完成的,可能有错误!

GPIO总线挂载

在使用标准库函数进行编程配置GPIO时,第一步就需要开启对应的GPIO的总线时钟,以下为外设总线以及其相对应的外设:

  • RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState)
  • RCC_AHB2PeriphClockCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState)
  • RCC_AHB3PeriphClockCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState)
  • RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)
  • RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)

定时器引脚

其中TIM1和TIM8是高级计时器、TIM2~TIM5是通用计时器。STM32F407的定时器通常连接到特定的GPIO引脚作为输入捕获、输出比较或PWM输出。

例如TIM1可以连接到PA8, PA9, PA10, PA11等引脚。其他定时器(TIM2, TIM3, TIM4, TIM5, TIM8等)也会连接到不同的GPIO引脚。

CH1
CH2
CH3
CH4
ETR
BKIN
PA7(CH1N)PE8(CH1N)PE9PB13(CH1N)PA8
PB0(CH2N)PE10(CH2N)PE11PB14(CH2N)PA9
PB1(CH3N)PE12(CH3N)PE13PB15(CH3N)PA10
PE14PA11
PA6PE15PB12
PA5(CH1N)PA7(CH1N)PC6PH13(CH1N)PI5
PB0(CH2N)PB14(CH2N)PC7PH14(CH2N)PI6
PB1(CH3N)PB15(CH3N)PC8PH15(CH3N)PI7
PC9PI2
PA0PI3
PA6PI4

串口引脚

TX
RX
CTS
RTS
CK
PA9PB6
PA10PB7
PA0PA11
PA12
PA2PD5
PA3PD6
PD3
PA1PD4
PA4PD7
PB10PD8PC10
PB11PD9PC11
PB13PD11
PB14PD12
PB12PD10PC12
PA0PC10
PA1PC11
PC12
PD2
PC6PG14
PC7PG9
PG13PG15
PG8PG12
PG7PC8

CAN通信引脚

CAN_RX
CAN_TX
PB8PI9PA11PD0PB8
PB9PA12PD1PB9
PB12PB5
PB13PB6

SPI通信引脚

SCK
MISO
MOSI
NSS
PA5PB3
PA6PB4
PA7PB5
PA4PA15
PB10PB13PI1
PC2PB14PI2
PC3PB15PI3
PB12PI0
PC10PB3
PC11PB4
PC12PB5
PA4PA15

I2C通信引脚

SCL
SDA
SMBA
PB6PB8
PB7PB9
PB5
PH4PB10
PF0PH5PB11
PF2PH6PB12
PH7PA8
PH8PC9
PH9PA9

开发板的基本参数理解

开发板原理图(部分)

作为笔记,这里贴一些自己以后可能用到的原理图供自己查阅,不是全部......

与ST_LINK下载器的连接

按照以下方式连接开发板与ST_LINK下载器:

  • SWO------SWIM
  • CLK ------SWCLK
  • DIO ------SWDIO
  • 5V0 ------5.0V
  • RST ------RST
  • GND ------GND

在下载程序时 别忘记在魔棒更改选择对应的 debug仿真器:

点亮LED代码

这代码是立创商家给的例程代码,这里贴出学习使用:

初始化LED端口

void led_init(void)
{
    //开GPIO总线
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
    GPIO_InitTypeDef  GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_2;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType  = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed   = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
    
    //使用结构体初始化GPIO
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    
    //GPIO初始化输出0
    GPIO_ResetBits(GPIOB,GPIO_Pin_2);
    
    flag = 0;
}

初始化按键端口

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitTypeDef  GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(GPIOA, &GPIO_InitStructure);

按键扫描函数

void key_scan(void)
{
    if( SET == GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) )
    {
        /* 延迟消抖 */
        delay_ms(20);
        if( flag )
        {
            GPIO_SetBits(GPIOB, GPIO_Pin_2);
            flag = 0;
        }
        else
        {
            GPIO_ResetBits(GPIOB, GPIO_Pin_2);
            flag = 1;
        }
        printf("Key Press!!\r\n");
        while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == SET) // 等待按键松开
        {
        }
        /* 延迟消抖 */
        delay_ms(20);
        printf("Key Release!!\r\n");
    }
}

测试效果图

没按按键:

按下一次按键:

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号