實現4個LED流水燈效果。 4個LED依次連接在PA5:7、PB6,麵包板接線如下圖。LED驅動參考另一篇隨筆,從Nucleo 5V輸出埠獲得供電。在通過ST-LINK USB供電的情況下,Nucleo-F303RE最大電流為300mA,除去MCU本身約100mA外,足以供給每個LED所需的約20 ...
實現4個LED流水燈效果。
4個LED依次連接在PA5:7、PB6,麵包板接線如下圖。LED驅動參考另一篇隨筆,從Nucleo 5V輸出埠獲得供電。在通過ST-LINK USB供電的情況下,Nucleo-F303RE最大電流為300mA,除去MCU本身約100mA外,足以供給每個LED所需的約20mA電流。
根據用戶手冊,Nucleo-64 開發板版本MB1136 Rev C-04 從ST-LINK MCO獲得HSE時鐘源,固定8MHz。因此,指定RCC HSE類型為 BYPASS,啟用PLL獲得最大72MHz SYSCLK,如下圖:
GPIO配置如下:
Project源碼結構如下:
main.h 中包含CubeMX 自動生成的GPIO常量定義:
1 #define LED1_Pin GPIO_PIN_5 2 #define LED1_GPIO_Port GPIOA 3 ...
gpio.c中的 MX_GPIO_Init() 函數為GPIO初始化:
1 void MX_GPIO_Init(void) 2 { 3 4 /* GPIO Ports Clock Enable */
5 __HAL_RCC_GPIOA_CLK_ENABLE();
6 7 /*Configure GPIO pin Output Level */ 8 HAL_GPIO_WritePin(GPIOA, LED1_Pin|LED2_Pin|LED3_Pin, GPIO_PIN_RESET); 9 10 GPIO_InitTypeDef GPIO_InitStruct; 11 12 /*Configure GPIO pins : PAPin PAPin PAPin */ 13 GPIO_InitStruct.Pin = LED1_Pin|LED2_Pin|LED3_Pin; 14 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 15 GPIO_InitStruct.Pull = GPIO_NOPULL; 16 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 17 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
18 ... 19 }
GPIO初始化的基本過程是:
- 啟用時鐘
- 置初值
- 配置 GPIO_InitTypeDef,包括操作模式、內部上拉/下拉電阻、速度等
main() 函數主要部分如下:
1 /* Infinite loop */ 2 /* USER CODE BEGIN WHILE */ 3 while (1) 4 { 5 /* USER CODE END WHILE */ 6 7 /* USER CODE BEGIN 3 */ 8 HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin); 9 HAL_Delay(100); 10 HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin); 11 HAL_Delay(100); 12 HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin); 13 HAL_Delay(100); 14 HAL_GPIO_TogglePin(LED4_GPIO_Port, LED4_Pin); 15 HAL_Delay(100); 16 } 17 /* USER CODE END 3 */
-
Cube API小結
-
CMSIS設備介面定義 - stm32f303xe.h
此頭文件定義所有外圍介面記憶體映射地址。
結構 |
GPIO_TypeDef
|
常量 |
GPIOx (GPIOA, GPIOB ...)
|
-
通用HAL模塊 - stm32f3xx_hal.h
函數 |
HAL_Delay()
|
- RCC HAL模塊 - stm32f3xx_hal_rcc.h
函數 |
__HAL_RCC_GPIOx_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
|
- GPIO HAL模塊 - stm32f3xx_hal_gpio.h
結構 |
GPIO_InitTypeDef
|
enum |
GPIO_PinState 枚舉值:
|
函數 | HAL_GPIO_Init() |
HAL_GPIO_ReadPin() | |
HAL_GPIO_WritePin() | |
HAL_GPIO_TogglePin() | |
常量 |
GPIO_PIN_x (GPIO_PIN_0, GPIO_PIN_1 ...)
|