STM32標準庫函式記錄
阿新 • • 發佈:2022-12-04
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); // 中斷優先順序初始化