当前位置: 首页 > news >正文

stm32 gpio基础操作和中断操作

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、代码示例
  • 总结


前言

stm32 gpio基础操作函数示例


提示:以下是本篇文章正文内容,下面案例可供参考

一、代码示例

gpio输入输出:
需要使用GPIO_InitTypeDef 结构体初始化gpio
gpio模式
typedef enum
{ GPIO_Mode_AIN = 0x0,
GPIO_Mode_IN_FLOATING = 0x04,
GPIO_Mode_IPD = 0x28,
GPIO_Mode_IPU = 0x48,
GPIO_Mode_Out_OD = 0x14,
GPIO_Mode_Out_PP = 0x10,
GPIO_Mode_AF_OD = 0x1C,
GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 使能gpiob组时钟,gpio都是挂在apb2总线上
void gpio_output(GPIO_TypeDef* GPIOx, uint16_t pin, uint8_t val)
{GPIO_InitTypeDef GPIO_st = {0};GPIO_st.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_st.GPIO_Pin = pin;GPIO_st.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOx, &GPIO_st);if(val){GPIO_SetBits(GPIOx, pin);}else{GPIO_ResetBits(GPIOx, pin);}
}int gpio_input(GPIO_TypeDef* GPIOx, uint16_t pin)
{GPIO_InitTypeDef GPIO_st = {0};GPIO_st.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_st.GPIO_Pin = pin;GPIO_st.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOx, &GPIO_st);return GPIO_ReadInputDataBit(GPIOx, pin); //一般使用GPIO_ReadInputDataBit函数读输入电平,不会影响gpio口配置
}

stm32 gpio可以配置16个中断
有a b c三组gpio,每组gpio编号0-15,不能有冲突,比如用了gpioa0做中断,就不能用gpiob0和gpioc0做中断了。
中断处理函数:
0-4各有一个 5-9有一个 10-15有一个,
void EXTI0_IRQHandler(void)
void EXTI1_IRQHandler(void)
void EXTI2_IRQHandler(void)
void EXTI3_IRQHandler(void)
void EXTI4_IRQHandler(void)
void EXTI9_5_IRQHandler(void)
void EXTI15_10_IRQHandler(void)
配置exti中断:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//使能端口复用GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line = EXTI_Line12;//| EXTI_Line12 对应gpio号12;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿EXTI_Init(&EXTI_InitStructure);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitStructure);//中断处理函数
void EXTI15_10_IRQHandler(void)
{
}

总结

介绍了stm32gpio的基本输入输出函数,和gpio复用成中断例子


http://www.mrgr.cn/news/59269.html

相关文章:

  • easyui textbox onchange事件
  • 【C++融会贯通】多态
  • JDK9——JDK13新特性总结
  • 解决电脑更改IP地址后无法连接网络的实用指南
  • 小程序开发实战:PDF转换为图片工具开发
  • react项目因eslint检测未通过而Failed to compile编译失败
  • VulkanTutorial(6·VkSwapChainKHR)
  • RV1126音视频学习(二)-----VI模块
  • 【C++开篇】
  • Java中为什么要私有化构造方法
  • linux快速升级cmake(非源码编译)
  • codimd更改登录超时时限
  • Linux的makefile与进度条小程序实践
  • 刚面完字节!问了大模型微调SFT,估计凉了
  • 国考报名别忘了确认缴费(需传照片)
  • 【ShuQiHere】Linux 桌面环境:选择与定制指南 ️✨
  • <网络> 网络套接字编程(二)
  • 大型项目必备搜索神器,搜索引擎ElasticSearch详细教程
  • Redis 集群 问题
  • Java一些基础代码带你轻松入门
  • #PCIE#基础知识分解之 CC/SRNS/SRIS 时钟架构
  • 基于SSM的网上购物系统的设计与实现
  • 高级 SQL 技巧全面教程:提升你的数据库操作能力
  • [Python学习日记-56] Python 中的包与代码的跨模块代码调用
  • C++ 模板专题 - 表达式模板
  • RabbitMQ 发布确认高级部分