×
单片机 > 单片机程序设计 > 详情

STM32学习笔记:【003】GPIO

发布时间:2021-03-17 发布时间:
|

在STM32中,最常用到的功能莫过于GPIO(General Purpose Input Output 、通用输入/输出)了,在STM32中,除了除去ADC以外的复用功能,剩下的几乎就是GPIO了。


下面给出GPIO的基本使用步骤:


初始化

1.声明一个GPIO属性结构体,设置各成员属性


这个结构体的属性是这样的:


typedef struct

{

  uint32_t Pin;       

  /*指定的引脚号,右值表达式可以是GPIO_PIN_0到~GPIO_PIN_15任意相或 */

  uint32_t Mode;      

  /*

    模式

    GPIO_MODE_INPUT       输入模式

    GPIO_MODE_OUTPUT_PP    推挽输出模式(输出较大电流)

    GPIO_MODE_OUTPUT_OD    开漏输出模式(一般外接上拉电阻)

    GPIO_MODE_AF_PP       复用推挽输出模式

    GPIO_MODE_OUTPUT_OD    复用开漏输出模式

    GPIO_MODE_ANALOG      复用模拟输入输出模式(ADC/DAC专用)

  */

  uint32_t Pull;  

  /*

    上/下拉模式

      上拉电阻是指当pin接到VCC(高电平)时所接的电阻即为Pull up 电阻,

      反之亦然,pin接地时所接的电阻即pull down电阻

    GPIO_NOPULL   无

    GPIO_PULLUP   上拉

    GPIO_PULLDOWN  下拉

  */

  uint32_t Speed;

  /*

    IO口速率(I/O口驱动电路的速度)

    当STM32的GPIO端口设置为输出模式时,有三种速度可以选择:2MHz、10MHz和50MHz,用来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。

    高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。

    STM32F429的端口输出速率为括号内容

    GPIO_SPEED_LOW;    (2)   2MHz注意:

    GPIO_SPEED_MEDIUM;  (25)  12.5MHz ~ 50MHz 

    GPIO_SPEED_FAST;   (50)  25MHz ~ 100 MHz 

    GPIO_SPEED_HIGH;   (100)  50MHz ~ 200MHz 

  */


  uint32_t Alternate;  

  /*

    复用功能,本节省略不讲

   */

}GPIO_InitTypeDef;

 


2.使能GPIOx对应的时钟(如果没有使能将会导致配置无效)


__HAL_RCC_GPIOB_CLK_ENABLE(void);           //开启GPIOB时钟


3.调用void HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init) 函数


初始化例程


void LED_Init(void)

{

  // 初始化函数

    GPIO_InitTypeDef GPIO_Initure;

    __HAL_RCC_GPIOB_CLK_ENABLE();           //开启GPIOB时钟

    

    GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1; //PB1,0

    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  //推挽输出

    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉

    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速


    HAL_GPIO_Init(GPIOB,&GPIO_Initure);

}


IO口的读写

读:

  GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

  Pxin(GPIO_Pin);   // x 可以是ABCD等端口

 


写:

  void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

  Pxout(GPIO_Pin);   // x 可以是ABCD等端口

  void HAL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);

读写例程


#include "stm32f4xx.h"

#define  LED0 PAout(0)

int main(void) 

  HAL_Init(); //初始化

  Stm32_Clock_Init(360,8,2,8); //设置时钟,180Mhz 

  delay_init(180); //初始化延时函数 

  LED_Init(); //初始化LED  

  while(1) 

  {

    LED0=0;                 //LED0亮

    delay_ms(500);

    LED0=1;                   //LED0灭

      delay_ms(500);

    }

}




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈msp430f5529入门(2)----时钟配置.例程分析