打印
[其他]

【MM32F5270开发板试用】+Freertos(+1.8寸TFT)

[复制链接]
5416|55
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一、mindsdk
灵动官网的mindsdk就是一个在线生成工程的一个网页,可以下载方存放的例子以及相应API介绍,主页面如下所示。



接下来设置Host OS,工具链以及板子型号,这里支持的板子型号不多。



二、freertos
首先准备一个例程,这是使用mindsdk生成的一个基础工程,这里值得注意的是,由于这个板子使用的是AC6,工程最好别放在有中文路径的地方,放在有中文的路径下你会发现不能进行跳转功能。接下里就可以添加Freertos的源码了,如下所示。



这里主要的就是接口部分,使用的Armv8-M的接口部分,内存管理随便选一个就可以了。



由于刚才只添加了源码,还需要进行配置文件的编写,这里的配置文件我首先是使用了之前移植过的配置文件,将配置文件添加进去后会报错,将报错的地方进行一一修改就可以了,编译器会提示报错地方,根据报错的地方添加头文件,下面是我已经弄好的。

#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H

#define configENABLE_FPU    0
#define configENABLE_MPU 0
#define configENABLE_TRUSTZONE 0


#define configUSE_PREEMPTION            1
#define configUSE_IDLE_HOOK                0
#define configUSE_TICK_HOOK                0
#define configCPU_CLOCK_HZ                ( 120000000 )
#define configTICK_RATE_HZ                ( ( TickType_t ) 1000 )
#define configMAX_PRIORITIES            ( 15 )
#define configMINIMAL_STACK_SIZE        ( ( unsigned short ) 600 )
#define configTOTAL_HEAP_SIZE            ( ( size_t ) ( 10*1024 ) )
#define configMAX_TASK_NAME_LEN            ( 5 )
#define configUSE_TRACE_FACILITY        1
#define configUSE_16_BIT_TICKS            0
#define configIDLE_SHOULD_YIELD            1
#define configUSE_MUTEXES                1
#define configQUEUE_REGISTRY_SIZE        8
#define configCHECK_FOR_STACK_OVERFLOW    0
#define configUSE_RECURSIVE_MUTEXES        1
#define configUSE_MALLOC_FAILED_HOOK    0
#define configUSE_APPLICATION_TASK_TAG    0
#define configUSE_COUNTING_SEMAPHORES    1
#define configGENERATE_RUN_TIME_STATS    0

/* Co-routine definitions. */
#define configUSE_CO_ROUTINES             0
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
#define configMAX_SYSCALL_INTERRUPT_PRIORITY        191

/* Software timer definitions. */
#define configUSE_TIMERS                0
#define configTIMER_TASK_PRIORITY        ( 2 )
#define configTIMER_QUEUE_LENGTH        5
#define configTIMER_TASK_STACK_DEPTH    ( 80 )

/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. */
#define INCLUDE_vTaskPrioritySet        1
#define INCLUDE_uxTaskPriorityGet        1
#define INCLUDE_vTaskDelete                1
#define INCLUDE_vTaskCleanUpResources    1
#define INCLUDE_vTaskSuspend            1
#define INCLUDE_vTaskDelayUntil            1
#define INCLUDE_vTaskDelay                1


#define xPortSysTickHandler SysTick_Handler
#define xPortPendSVHandler    PendSV_Handler
#define vPortSVCHandler SVC_Handler

#endif /* FREERTOS_CONFIG_H */



接下来就可以创建线程了,如下所示。

#include <stdint.h>
#include <stdio.h>
#include "FreeRTOS.h"
#include "task.h"
#include "QDTFT_demo.h"
#include "Lcd_Driver.h"
#include "GUI.h"
#include "board_init.h"
#include <string.h>
#include "Timer1.h"
#include "arm_math.h"
#include "math.h"


//任务堆栈大小
#define LED_TASK_STACK              512
#define ESP_TASK_STACK              1024

//任务优先级
#define LED_TASK_PRIORITY            3
#define ESP_TASK_PRIORITY            5


xTaskHandle startTask;
xTaskHandle LEDTask;
xTaskHandle ESPTask;


portTASK_FUNCTION(vLEDTask, pvParameters)
{
    while(1)
    {

        GPIO_WriteBit(BOARD_LED0_GPIO_PORT, BOARD_LED0_GPIO_PIN, 1u);
        GPIO_WriteBit(BOARD_LED1_GPIO_PORT, BOARD_LED1_GPIO_PIN, 1u);
        vTaskDelay(500);
        GPIO_WriteBit(BOARD_LED0_GPIO_PORT, BOARD_LED0_GPIO_PIN, 0u);
        GPIO_WriteBit(BOARD_LED1_GPIO_PORT, BOARD_LED1_GPIO_PIN, 0u);
        vTaskDelay(500);
    }
}

