1. 程式人生 > 其它 >STM32標準庫函式記錄

STM32標準庫函式記錄

GPIO

示例

初始化

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; 		//LED0-->PB.5 埠配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 	//推輓輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	//速度 50MHz,只有配置為輸出的IO引腳需要配置速率
GPIO_Init(GPIOB, &GPIO_InitStructure);			//根據設定引數配置 GPIO

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE, 
                       ENABLE); 			//使能 GPIOB,GPIOE 埠時鐘, sys.h

IO口讀寫

GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5);	// IO讀
GPIO_SetBits(GPIOB, GPIO_Pin_5);		// IO寫

PBout(5);	// 對ODR的位操作,返回值是PB.5的電平值,同時可以作為左值接受對PB.5的賦值
PEin(5);	// 對IDR的位操作,返回值是PB.5接收到的電平值,只讀

相關原型說明

初始化函式

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

用於初始化的結構體

typedef struct {
	uint16_t GPIO_Pin;
	GPIOSpeed_TypeDef GPIO_Speed;
	GPIOMode_TypeDef GPIO_Mode;
} GPIO_InitTypeDef;

GPIO_Mode可選模式

typedef enum { 
    GPIO_Mode_AIN = 0x0, 		// 模擬輸入
    GPIO_Mode_IN_FLOATING = 0x04, 	// 浮空輸入
    GPIO_Mode_IPD = 0x28, 		// 下拉輸入
    GPIO_Mode_IPU = 0x48, 		// 上拉輸入
    GPIO_Mode_Out_OD = 0x14, 		// 開漏輸出
    GPIO_Mode_Out_PP = 0x10, 		// 通用推輓輸出
    GPIO_Mode_AF_OD = 0x1C, 		// 複用開漏輸出
    GPIO_Mode_AF_PP = 0x18 		// 複用推輓
} GPIOMode_TypeDef;

GPIO_Speed可選速率

typedef enum {
    GPIO_Speed_10MHz = 1,
    GPIO_Speed_2MHz,
    GPIO_Speed_50MHz
} GPIOSpeed_TypeDef;

GPIO讀寫

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)  	// IO讀
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);		// IO寫 1
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);		// IO寫 0

GPIO時鐘使能

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)

typedef enum {
    DISABLE = 0, 
    ENABLE = !DISABLE
} FunctionalState;

串列埠

示例

串列埠初始化基本步驟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1);	// 時鐘使能
USART_DeInit(USART1);						  // 串列埠復位

USART_InitStructure.USART_BaudRate = bound; 			  // 波特率設定,bound手動傳入
USART_InitStructure.USART_WordLength = USART_WordLength_8b;	  // 字長為 8 位資料格式
USART_InitStructure.USART_StopBits = USART_StopBits_1; 		  // 一個停止位
USART_InitStructure.USART_Parity = USART_Parity_No; 		  // 無奇偶校驗位
USART_InitStructure.USART_HardwareFlowControl 
    = USART_HardwareFlowControl_None; 				  // 無硬體資料流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;   // 收發模式
USART_Init(USART1, &USART_InitStructure); 			  // 初始化串列埠

開啟串列埠接收中斷

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ; 	// 搶佔優先順序 3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; 		// 響應優先順序 3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 		// IRQ 通道使能
NVIC_Init(&NVIC_InitStructure); 				// 中斷優先順序初始化