.
GPIO篇
GPIO寄存器
端口配置低位寄存器 CRL; 32位 端口配置高位寄存器 CRH; 端口输入数据寄存器 IDR; 端口输出数据寄存器 ODR; 置位/复位寄存器 复位寄存器 锁定寄存器
32位 32位 32位
BSRR; 32位 BRR;
16位
LCKR; 32位
GPIO库函数
stm32f10x_gpio.h
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); 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);
GPIO相关类型名
typedef struct {
{
typedef struct
__IO uint32_t CRL; uint16_t GPIO_Pin;
.
__IO uint32_t CRH; __IO uint32_t IDR; __IO uint32_t ODR; __IO uint32_t BSRR; __IO uint32_t BRR; __IO uint32_t LCKR; } GPIO_TypeDef;
GPIO_Pin取值 #define GPIO_Pin_0
GPIO_Pin_12 #define GPIO_Pin_1 #define GPIO_Pin_2 GPIO_Pin_14 #define GPIO_Pin_3 #define GPIO_Pin_4 GPIO_Pin_All
#define GPIO_Pin_5
.
.
GPIOSpeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;
typedef enum
{ Bit_RESET = 0,
Bit_SET
}BitAction;
#define GPIO_Pin_6 #define
#define GPIO_Pin_7 #define GPIO_Pin_13 #define GPIO_Pin_8
#define
#define GPIO_Pin_9 #define GPIO_Pin_ 15
#define GPIO_Pin_10
#define
#define GPIO_Pin_11
中断篇
.
NVIC相关寄存器
中断使能设置寄存器 ISER 中断使能清除寄存器 ICER 中断悬挂设置寄存器 ISPR 中断悬挂清除寄存器 ICPR 中断激活位寄存器 IABR 中断优先级寄存器
IP
软件触发中断寄存器
STIR
TVOR寄存器 P138
TBLBASE 29段 R/W
TBLOFF 28:7段 R 向量表起始地址
EXTI相关寄存器
中断屏蔽寄存器 EXTI_IMR
事件屏蔽寄存器
EXTI_EMR 上升沿触发选择寄存器 EXTI_RTSR 下降沿触发选择寄存器 EXTI_FTSR 软件中断事件寄存器 EXTI_SWIER 挂起寄存器
EXTI_PR
AFIO寄存器
AFIO_EVCR
事件控制寄存器
.
AIRCR寄存器
P139
VECTKEY
31:16D R/W
ENDIANESS 15D R PRIGROUP
10:8D
R/W
SYSRESETREQ 2D W
VECTCLRACTIVE 1D W
VECTRESET
0D
W
设置是否屏蔽中断请求线上的中断请求 设置是否屏蔽事件请求线上的中断请求 设置是否用上升沿来触发中断和事件 设置是否用下降沿来触发中断和事件
用于软件触发中断/事件
用于保存中断/事件请求线上是否有请求
.
AFIO_EXTICRx AFIO_MAPR
外部中断配置寄存器
复用重映射和调试I/O配置寄存器
系统控制寄存器SCB p138 EXTI相关库函数
stm32f10x_exti.h
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
设置IO口与中断线的映射关系
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct); 初始化中断线:触发方式等 ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);
判断中断线中断状态,是否发生
void EXTI_ClearITPendingBit(uint32_t EXTI_Line); 清除中断线上的中断标志位
AFIO相关函数
stm32f10x_rcc.h
stm32f10x_gpio.h
使能AFIO
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 时钟
GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE); 根据第一个参数,来确定是部分重映射还是全部重映射
开启重映射
NVIC相关函数
core_cm3.h
misc.h
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup); void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
中断优先级分组函数 中断参数初始化函数
挂起中断
static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn);
static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn); static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) static __INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn)
解挂中断 IABR
EXTI相关类型名
.
.
GPIO_PortSource取值 typedef struct {
#define GPIO_PortSourceGPIOA #define GPIO_PortSourceGPIOB #define GPIO_PortSourceGPIOC #define GPIO_PortSourceGPIOD #define GPIO_PortSourceGPIOE #define GPIO_PortSourceGPIOF
GPIO_PinSource取值 #defineGPIO_PinSource0 GPIO_PinSource12 #define GPIO_PinSource1 GPIO_PinSource13 #define GPIO_PinSource2 GPIO_PinSource14
uint32_t EXTI_Line;
EXTIMode_TypeDef EXTI_Mode; EXTITrigger_TypeDef EXTI_Trigger;
FunctionalState EXTI_LineCmd;
}EXTI_InitTypeDef;
#define GPIO_PinSource6 #define
#defineGPIO_PinSource7 #define
#define GPIO_PinSource8 #define
#define GPIO_PinSource3 #define GPIO_PinSource9 #define GPIO_PinSource15
#define GPIO_PinSource4 #define GPIO_PinSource10 #define GPIO_PinSource5 #define GPIO_PinSource11
EXTI_Line取值 #define EXTI_Line0
#define EXTI_Line7
#define EXTI_Line14
.