STM学习笔记--STM32F10X中断
EXTICR只用到了低16位,高16位保留。
typedef struct
{
vu32 EVCR;
vu32 MAPR;
vu32 EXTICR[4];
} AFIO_TypeDef
EXTICR[0] 对应于EXTI0[3:0],EXTI1[3:0],EXTI2[3:0],EXTI3[3:0]
EXTI0[3:0] 外部中断线0
0000àPA[0] 0001àPB[0] 0010àPC[0] 0011àPD[0] 0100àPE[0] 0101àPF[0] 0110àPG[0]
EXTI1[3:0] 外部中断线1
0000àPA[1] 0001àPB[1] 0010àPC[1] 0011àPD[1] 0100àPE[1] 0101àPF[1] 0110àPG[1]
EXTI2[3:0] 外部中断线2
0000àPA[2] 0001àPB[2] 0010àPC[2] 0011àPD[2] 0100àPE[2] 0101àPF[2] 0110àPG[2]
EXTI3[3:0] 外部中断线3
0000àPA[3] 0001àPB[3] 0010àPC[3] 0011àPD[3] 0100àPE[3] 0101àPF[3] 0110àPG[3]
EXTICR[1] 对应于EXTI4[3:0],EXTI5[3:0],EXTI6[3:0],EXTI7[3:0] 外部中断线4~7
EXTICR[2] 对应于EXTI8[3:0],EXTI9[3:0],EXTI10[3:0],EXTI11[3:0] 外部中断线8~11
EXTICR[3] 对应于EXTI12[3:0],EXTI13[3:0],EXTI14[3:0],EXTI15[3:0] 外部中断线12~15
/////////////////////////////////////////////////////////////////
//Ex_NVIC_Config专用定义
#define GPIO_A 0
#define GPIO_B 1
#define GPIO_C 2
#define GPIO_D 3
#define GPIO_E 4
#define GPIO_F 5
#define GPIO_G 6
#define FTIR 1 //下降沿触发
#define RTIR 2 //上升沿触发
BITx 范围为0~15,对应于IO口的位,对于外部中断线。
//外部中断配置函数
//只针对GPIOA~G;不包括PVD,RTC和USB唤醒这三个
//参数:GPIOx:0~6,代表GPIOA~G;BITx:需要使能的位;TRIM:触发模式,1,下升沿;2,上降沿;3,任意电平触发
//该函数一次只能配置1个IO口,多个IO口,需多次调用
//该函数会自动开启对应中断,以及屏蔽线
void Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM)
{
u8 EXTADDR;
u8 EXTOFFSET;
EXTADDR=BITx/4;//得到中断寄存器组的编号 2/4=0
EXTOFFSET=(BITx%4)*4; (2%4)*4 = 8
RCC->APB2ENR|=0x01;//使能io复用时钟
AFIO->EXTICR[EXTADDR]&=~(0x000F<
AFIO->EXTICR[EXTADDR]|=GPIOx<
//自动设置
EXTI->IMR|=1<
if(TRIM&0x01)
{
EXTI->FTSR|=1<
}
if(TRIM&0x02)
{
EXTI->RTSR|=1<
}
}
EXTADDR=BITx/4;得到中断寄存器的编号0~4 BITx
EXTOFFSET=(BITx%4)/4;得到中断寄存器的偏移量 0,4,8,12
- STM32F10x 使用SysTick的延时函数(12-02)
- 基于STM32F10x的uC/GUI初始化设置(12-02)
- 基于正点原子建立STM32F10x库函数版本的工程自己例程(11-28)
- 启动过程都在这个文件的开头描述了system_stm32f10x.c(11-27)
- stm32f10x_it.c 定义的程序列表,编程时参考(11-27)
- stm32f10x的AD配置(11-26)