[AT32F421]

AT32F421 freertos demo

[复制链接]
954|8
手机看帖
扫描二维码
随时随地手机跟帖
muyichuan2012|  楼主 | 2021-1-13 11:50 | 显示全部楼层 |阅读模式
本帖最后由 muyichuan2012 于 2021-1-14 09:18 编辑

  * 1.该工程硬件环境为AT-START-F421 Board.
  * 2.AT32 MCU芯片--AT32F421
  * 3.该工程目的为将FreeRTOS移植到AT32F4系列MCU上,MCU运行时钟为120MHZ.
  * 4.该工程实现了在FreeRTOS上进行任务调度,共3个任务交替运行,可通过串
  *   口的打印输出信息查看任务的运行顺序,也可观察到目标板上的LED等闪烁.

/**
**************************************************************************
* File Name    : main.c
* Description  : None
* Date         : 2019-07-01
* Version      : V1.0.0
**************************************************************************
*/

/* Includes ------------------------------------------------------------------*/
#include <stdio.h>
#include "at32_board.h"
#include "FreeRTOS.h"
#include "task.h"

/* 开始任务优先级 */
#define START_TASK_PRIO                1
/* 开始任务堆栈大小 */
#define START_STK_SIZE                 128  
/* 开始任务任务句柄 */
TaskHandle_t StartTask_Handler;
/* 开始任务入口函数 */
void start_task(void *pvParameters);

/* LED0任务优先级 */
#define LED0_TASK_PRIO                4
/* LED0任务堆栈大小 */
#define LED0_STK_SIZE                 128  
/* LED0任务任务句柄 */
TaskHandle_t LED0Task_Handler;
/* LED0任务入口函数 */
void led0_task(void *pvParameters);

/* LED1任务优先级 */
#define LED1_TASK_PRIO                3
/* LED1任务堆栈大小 */
#define LED1_STK_SIZE                 128  
/* LED1任务任务句柄 */
TaskHandle_t LED1Task_Handler;
/* LED1任务入口函数 */
void led1_task(void *pvParameters);

int main(void)
{
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
  AT32_Board_Init();
  UART_Print_Init(115200);
  /* 创建开始任务 */
  xTaskCreate((TaskFunction_t )start_task,
              (const char*    )"start_task",
              (uint16_t       )START_STK_SIZE,
              (void*          )NULL,
              (UBaseType_t    )START_TASK_PRIO,
              (TaskHandle_t*  )&StartTask_Handler);  
  /* 开启任务调度器 */              
  vTaskStartScheduler();
}

/* 开始任务函数 */
void start_task(void *pvParameters)
{
  /* 进入临界区 */
  taskENTER_CRITICAL();
  /* 创建LED0任务 */
  xTaskCreate((TaskFunction_t )led0_task,            
              (const char*    )"led0_task",           
              (uint16_t       )LED0_STK_SIZE,
              (void*          )NULL,                                
              (UBaseType_t    )LED0_TASK_PRIO,        
              (TaskHandle_t*  )&LED0Task_Handler);   
  /* 创建LED1任务 */
  xTaskCreate((TaskFunction_t )led1_task,     
              (const char*    )"led1_task",   
              (uint16_t       )LED1_STK_SIZE,
              (void*          )NULL,
              (UBaseType_t    )LED1_TASK_PRIO,
              (TaskHandle_t*  )&LED1Task_Handler);         
  /* 删除开始任务 */
  vTaskDelete(StartTask_Handler);
  /* 退出临界区 */
  taskEXIT_CRITICAL();
}

/* LED0任务函数 */
void led0_task(void *pvParameters)
{
    while(1)
    {
      AT32_LEDn_Toggle(LED3);
      printf("LED3 Toggle\r\n");
      vTaskDelay(1000);
    }
}

/* LED1开始任务 */
void led1_task(void *pvParameters)
{
    while(1)
    {
      AT32_LEDn_Toggle(LED2);
      printf("LED2 Toggle\r\n");
      vTaskDelay(500);
    }
}

FreeRTOS_AT32F421.rar

5.46 MB

使用特权

评论回复
hameyou| | 2021-1-13 15:06 | 显示全部楼层
421能跑192Mhz吗? 你这超频会不会不稳定

使用特权

评论回复
评论
muyichuan2012 2021-1-14 09:18 回复TA
不好意思,readme写错了,主频是120MHz 
pattywu| | 2021-1-13 15:47 | 显示全部楼层
FreeRTOS的函数命名方式,不喜欢,效率也不怎么高。
有空,把函数名整整,自己看上去舒服点。

使用特权

评论回复
杨寅辉| | 2021-1-14 22:19 | 显示全部楼层
pattywu 发表于 2021-1-13 15:47
FreeRTOS的函数命名方式,不喜欢,效率也不怎么高。
有空,把函数名整整,自己看上去舒服点。 ...

还是感觉RTT用的舒服,支持也是相当的好的。

使用特权

评论回复
里面有晴雨| | 2021-1-15 17:40 | 显示全部楼层
这个确实是一个好东西,一直想要学习freertos的。没有时间去搞。

使用特权

评论回复
123ycli| | 2021-1-17 15:43 | 显示全部楼层
AT32F4系列MCU上时钟最大可以做到多少呢。可以达到180吗?

使用特权

评论回复
评论
muyichuan2012 2021-3-2 11:39 回复TA
不同型号,其最高主频不同,比如AT32F403A就可以跑到240MHz,而AT32F421则能跑到120MHz 
hbxhang68| | 2021-3-18 20:42 | 显示全部楼层
mark, 学习

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

150

主题

1723

帖子

24

粉丝