portTASK_FUNCTION(vESPTask, pvParameters)
{   

    while(1)
    {

        QDTFT_Test_Demo();

//        vTaskDelay(500);
    }
}


**/
*函 数 名: vStartTask
*功能说明: 系统启动任务,调用各类初始化函数,并创建消息队列和要运行的用户任务
*形    参: 无
*返 回 值: 无
/**
portTASK_FUNCTION(vStartTask, pvParameters)
{
    xTaskCreate(vLEDTask, (char const*)"SensorReadTask",LED_TASK_STACK, NULL, LED_TASK_PRIORITY, &LEDTask);
    xTaskCreate(vESPTask, (char const*)"SensorUpdateTask",ESP_TASK_STACK, NULL,ESP_TASK_PRIORITY, &ESPTask);
    //删除本任务
    vTaskDelete(NULL);
}
**

int main(void)
{
    BOARD_Init();
    //创建启动任务
    xTaskCreate(vStartTask, "startTask", 128, NULL, 0, &startTask);
    //OS调度器启动
    vTaskStartScheduler();


}


三、1.8寸TFT
在这块款子上设计了屏幕接口,有个屏幕看起来确实养眼一点,但是看了一下价格不低,也没找到其他可以替换的屏幕,我找了找之前的元器件,正好翻到之前9.9元买的1.8寸的TFT屏,看了一下接口,电源刚好能对的上,插上接口也刚好,只要电源接口合适其他的口就用I/O口来模拟。



程序部分,I/O初始化

void LCD_GPIO_Init(void)
{

     GPIO_Init_Type gpio_init;

    RCC_EnableAHB1Periphs(RCC_AHB1_PERIPH_GPIOD, true);
    RCC_ResetAHB1Periphs(RCC_AHB1_PERIPH_GPIOD);

    RCC_EnableAHB1Periphs(RCC_AHB1_PERIPH_GPIOE, true);
    RCC_ResetAHB1Periphs(RCC_AHB1_PERIPH_GPIOE);

    RCC_EnableAHB1Periphs(RCC_AHB1_PERIPH_GPIOG, true);
    RCC_ResetAHB1Periphs(RCC_AHB1_PERIPH_GPIOG);

    gpio_init.Pins  = GPIO_PIN_4| GPIO_PIN_5;
    gpio_init.PinMode  = GPIO_PinMode_Out_PushPull;
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOD, &gpio_init);

    gpio_init.Pins  = GPIO_PIN_2| GPIO_PIN_3;
    gpio_init.PinMode  = GPIO_PinMode_Out_PushPull;
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOE, &gpio_init);

    gpio_init.Pins  = GPIO_PIN_12|GPIO_PIN_11;
    gpio_init.PinMode  = GPIO_PinMode_Out_PushPull;
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOG, &gpio_init);

}


修改头文件

/********************************************************************************/
//              GND   电源地
//              VCC   接5V或3.3v电源
//              SCL   接PD4(SCL)
//              SDA   接PD5(SDA)
//              RES   接PE2
//              DC    接PG11
//              CS    接PG12
//                BL      接PE3
/*******************************************************************************/
#ifndef   LCD_DRIVE_H
#define   LCD_DRIVE_H

#include "stdint.h"
#include "board_init.h"

#define RED      0xf800
#define GREEN    0x07e0
#define BLUE     0x001f
#define WHITE    0xffff
#define BLACK    0x0000
#define YELLOW  0xFFE0
#define GRAY0   0xEF7D       //灰色0 3165 00110 001011 00101
#define GRAY1   0x8410          //灰色1      00000 000000 00000
#define GRAY2   0x4208          //灰色2  1111111111011111


#define LCD_CTRLD             GPIOD        //定义TFT数据端口
#define LCD_CTRLE             GPIOE        //定义TFT数据端口
#define LCD_CTRLG             GPIOG        //定义TFT数据端口


#define LCD_SCL            GPIO_PIN_4    //PD4--->>TFT --SCL/SCK
#define LCD_SDA            GPIO_PIN_5    //PD5 MOSI--->>TFT --SDA/DIN
#define LCD_RST         GPIO_PIN_2    //PE2--->>TFT --RST

#define LCD_RS             GPIO_PIN_11    //PG11--->>TFT --RS/DC
#define LCD_CS            GPIO_PIN_12  //PG12--->>TFT --CS
#define LCD_LED            GPIO_PIN_3  //PE3--->>TFT --BL

//#define LCD_CS_SET(x) LCD_CTRL->ODR=(LCD_CTRL->ODR&~LCD_CS)|(x ? LCD_CS:0)

//液晶控制口置1操作语句宏定义
#define    LCD_SCL_SET      LCD_CTRLD->BSRR=LCD_SCL   
#define    LCD_SDA_SET      LCD_CTRLD->BSRR=LCD_SDA  
#define    LCD_RST_SET      LCD_CTRLE->BSRR=LCD_RST

#define    LCD_RS_SET      LCD_CTRLG->BSRR=LCD_RS
#define    LCD_CS_SET      LCD_CTRLG->BSRR=LCD_CS
#define    LCD_LED_SET      LCD_CTRLE->BSRR=LCD_LED  
//液晶控制口置0操作语句宏定义
#define    LCD_SCL_CLR      LCD_CTRLD->BRR=LCD_SCL  
#define    LCD_SDA_CLR      LCD_CTRLD->BRR=LCD_SDA  
#define    LCD_RST_CLR      LCD_CTRLE->BRR=LCD_RST

#define    LCD_RS_CLR      LCD_CTRLG->BRR=LCD_RS
#define    LCD_CS_CLR      LCD_CTRLG->BRR=LCD_CS
#define    LCD_LED_CLR      LCD_CTRLE->BRR=LCD_LED

#define LCD_DATAOUT(x) LCD_DATA->ODR=x; //数据输出
#define LCD_DATAIN     LCD_DATA->IDR;   //数据输入


接下来就可以运行已经写好的屏幕程序了。

四、总结
板子外设挺丰富的,官方给的只有一些基础的外设,对以太网还没支持。我自己也试着弄了一下,结果没弄出来,还有就是官方的例程对程序没有注释,这个不太好。总体来说用着还不错,希望官方能把rtt给支持起来就好了。
————————————————
版权声明:本文为CSDN博主「极术社区」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_47569031/article/details/127426905

使用特权

评论回复
沙发
claretttt| | 2023-3-2 16:09 | 只看该作者
freertos 怎样控制任务创建的先后

使用特权

评论回复
板凳
sesefadou| | 2023-3-2 16:50 | 只看该作者
freertos时实系统的栈最大是多少

使用特权

评论回复
地板
lihuami| | 2023-3-2 16:56 | 只看该作者
可以移植freertos操作系统吗

使用特权

评论回复
5
claretttt| | 2023-3-3 21:54 | 只看该作者
FreeRTOS堆分配大小对任务数的影响?

使用特权

评论回复
6
beacherblack| | 2023-3-3 22:07 | 只看该作者
freertos与裸机有什么优势

使用特权

评论回复
7
ulystronglll| | 2023-3-3 22:12 | 只看该作者
FreeRTOS和UCOSIII哪个更适合  

使用特权

评论回复
8
1988020566| | 2023-3-3 22:18 | 只看该作者
FreeRTOS可以运行多少个实例

使用特权

评论回复
9
sheflynn| | 2023-3-4 21:14 | 只看该作者
freertos如何在一个任务中删除另一个任务

使用特权

评论回复
10
macpherson| | 2023-3-4 21:25 | 只看该作者
freertos怎么添加log

使用特权

评论回复
11
fengm| | 2023-3-4 21:37 | 只看该作者
跑 FreeRTOS 要多大的Flash比较好?

使用特权

评论回复
12
burgessmaggie| | 2023-3-4 22:00 | 只看该作者
freertos 的main函数在什么位置

使用特权

评论回复
13
juliestephen| | 2023-3-4 22:05 | 只看该作者
FreeRTOS 移栽要点怎么解决

使用特权

评论回复
14
wangdezhi| | 2023-3-4 22:46 | 只看该作者
使用freertos的时候能不能使用定时器

使用特权

评论回复
15
cemaj| | 2023-3-5 10:10 | 只看该作者
FreeRTOS队列               

使用特权

评论回复
16
lzbf| | 2023-3-5 10:22 | 只看该作者
freertos 的main函数在什么位置

使用特权

评论回复
17
mikewalpole| | 2023-3-5 10:32 | 只看该作者
freertos支持https协议么  

使用特权

评论回复
18
i1mcu| | 2023-3-5 11:01 | 只看该作者
用FreeRTOS,使用队列怎么发送一个结构体

使用特权

评论回复
19
everyrobin| | 2023-3-5 11:22 | 只看该作者
freertos要学多长时间              

使用特权

评论回复
20
averyleigh| | 2023-3-5 11:59 | 只看该作者
freertos怎么添加log

使用特权

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

本版积分规则

148

主题

4100

帖子

5

粉丝