1. 目標, PG13,PG14雙線程雙閃燈。
2. 測試平台
stm32f429i-disco
keil v5.13.0.0
CubeMx 4.8.0
3. 步驟
3.1 打開cube, PG13,13設為輸出, Rcc選外部晶振, 點選FreeRTOS
3.2 時鍾配置界面 enable css, 配置成系統主頻168M
3.3 全部默認設置, 生成代碼。
3.4 配置好的模版大概是這樣的
//void StartDefaultTask(void const * argument); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128); defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL); osKernelStart(); while(1); } /* StartDefaultTask function */ void StartDefaultTask(void const * argument) { /* USER CODE BEGIN 5 */ /* Infinite loop */ for(;;) { osDelay(1); } /* USER CODE END 5 */ }
照貓畫虎填上自己代碼就行了
void blink_ledG(void const *argument); void blink_ledR(void const *argument); main(){ HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14, GPIO_PIN_SET); osThreadDef (ledG, blink_ledG, osPriorityNormal, 0, 128); osThreadDef (ledR, blink_ledR, osPriorityNormal, 0, 128); osThreadCreate(osThread(ledG), NULL); osThreadCreate(osThread(ledR), NULL); osKernelStart(); while (1); } void blink_ledG(void const *argument) { for(;;){ HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_SET); osDelay(500); HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_RESET); osDelay(500); } } void blink_ledR(void const *argument) { for(;;){ HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14, GPIO_PIN_SET); osDelay(250); HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14, GPIO_PIN_RESET); osDelay(250); } }
