用STM32CubeMX創建FreeRTOS項目


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);
    }        
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM