【STM32U385RG 测评】6、freeRTOS任务及队列
目标实现freeRTOS任务及队列处理一、STM32CuteMX配置
新建一个工程
1、勾选bsp
2、确认是否安装STMicoelectronics X-CUBE-FREEROTS
Software Packs->Select Compoments
查看STMicoelectronics X-CUBE-FREEROTS,如果没有安装,进行安装。
并选择core、heap
3、SYS选择TIM6
避免和rtos冲突
4、勾选RTOS2
5、CMSIS RTOS2增加任务和队列
生成工程,打开工程,freeRTOS源码已经添加到工程中了
二、软件部分
1、系统已经生成了初始化代码
myQueue01Handle = osMessage2QueueNew (16, sizeof(uint16_t), &myQueue01_attributes);
/* USER CODE BEGIN RTOS_QUEUES */
/* add queues, ... */
/* USER CODE END RTOS_QUEUES */
/* creation of defaultTask */
defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
/* creation of UartTask */
UartTaskHandle = osThreadNew(UartTask, NULL, &UartTask_attributes);
2、点灯Task
void StartDefaultTask(void *argument)
{
/* USER CODE BEGIN defaultTask */
/* Infinite loop */
for(;;)
{
BSP_LED_Toggle(LED_GREEN);
osDelay(1000);
}
/* USER CODE END defaultTask */
}3、UART任务
void UartTask(void *argument)
{
/* USER CODE BEGIN UartTask */
uint16_t receivedMsg;
/* Infinite loop */
for(;;)
{
printf("STM32U385RG FreeRtos test\r\n");
if (osMessageQueueGet(myQueue01Handle, &receivedMsg, NULL, 0) == osOK) {
printf("Received: %d\n", receivedMsg);
}
osDelay(1000);
}
/* USER CODE END UartTask */
}此任务中,会从队列myQueue01Handle中获取消息,如果获取成功,打印。
同时,打印“STM32U385RG FreeRtos test”
4、USER BUTTON回调函数
按下USER BUTTON,向队列myQueue01Handle中写入event值。
void BSP_PB_Callback(Button_TypeDef Button)
{
static uint16_t event=0;
osStatus_t status;
static uint32_t last_time = 0;
uint32_t now = HAL_GetTick();
// 消抖时间阈值,通常10-50ms
if((now - last_time) < 20) return;
last_time = now;
if(Button==BUTTON_USER)
{
if (myQueue01Handle == NULL) {
printf("Error: Queue not initialized!\n");
return;
}
if (osMessageQueueGetSpace(myQueue01Handle) > 0) {
status =osMessageQueuePut(myQueue01Handle, &event, 0, 0);
}
if (status == osErrorParameter) {
printf("Error: Invalid parameter in osMessageQueuePut!\n");
} else if (status == osOK) {
printf("Message sent: %d\n", event);
}
event++;
}
}
三、运行
1、翻转LED;2、UART输出“STM32U385RG FreeRtos test”;3、按下USER BUTTON,UART输出event数值
freeRTOS任务及队列学习一下
页:
[1]