打印
[其他ST产品]

STM32F1常用外设介绍

[复制链接]
楼主: 范德萨发额
手机看帖
扫描二维码
随时随地手机跟帖
21
范德萨发额|  楼主 | 2023-2-28 19:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览


EXTI:(Extern Interrupt)外部中断

EXTI可以检测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序

使用特权

评论回复
22
范德萨发额|  楼主 | 2023-2-28 19:26 | 只看该作者


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

支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断

使用特权

评论回复
23
范德萨发额|  楼主 | 2023-2-28 19:26 | 只看该作者
通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒

使用特权

评论回复
24
范德萨发额|  楼主 | 2023-2-28 19:26 | 只看该作者
触发响应方式:中断响应/事件响应

使用特权

评论回复
25
范德萨发额|  楼主 | 2023-2-28 19:27 | 只看该作者

使用特权

评论回复
26
范德萨发额|  楼主 | 2023-2-28 19:27 | 只看该作者
AFIO选择中断引脚,外部中断的9-5,15-10会触发同一个中断函数,再根据标志位来区分到底是哪个中断进来的

配置数据选择器,只有一个Pin接到EXTI

使用特权

评论回复
27
范德萨发额|  楼主 | 2023-2-28 19:27 | 只看该作者

使用特权

评论回复
28
范德萨发额|  楼主 | 2023-2-28 19:27 | 只看该作者
在STM32中AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择

或、与、非门

使用特权

评论回复
29
范德萨发额|  楼主 | 2023-2-28 19:27 | 只看该作者
EXTI配置步骤

    第一步,配置RCC,把设计到的外设时钟都打开
    第二步,配置GPIO,选择端口为输入模式
    第三步,配置AFIO,选择使用的一路GPIO,连接到后面的EXTI
    第四步,配置EXTI,选择边沿触发方式,选择触发响应方式
    第五步,配置NVIC,给中断选择一个合适的优先级

使用特权

评论回复
30
范德萨发额|  楼主 | 2023-2-28 19:27 | 只看该作者
EXTI和NVIC时钟默认是打开的,NVIC是内核的外设,内核的外设都不需要开启时钟,RCC管的都是内核外的外设

使用特权

评论回复
31
范德萨发额|  楼主 | 2023-2-28 19:27 | 只看该作者
复位AFIO外设
void GPIO_AFIODeInit(void);

使用特权

评论回复
32
范德萨发额|  楼主 | 2023-2-28 19:28 | 只看该作者
锁定GPIO配置函数
锁定引脚的配置,防止意外更改
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);

使用特权

评论回复
33
范德萨发额|  楼主 | 2023-2-28 19:28 | 只看该作者
配置AFIO的事件输出功能函数
void GPIO_EventOutputConfig(uint8_t GPIO_PortSource,uint8_t GPIO_PinSource);
void GPIO_EventOutputCmd(FunctionalState NewState);

使用特权

评论回复
34
范德萨发额|  楼主 | 2023-2-28 19:29 | 只看该作者
配置引脚重映射函数
void GPIO_PinRemapConfig(uint32_t GPIO_Remap,FunctionalState NewState);

使用特权

评论回复
35
范德萨发额|  楼主 | 2023-2-28 19:29 | 只看该作者
配置AFIO的数据选择器

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

void GPIO_EXTILineConfig(uint8_t GPIO_PortSource,uint8_t GPIO_PinSource);

使用特权

评论回复
36
范德萨发额|  楼主 | 2023-2-28 19:29 | 只看该作者
恢复上电默认的状态函数

void EXTI_DeInit(void);

使用特权

评论回复
37
范德萨发额|  楼主 | 2023-2-28 19:29 | 只看该作者
根据结构体配置EXTI外设函数
void EXTI_Init(EXTI_InitTypedef* EXTI_InitStruct);

使用特权

评论回复
38
范德萨发额|  楼主 | 2023-2-28 19:30 | 只看该作者
给传入的结构体参数赋一个默认值函数
void EXTI_StructInit(EXTI_InitTypedef* EXTI_InitStruct);

使用特权

评论回复
39
范德萨发额|  楼主 | 2023-2-28 19:30 | 只看该作者
软件触发外部中断函数

参数给一个中断线,就能软件触发一次这个外部中断函数
void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line);

使用特权

评论回复
40
范德萨发额|  楼主 | 2023-2-28 19:30 | 只看该作者
在外设运行的时候会产生一些状态标志位,例如:外部中断来了,挂起寄存器会置一个标志位,标志位放在状态寄存器,

当程序想看这些标志位

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则