首页 > 其他分享 >1.2 STM32的GPIO

1.2 STM32的GPIO

时间:2023-08-22 21:14:40浏览次数:34  
标签:1.2 Pin void STM32 Mode GPIO InitTypeDefStructure RCC

一、GPIO的8种输入输出模式:

1. 输入:

  GPIO_Mode_AIN     // 模拟输入:用于ADC   
  GPIO_Mode_IN_FLOATING    //浮空输入
  GPIO_Mode_IPD     //下拉输入
  GPIO_Mode_IPU    //上拉输入

2. 输出:

  GPIO_Mode_Out_OD   //开漏输出

  GPIO_Mode_Out_PP    //推挽输出

  GPIO_Mode_AF_OD    //复用开漏输出

  GPIO_Mode_AF_PP    //复用推挽输出

 

 RCC时钟使能:

  void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);   //AHB

  void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);   //APB2

  void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);    //APB1

GPIO:

  void GPIO_DeInit(GPIO_TypeDef* GPIOx);      //GPIO复位
  void GPIO_AFIODeInit(void);        //AFIO复位
  void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);     //GPIO初始化
  void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);      //结构体变量给初始值
  uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);    //读取输入某一位寄存器的值
  uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);    //读取输入整个寄存器的值
  uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);  //读取输出某一位寄存器的值
  uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);  //读取输入整个寄存器的值
  void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);        //高电平
  void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);    //低电平
  void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
  void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

LED点灯:

  GPIO_InitTypeDef GPIO_InitTypeDefStructure;
  GPIO_InitTypeDefStructure.GPIO_Mode=GPIO_Mode_Out_PP;  //推挽输出
  GPIO_InitTypeDefStructure.GPIO_Pin=GPIO_Pin_1;      //PA1
  GPIO_InitTypeDefStructure.GPIO_Speed=GPIO_Speed_50MHz;  //速度
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);  //使能APB2时钟
  GPIO_Init(GPIOA,&GPIO_InitTypeDefStructure);  //GPIOA初始化

  GPIO_SetBits(GPIOA,GPIO_Pin_1);

按键控制LED点亮:

按键Key.c:

void Key_Init(void){
  GPIO_InitTypeDef GPIO_InitTypeDefStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  GPIO_InitTypeDefStructure.GPIO_Mode=GPIO_Mode_IPD;
  GPIO_InitTypeDefStructure.GPIO_Pin=GPIO_Pin_11;
  GPIO_InitTypeDefStructure.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_Init(GPIOB,&GPIO_InitTypeDefStructure);
}

uint8_t Key_Out(void){

  uint8_t KeyNum = 0;

  if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0){         //防抖动

    Delay_us(10);
    while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0);
    Delay_us(10);
    KeyNum = 1;
  }
  return KeyNum;
}

main.c:

  KeyNum=Key_Out();

  if(KeyNum==1){

    GPIO_SetBits(GPIOA,GPIO_Pin_1);

}

标签:1.2,Pin,void,STM32,Mode,GPIO,InitTypeDefStructure,RCC
From: https://www.cnblogs.com/yangbz2003-cn/p/17649586.html

相关文章

  • ROS小车STM32底板代码学习
    用的是幻尔科技的新推出的ROS小车的STM32控制底板价格他的代码是用HAL库写的,而且资料很少,刚开始连ROS1功能包都还在测试。代码有300多M,编译一次,直接吃席。所以我用轮趣科技的ROS小车代码移植,采用的FreeRTOS写的,跟我学的代码风格几乎一致移植过程中你会发现,电路很多地方都一致,盲......
  • 【STM32】2_0 GPIO
    注:凡是有FT标志的,都是兼容5V电平的IO口,可以直接接5V的外设(注意:如果引脚设置的是模拟输入模式,则不能接5V!,凡是不带FT标志的,不可与无5V链接,可能烧坏MCU。根据数据手册中列出的每个I/O端口的特性,可通过软件将通用I/O(GPIO)端口的各个端口位分别配置为多种模式:●......
  • STM32深入学习1:时钟系统和GPIO
    RCC(复位和时钟控制):系统复位的因素:1.NRST按键复位2.看门狗复位3.软件复位4.低功耗管理复位SYSCLK系统时钟: 1.HSI时钟2.HSE时钟:外部晶振3.PLL时钟  系统时钟:PCLK1:APB1分频,最大36mhz   PCLK2,ADC,TIM1,TIM8:APB2分频 初始化:相关知识:RCC相关寄存器:R......
  • STM32 Wifi开发
    一、概述1.用到的资源说明1.1wifi模块:ESP8266EX1.2串口,串口接收不定长数据采用定时器超时的方式判断一帧数据是否接收完成,定时器1ms中断一次;2.采用AP+Station模式,这种模式比较实用。AP用来设置wifi信息的,连接ESP8266wifi信号,此时ESP8266就是服务端,可以写一个上位机socket......
  • CAN通信知识梳理及在Stm32上的应用(HAL库)
    文章目录一.CAN通信简介二.硬件连接三.CAN总线上的电平信号四.CAN帧的种类(1)遥控帧(2)数据帧五.CAN的仲裁方法六.CAN在Stm32上的应用(1)CubeMX上CAN的配置(2)配置CAN过滤器32位列表模式16位列表模式32位掩码模式(3)CAN数据的发送与接收六.参考文档七.同系列......
  • 最完美WIN11_Pro_23H2.22631.2199软件选装纯净版VIP51.9
    【系统简介】=============================================================1.本次更新母盘来自UUP_WIN11_Pro_23H2.22631.2199。进一步精简优化调整。2.只为呈现最好的作品,手工精简优化部分较多。3.OS版本号为22631.2199。个别要求高的就下MSDN吧,里面啥功能都有。4.集成《DrvCeo......
  • 0×03 Vulnhub 靶机渗透总结之 KIOPTRIX: LEVEL 1.2 (#3) SQL注入+sudo提权
    0×03Vulnhub靶机渗透总结之KIOPTRIX:LEVEL1.2(#3)......
  • cuda11.2升级安装
    1安装指定版本驱动和cuda驱动版本网址:https://developer.nvidia.com/cuda-toolkit-archive下载cuda11.2,以我们服务器为例,进行勾选得到下载命令wgethttps://developer.download.nvidia.com/compute/cuda/11.2.1/local_installers/cuda_11.2.1_460.32.03_linux.runsudo下载完......
  • DPDK-22.11.2 [三] 官方helloworld编译运行讲解
    先安装dpdk编译完成后,先运行ninjainstall把相关内容安装到指定目录。ls/home/dpdkinstallbinincludelib64sharebin——一些脚本(用于绑定驱动等),编译的测试程序,编译的常用工具include——需要的头文件lib64——编译的类库share——文档相关......
  • Blazor前后端框架Known-V1.2.13
    V1.2.13Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行。Gitee:https://gitee.com/known/KnownGithub:https://github.com/known/Known概述基于C#和Blazor实现的快速开发框架,前后端分离,开箱即用。跨平台,单页应用,混合桌面应用,Web和桌面......