一、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 下载配置
四、现象结果