STM32CubeMX開發FreeRTOS stm32f103rbt6例程

一、STM32CubeMX工程

1、基本功能配置

注意:SYS->Timebase Source不要選成SysTick,否則FreeTROS系統始終會與HAL庫時鐘衝突

2、時鐘配置

3、參數配置

4、輸出配置

菜單欄:Project->Setting

5、代碼生成

二、IAR代碼添加編寫(紅黑色字體爲自己添加)

void thread_HelloEmbedded(void const *argument);

void thread_HelloFreeRTOS(void const *argument);

/* USER CODE END 0 */

int main(void)

{

        HAL_Init();

        SystemClock_Config();

        MX_GPIO_Init();

       MX_USART1_UART_Init();

       osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);

        defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);

  

         HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);

        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);

        /*線程定義   線程句柄    所調用執行函數        優先級      ???   分配棧空間 */

        osThreadDef (Embedded, thread_HelloEmbedded, osPriorityNormal, 0, 128);

        osThreadDef (HelloFreeRTOS, thread_HelloFreeRTOS, osPriorityAboveNormal, 0, 128);

       /*啓動線程  */

         osThreadCreate(osThread(Embedded), NULL);

        osThreadCreate(osThread(HelloFreeRTOS), NULL);   

        osKernelStart();           /*啓動內核*/

       while (1)                     /*不會執行到此*/

        {

        }

}

void thread_HelloEmbedded(void const *argument) {

    for(;;){

        /*UART發送*/

        HAL_UART_Transmit(&huart1,"Hello Embedded!\n",16,1000);

        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);

        osDelay(250);                                /*250ms*/

        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);

        osDelay(250);    

    }    

}

void thread_HelloFreeRTOS(void const *argument) {

    for(;;){       

        HAL_UART_Transmit(&huart1,"Hello FreeRTOS!\n",16,1000);

        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);

        osDelay(500);

        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);

        osDelay(500);

 

    }        

}

 

三、JLINK 下載配置

 

四、現象結果

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章