一、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 下載配置
四、現象結果