本文共 4553 字,大约阅读时间需要 15 分钟。
打开 STM32CubeMX 软件,点击“新建工程”。
选择 MCU 和封装。
配置时钟:
配置调试模式:
STM32CubeMX 使用 HAL 库生成的代码:
#define LED_G_Pin GPIO_PIN_0#define LED_G_GPIO_Port GPIOB#define LED_B_Pin GPIO_PIN_1#define LED_B_GPIO_Port GPIOBstatic void MX_GPIO_Init(void){ GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); HAL_GPIO_WritePin(GPIOB, LED_G_Pin|LED_B_Pin, GPIO_PIN_SET); GPIO_InitStruct.Pin = LED_G_Pin|LED_B_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_GPIO_WritePin(GPIOB, LED_G_Pin|LED_B_Pin, GPIO_PIN_SET);}使用 STM32 标准库的代码:
#define LED1_GPIO_PORT GPIOA#define LED1_GPIO_CLK RCC_APB2Periph_GPIOB#define LED1_GPIO_PIN GPIO_Pin_8#define LED2_GPIO_PORT GPIOB#define LED2_GPIO_PIN GPIO_Pin_0void LED_GPIO_Config(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( LED1_GPIO_CLK | LED2_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = LED2_GPIO_PIN; GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure); GPIO_SetBits(LED1_GPIO_PORT, LED1_GPIO_PIN); GPIO_SetBits(LED2_GPIO_PORT, LED2_GPIO_PIN);}代码对应关系:
__HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE();→ RCC_APB2PeriphClockCmd( LED1_GPIO_CLK | LED2_GPIO_CLK, ENABLE);HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);→ GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure);HAL_GPIO_WritePin(GPIOB, LED_G_Pin|LED_B_Pin, GPIO_PIN_SET);→ GPIO_SetBits(LED1_GPIO_PORT, LED1_GPIO_PIN);GPIO_SetBits(LED2_GPIO_PORT, LED2_GPIO_PIN);
int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while(1){ GPIO_SetBits(LED1_GPIO_PORT, LED1_GPIO_PIN); HAL_Delay(1000); GPIO_ResetBits(LED1_GPIO_PORT, LED1_GPIO_PIN); }} STM32CubeMX 使用 HAL 库生成的代码:
#define KEY2_Pin GPIO_PIN_13#define KEY2_GPIO_Port GPIOC#define KEY1_Pin GPIO_PIN_0#define KEY1_GPIO_Port GPIOAstatic void MX_GPIO_Init(void){ GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin = KEY2_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(KEY2_GPIO_Port, &GPIO_InitStruct); GPIO_InitStruct.Pin = KEY1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(KEY1_GPIO_Port, &GPIO_InitStruct);}使用 STM32 标准库的代码:
#define KEY1_GPIO_CLK RCC_APB2Periph_GPIOA#define KEY1_GPIO_PORT GPIOA#define KEY1_GPIO_PIN GPIO_Pin_0#define KEY2_GPIO_CLK RCC_APB2Periph_GPIOC#define KEY2_GPIO_PORT GPIOC#define KEY2_GPIO_PIN GPIO_Pin_13void Key_GPIO_Config(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(KEY1_GPIO_CLK|KEY2_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = KEY1_GPIO_PIN; GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = KEY2_GPIO_PIN; GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(KEY2_GPIO_PORT, &GPIO_InitStructure);}代码对应关系:
__HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE();→ RCC_APB2PeriphClockCmd(KEY1_GPIO_CLK|KEY2_GPIO_CLK, ENABLE);HAL_GPIO_Init(KEY1_GPIO_Port, &GPIO_InitStruct);→ GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStructure);HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin);→ GPIO_ReadInputDataBit(KEY1_GPIO_PORT, KEY1_GPIO_PIN);
int main(void){ uint8_t status = 0; HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while(1){ status = HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin); HAL_Delay(1000); }} USER CODE BEGIN N 和 USER CODE END N 之间,否则下次使用 STM32CubeMX 重新生成代码后,会被删除。转载地址:http://whbq.baihongyu.com/