STM32相关知识点总结讲解
- 格式:doc
- 大小:103.01 KB
- 文档页数:8
GPIO篇GPIO寄存器端口配置低位寄存器CRL; 32位端口配置高位寄存器CRH; 32位端口输入数据寄存器IDR; 32位端口输出数据寄存器ODR; 32位置位/复位寄存器BSRR; 32位复位寄存器BRR; 16位锁定寄存器LCKR; 32位GPIO库函数stm32f10x_gpio.hvoid 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; GPIOSpeed_TypeDef GPIO_Speed; __IO uint32_t IDR; GPIOMode_TypeDef GPIO_Mode; __IO uint32_t ODR; }GPIO_InitTypeDef;__IO uint32_t BSRR; typedef enum__IO uint32_t BRR; { Bit_RESET = 0,__IO uint32_t LCKR; Bit_SET} GPIO_TypeDef;}BitAction;GPIO_Pin取值#define GPIO_Pin_0 #define GPIO_Pin_6 #define GPIO_Pin_12 #define GPIO_Pin_1 #define GPIO_Pin_7 #define GPIO_Pin_13 #define GPIO_Pin_2 #define GPIO_Pin_8 #define GPIO_Pin_14 #define GPIO_Pin_3 #define GPIO_Pin_9 #define GPIO_Pin_ 15 #define GPIO_Pin_4 #define GPIO_Pin_10 #define GPIO_Pin_All #define GPIO_Pin_5 #define GPIO_Pin_11中断篇NVIC相关寄存器AIRCR寄存器P139中断使能设置寄存器ISER VECTKEY 31:16D R/W中断使能清除寄存器ICER ENDIANESS 15D R中断悬挂设置寄存器ISPR PRIGROUP 10:8D R/W中断悬挂清除寄存器ICPR SYSRESETREQ 2D W中断激活位寄存器IABR VECTCLRACTIVE 1D W中断优先级寄存器IP VECTRESET 0D W软件触发中断寄存器STIRTVOR寄存器P138TBLBASE 29段R/WTBLOFF 28:7段R 向量表起始地址EXTI相关寄存器中断屏蔽寄存器EXTI_IMR 设置是否屏蔽中断请求线上的中断请求事件屏蔽寄存器EXTI_EMR 设置是否屏蔽事件请求线上的中断请求上升沿触发选择寄存器EXTI_RTSR 设置是否用上升沿来触发中断和事件下降沿触发选择寄存器EXTI_FTSR 设置是否用下降沿来触发中断和事件软件中断事件寄存器EXTI_SWIER 用于软件触发中断/事件挂起寄存器EXTI_PR 用于保存中断/事件请求线上是否有请求AFIO寄存器AFIO_EVCR 事件控制寄存器AFIO_EXTICRx 外部中断配置寄存器AFIO_MAPR 复用重映射和调试I/O配置寄存器系统控制寄存器SCB p138EXTI相关库函数stm32f10x_exti.hvoid 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.hRCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 使能AFIO时钟GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE); 开启重映射根据第一个参数,来确定是部分重映射还是全部重映射NVIC相关函数core_cm3.h misc.hvoid 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) IABREXTI相关类型名GPIO_PortSource取值typedef struct#define GPIO_PortSourceGPIOA {#define GPIO_PortSourceGPIOB uint32_t EXTI_Line;#define GPIO_PortSourceGPIOC EXTIMode_TypeDef EXTI_Mode;#define GPIO_PortSourceGPIOD EXTITrigger_TypeDef EXTI_Trigger;#define GPIO_PortSourceGPIOE FunctionalState EXTI_LineCmd;#define GPIO_PortSourceGPIOF }EXTI_InitTypeDef;GPIO_PinSource取值#defineGPIO_PinSource0 #define GPIO_PinSource6 #define GPIO_PinSource12 #define GPIO_PinSource1 #defineGPIO_PinSource7 #define GPIO_PinSource13 #define GPIO_PinSource2 #define GPIO_PinSource8 #define GPIO_PinSource14 #define GPIO_PinSource3 #define GPIO_PinSource9 #define GPIO_PinSource15 #define GPIO_PinSource4 #define GPIO_PinSource10#define GPIO_PinSource5 #define GPIO_PinSource11EXTI_Line取值#define EXTI_Line0 #define EXTI_Line7 #define EXTI_Line14#define EXTI_Line1 #define EXTI_Line8 #define EXTI_Line15#define EXTI_Line2 #define EXTI_Line9 #define EXTI_Line16#define EXTI_Line3 #define EXTI_Line10 #define EXTI_Line17#define EXTI_Line4 #define EXTI_Line11 #define EXTI_Line18#define EXTI_Line5 #define EXTI_Line12 #define EXTI_Line19#define EXTI_Line6 #define EXTI_Line13typedef struct typedef enum typedef enum p145 { { {__IO uint32_t IMR; EXTI_Mode_Interrupt = 0x00, EXTI_Trigger_Rising = 0x08,__IO uint32_t EMR; EXTI_Mode_Event = 0x04 EXTI_Trigger_Falling = 0x0C,__IO uint32_t RTSR; }EXTIMode_TypeDef;EXTI_Trigger_Rising_Falling = 0x10 __IO uint32_t FTSR; }EXTITrigger_TypeDef;__IO uint32_t SWIER;__IO uint32_t PR;} EXTI_TypeDef;typedef struct NVIC_PriorityGroup取值{ #define NVIC_PriorityGroup_0uint8_t NVIC_IRQChannel; #define NVIC_PriorityGroup_1uint8_t NVIC_IRQChannelPreemptionPriority; #define NVIC_PriorityGroup_2uint8_t NVIC_IRQChannelSubPriority; #define NVIC_PriorityGroup_3 FunctionalState NVIC_IRQChannelCmd; #define NVIC_PriorityGroup_4} NVIC_InitTypeDef;AFIO相关类型名typedef struct{__IO uint32_t EVCR;__IO uint32_t MAPR;__IO uint32_t EXTICR[4];__IO uint32_t MAPR2;} AFIO_TypeDef;USART篇USART相关寄存器状态寄存器USART_SR 反映USART单元状态数据寄存器USART_DR 用于保存接收或发送的数据波特比率寄存器USART_BRR 用于设置USART的波特率控制寄存器1 USART_CR1 用于控制USART控制寄存器2 USART_CR2 用于控制USART控制寄存器3 USART_CR3 用于控制USART保护时间和预分频寄存器USART_GTPR 保护时间和预分频USART相关库函数stm32f10x_usart.hvoid USART_Init(); 串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能void USART_Cmd(); 使能串口void USART_ITConfig(); 使能相关中断void USART_SendData(); 发送数据到串口,DRvoid USART_ClearFlag(); 清除状态标志位void USART_ClearITPendingBit(); 清除中断状态标志位uint16_t USART_ReceiveData(); 接受数据,从DR读取接受到的数据FlagStatus USART_GetFlagStatus(); 获取状态标志位ITStatus USART_GetITStatus(); 获取中断状态标志位USART_DeInit(); 串口复位FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);串口传输状态获取typedef struct p168 t ypedef struct{ {__IO uint16_t SR; uint32_t USART_BaudRate; 波特率__IO uint16_t DR; uint16_t USART_WordLength; 字长__IO uint16_t BRR; uint16_t USART_StopBits; 停止位长度__IO uint16_t CR1; uint16_t USART_Parity; 奇偶校验__IO uint16_t CR2; uint16_t USART_Mode; 接收或发送模式__IO uint16_t CR3; uint16_t USART_HardwareFlowControl; 硬件流控制__IO uint16_t GTPR; } USART_InitTypeDef;}USART_TypeDef;typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;USART_IT取值#define USART_IT_PE #define USART_IT_IDLE #define USART_IT_ORE #define USART_IT_TXE #define USART_IT_LBD #define USART_IT_NE#define USART_IT_TC #define USART_IT_CTS #define USART_IT_FE#define USART_IT_RXNE #define USART_IT_ERRUSART_FLAG取值typedef struct p169#define USART_FLAG_CTS #define USART_FLAG_IDLE { uint16_t USART_Clock #define USART_FLAG_LBD #define USART_FLAG_ORE uint16_t USART_CPOL; #define USART_FLAG_TXE #define USART_FLAG_NE uint16_t USART_CPHA; #define USART_FLAG_TC #define USART_FLAG_FE uint16_t USART_LastBit; #define USART_FLAG_RXNE #define USART_FLAG_PE } USART_ClockInitTypeDef;通用定时器篇TIMx相关寄存器p189计数器当前值寄存器CNT预分频寄存器TIMx_PSC自动重装载寄存器TIMx_ARR控制寄存器1 TIMx_CR1控制寄存器2 TIMx_CR2DMA中断使能寄存器TIMx_DIERTIMx相关库函数stm32f10x_tim.hvoid TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);定时器参数初始化void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState) 定时器使能函数状态标志位获取和清除FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);TIMx相关类型名TIM_TypeDef p191typedef struct TIM_IT取值{ #define TIM_IT_Update #define TIM_IT_CC4uint16_t TIM_Prescaler; #define TIM_IT_CC1 #define TIM_IT_COMuint16_t TIM_CounterMode; #define TIM_IT_CC2 #define TIM_IT_Trigger uint16_t TIM_Period; #define TIM_IT_CC3 #define TIM_IT_Breakuint16_t TIM_ClockDivision;uint8_t TIM_RepetitionCounter;} TIM_TimeBaseInitTypeDef;TIM_FLAG取值#define TIM_FLAG_Update #define TIM_FLAG_CC4 #define TIM_FLAG_CC1OF #define TIM_FLAG_CC1 #define TIM_FLAG_COM #define TIM_FLAG_CC2OF #define TIM_FLAG_CC2 #define TIM_FLAG_Trigger #define TIM_FLAG_CC3OF #define TIM_FLAG_CC3 #define TIM_FLAG_Break #define TIM_FLAG_CC4OFRTC篇RTC相关寄存器P210RTC控制寄存器(RTC_CRH,RTC_CRL)RTC预分频装载寄存器(RTC_PRLH,RTC_PRLL)RTC预分频余数寄存器(RTC_DIVH,RTC_DIVL)RTC计数器寄存器(RTC_CNTH,RTC_CNTL)RTC闹钟寄存器(RTC_ALRH ,RTC_ALRL)备份寄存器BKP_DRx(x=11~42)RTC相关库函数stm32f10x_rtc.h stm32f10x_pwr.h stm32f10x_rcc.h stm32f10x_bkp.hvoid RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState); RTC中断设置函数void RTC_EnterConfigMode(void); 允许RTC配置:CRL位CNFvoid RTC_ExitConfigMode(void); 退出配置模式: CRL位CNFvoid RTC_SetCounter(uint32_t CounterValue); 设置计数器值:CNTH/CNTLvoid RTC_SetPrescaler(uint32_t PrescalerValue); 预分频配置:PRLH/PRLLvoid RTC_SetAlarm(uint32_t AlarmValue); 闹钟设置:ALRH/ALRLvoid RTC_WaitForLastTask(void); 等待上次操作完成:CRL位RTOFFvoid RTC_WaitForSynchro(void); 等待时钟同步:CRL位RSFvoid RTC_ClearITPendingBit(uint16_t RTC_IT);void RTC_ClearFlag(uint16_t RTC_FLAG);void RCC_RTCCLKConfig(uint32_t CLKSource);//时钟源选择void RCC_RTCCLKCmd(FunctionalState NewState) //时钟使能FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG);ITStatus RTC_GetITStatus(uint16_t RTC_IT);uint32_t RTC_GetCounter(void);uint32_t RTC_GetDivider(void);PWR_BackupAccessCmd(); //BKP后备区域访问使能RCC_APB1PeriphClockCmd() //使能PWR和BKP时钟RCC_LSEConfig(); //开启LSE,RTC选择LSE作为时钟源uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR); //读BKP寄存器void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data); //写BKPRTC相关类型名RTC_IT取值RCC_LSE取值BKP_DR取值#define RTC_IT_OW #define RCC_LSE_OFF #define BKP_DR1#define RTC_IT_ALR #define RCC_LSE_ON .....#define RTC_IT_SEC #define RCC_LSE_Bypass #define BKP_DR42RTC_FLAG取值RCC_RTCCLKSource取值#define RTC_FLAG_RTOFF #define RCC_RTCCLKSource_LSE#define RTC_FLAG_RSF #define RCC_RTCCLKSource_LSI#define RTC_FLAG_OW #define RCC_RTCCLKSource_HSE_Div128 #define RTC_FLAG_ALR#define RTC_FLAG_SEC。