博客
关于我
STM32CubeMX学习笔记(2)——GPIO接口使用
阅读量:321 次
发布时间:2019-03-03

本文共 4553 字,大约阅读时间需要 15 分钟。

STM32CubeMX.GPIO配置指南

一、新建工程

  • 打开 STM32CubeMX 软件,点击“新建工程”。

  • 选择 MCU 和封装。

  • 配置时钟:

    • RCC 设置,选择 HSE(外部高速时钟) 为 Crystal/Ceramic Resonator。
    • 选择 Clock Configuration,配置系统时钟 SYSCLK 为 72MHz。
    • 修改 HCLK 的值为 72,输入回车,软件会自动修改所有配置。
  • 配置调试模式:

    • SYS 设置,选择 Debug 为 Serial Wire。
    • 确保调试器连接正确,以免第一次烧录后续无法识别调试器。
  • 二、GPIO输出配置

    2.1 参数配置

    • 在 System Core 中选择 GPIO 设置。
    • 在右边图中找到 LED 灯对应引脚,选择 GPIO_Output。
    • 在 GPIO output level 中选择 Low 输出低电平点亮,可以添加自定义标签。

    2.2 生成代码

    • 输入项目名和项目路径。
    • 选择应用的 IDE 开发环境 MDK-ARM V5。
    • 勾选:初始化代码生成在对应的外设文件(如 GPIO 初始化代码生成在 gpio.c 中)。
    • 点击 GENERATE CODE 生成代码。

    2.3 HAL库与标准库代码比较

    • STM32CubeMX 使用 HAL 库生成的代码:

      #define LED_G_Pin GPIO_PIN_0#define LED_G_GPIO_Port GPIOB#define LED_B_Pin GPIO_PIN_1#define LED_B_GPIO_Port GPIOBstatic void MX_GPIO_Init(void){    GPIO_InitTypeDef GPIO_InitStruct = {0};    __HAL_RCC_GPIOB_CLK_ENABLE();    __HAL_RCC_GPIOA_CLK_ENABLE();    HAL_GPIO_WritePin(GPIOB, LED_G_Pin|LED_B_Pin, GPIO_PIN_SET);    GPIO_InitStruct.Pin = LED_G_Pin|LED_B_Pin;    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;    GPIO_InitStruct.Pull = GPIO_NOPULL;    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);    HAL_GPIO_WritePin(GPIOB, LED_G_Pin|LED_B_Pin, GPIO_PIN_SET);}
    • 使用 STM32 标准库的代码:

      #define LED1_GPIO_PORT     GPIOA#define LED1_GPIO_CLK     RCC_APB2Periph_GPIOB#define LED1_GPIO_PIN     GPIO_Pin_8#define LED2_GPIO_PORT     GPIOB#define LED2_GPIO_PIN     GPIO_Pin_0void LED_GPIO_Config(void){    GPIO_InitTypeDef GPIO_InitStructure;    RCC_APB2PeriphClockCmd( LED1_GPIO_CLK | LED2_GPIO_CLK, ENABLE);    GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    GPIO_Speed = GPIO_Speed_50MHz;    GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);    GPIO_InitStructure.GPIO_Pin = LED2_GPIO_PIN;    GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure);    GPIO_SetBits(LED1_GPIO_PORT, LED1_GPIO_PIN);    GPIO_SetBits(LED2_GPIO_PORT, LED2_GPIO_PIN);}
    • 代码对应关系:

      __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE();→ RCC_APB2PeriphClockCmd( LED1_GPIO_CLK | LED2_GPIO_CLK, ENABLE);HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);→ GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure);HAL_GPIO_WritePin(GPIOB, LED_G_Pin|LED_B_Pin, GPIO_PIN_SET);→ GPIO_SetBits(LED1_GPIO_PORT, LED1_GPIO_PIN);GPIO_SetBits(LED2_GPIO_PORT, LED2_GPIO_PIN);

    2.4 使用例子

    int main(void){    HAL_Init();    SystemClock_Config();    MX_GPIO_Init();    while(1){        GPIO_SetBits(LED1_GPIO_PORT, LED1_GPIO_PIN);        HAL_Delay(1000);        GPIO_ResetBits(LED1_GPIO_PORT, LED1_GPIO_PIN);    }}

    三、GPIO输入配置

    3.1 参数配置

    • 在 System Core 中选择 GPIO 设置。
    • 在右边图中找到按键对应引脚,选择 GPIO_Input。
    • 设置按键引脚为浮空输入。

    3.2 生成代码

    • 输入项目名和项目路径。
    • 选择应用的 IDE 开发环境 MDK-ARM V5。
    • 点击 GENERATE CODE 生成代码。

    3.3 HAL库与标准库代码比较

    • STM32CubeMX 使用 HAL 库生成的代码:

      #define KEY2_Pin GPIO_PIN_13#define KEY2_GPIO_Port GPIOC#define KEY1_Pin GPIO_PIN_0#define KEY1_GPIO_Port GPIOAstatic void MX_GPIO_Init(void){    GPIO_InitTypeDef GPIO_InitStruct = {0};    __HAL_RCC_GPIOC_CLK_ENABLE();    __HAL_RCC_GPIOA_CLK_ENABLE();    GPIO_InitStruct.Pin = KEY2_Pin;    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;    GPIO_InitStruct.Pull = GPIO_NOPULL;    HAL_GPIO_Init(KEY2_GPIO_Port, &GPIO_InitStruct);    GPIO_InitStruct.Pin = KEY1_Pin;    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;    GPIO_InitStruct.Pull = GPIO_NOPULL;    HAL_GPIO_Init(KEY1_GPIO_Port, &GPIO_InitStruct);}
    • 使用 STM32 标准库的代码:

      #define KEY1_GPIO_CLK     RCC_APB2Periph_GPIOA#define KEY1_GPIO_PORT    GPIOA#define KEY1_GPIO_PIN     GPIO_Pin_0#define KEY2_GPIO_CLK     RCC_APB2Periph_GPIOC#define KEY2_GPIO_PORT    GPIOC#define KEY2_GPIO_PIN     GPIO_Pin_13void Key_GPIO_Config(void){    GPIO_InitTypeDef GPIO_InitStructure;    RCC_APB2PeriphClockCmd(KEY1_GPIO_CLK|KEY2_GPIO_CLK, ENABLE);    GPIO_InitStructure.GPIO_Pin = KEY1_GPIO_PIN;    GPIO_Mode = GPIO_Mode_IN_FLOATING;    GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStructure);    GPIO_InitStructure.GPIO_Pin = KEY2_GPIO_PIN;    GPIO_Mode = GPIO_Mode_IN_FLOATING;    GPIO_Init(KEY2_GPIO_PORT, &GPIO_InitStructure);}
    • 代码对应关系:

      __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE();→ RCC_APB2PeriphClockCmd(KEY1_GPIO_CLK|KEY2_GPIO_CLK, ENABLE);HAL_GPIO_Init(KEY1_GPIO_Port, &GPIO_InitStruct);→ GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStructure);HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin);→ GPIO_ReadInputDataBit(KEY1_GPIO_PORT, KEY1_GPIO_PIN);

    3.4 使用例子

    int main(void){    uint8_t status = 0;    HAL_Init();    SystemClock_Config();    MX_GPIO_Init();    while(1){        status = HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin);        HAL_Delay(1000);    }}

    四、注意事项

    • 用户代码要加在 USER CODE BEGIN NUSER CODE END N 之间,否则下次使用 STM32CubeMX 重新生成代码后,会被删除。

    转载地址:http://whbq.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现gauss easte高斯复活节日期算法(附完整源码)
    查看>>
    Objective-C实现gaussian filter高斯滤波器算法(附完整源码)
    查看>>
    Objective-C实现gaussian naive bayes高斯贝叶斯算法(附完整源码)
    查看>>
    Objective-C实现gaussian高斯算法(附完整源码)
    查看>>
    Objective-C实现geometric series几何系列算法(附完整源码)
    查看>>
    Objective-C实现getline函数功能(附完整源码)
    查看>>
    Objective-C实现gnome sortt侏儒排序算法(附完整源码)
    查看>>
    Objective-C实现graph list图列算法(附完整源码)
    查看>>
    Objective-C实现GraphEdge图边算法(附完整源码)
    查看>>
    Objective-C实现GraphVertex图顶点算法(附完整源码)
    查看>>
    Objective-C实现greatest common divisor最大公约数算法(附完整源码)
    查看>>
    Objective-C实现greedy coin change贪心硬币找零算法(附完整源码)
    查看>>
    Objective-C实现greedy knapsack贪婪的背包算法(附完整源码)
    查看>>
    Objective-C实现GridGet算法(附完整源码)
    查看>>
    Objective-C实现half adder半加器算法(附完整源码)
    查看>>
    Objective-C实现hamiltonianCycle哈密尔顿图算法(附完整源码)
    查看>>
    Objective-C实现hamming code汉明码算法(附完整源码)
    查看>>
    Objective-C实现hamming numbers汉明数算法(附完整源码)
    查看>>
    Objective-C实现hammingDistance汉明距离算法(附完整源码)
    查看>>
    Objective-C实现hanning 窗(附完整源码)
    查看>>