[其他ST产品] STM32F1常用外设介绍

[复制链接]
 楼主| 范德萨发额 发表于 2023-2-28 19:26 | 显示全部楼层


EXTI:(Extern Interrupt)外部中断

EXTI可以检测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序
 楼主| 范德萨发额 发表于 2023-2-28 19:26 | 显示全部楼层


支持的触发方式:上升沿/下降沿/双边沿/软件触发

支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断
 楼主| 范德萨发额 发表于 2023-2-28 19:26 | 显示全部楼层
通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒
 楼主| 范德萨发额 发表于 2023-2-28 19:26 | 显示全部楼层
触发响应方式:中断响应/事件响应
 楼主| 范德萨发额 发表于 2023-2-28 19:27 | 显示全部楼层
 楼主| 范德萨发额 发表于 2023-2-28 19:27 | 显示全部楼层
AFIO选择中断引脚,外部中断的9-5,15-10会触发同一个中断函数,再根据标志位来区分到底是哪个中断进来的

配置数据选择器,只有一个Pin接到EXTI
 楼主| 范德萨发额 发表于 2023-2-28 19:27 | 显示全部楼层
 楼主| 范德萨发额 发表于 2023-2-28 19:27 | 显示全部楼层
在STM32中AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择

或、与、非门

4767863fde52175048.png
 楼主| 范德萨发额 发表于 2023-2-28 19:27 | 显示全部楼层
EXTI配置步骤

    第一步,配置RCC,把设计到的外设时钟都打开
    第二步,配置GPIO,选择端口为输入模式
    第三步,配置AFIO,选择使用的一路GPIO,连接到后面的EXTI
    第四步,配置EXTI,选择边沿触发方式,选择触发响应方式
    第五步,配置NVIC,给中断选择一个合适的优先级
 楼主| 范德萨发额 发表于 2023-2-28 19:27 | 显示全部楼层
EXTI和NVIC时钟默认是打开的,NVIC是内核的外设,内核的外设都不需要开启时钟,RCC管的都是内核外的外设
 楼主| 范德萨发额 发表于 2023-2-28 19:27 | 显示全部楼层
复位AFIO外设
  1. void GPIO_AFIODeInit(void);
 楼主| 范德萨发额 发表于 2023-2-28 19:28 | 显示全部楼层
锁定GPIO配置函数
锁定引脚的配置,防止意外更改
  1. void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);
 楼主| 范德萨发额 发表于 2023-2-28 19:28 | 显示全部楼层
配置AFIO的事件输出功能函数
  1. void GPIO_EventOutputConfig(uint8_t GPIO_PortSource,uint8_t GPIO_PinSource);
  2. void GPIO_EventOutputCmd(FunctionalState NewState);
 楼主| 范德萨发额 发表于 2023-2-28 19:29 | 显示全部楼层
配置引脚重映射函数
  1. void GPIO_PinRemapConfig(uint32_t GPIO_Remap,FunctionalState NewState);
 楼主| 范德萨发额 发表于 2023-2-28 19:29 | 显示全部楼层
配置AFIO的数据选择器

选择想使用的中断引脚函数

  1. void GPIO_EXTILineConfig(uint8_t GPIO_PortSource,uint8_t GPIO_PinSource);
 楼主| 范德萨发额 发表于 2023-2-28 19:29 | 显示全部楼层
恢复上电默认的状态函数

  1. void EXTI_DeInit(void);
 楼主| 范德萨发额 发表于 2023-2-28 19:29 | 显示全部楼层
根据结构体配置EXTI外设函数
  1. void EXTI_Init(EXTI_InitTypedef* EXTI_InitStruct);
 楼主| 范德萨发额 发表于 2023-2-28 19:30 | 显示全部楼层
给传入的结构体参数赋一个默认值函数
  1. void EXTI_StructInit(EXTI_InitTypedef* EXTI_InitStruct);
 楼主| 范德萨发额 发表于 2023-2-28 19:30 | 显示全部楼层
软件触发外部中断函数

参数给一个中断线,就能软件触发一次这个外部中断函数
  1. void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line);
 楼主| 范德萨发额 发表于 2023-2-28 19:30 | 显示全部楼层
在外设运行的时候会产生一些状态标志位,例如:外部中断来了,挂起寄存器会置一个标志位,标志位放在状态寄存器,

当程序想看这些标志位
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部
快速回复 在线客服 返回列表 返回顶部