在线时间93 小时
UID13486
注册时间2014-9-1
NXP金币12
TA的每日心情 | 开心 2024-6-13 14:18 |
---|
签到天数: 8 天 连续签到: 1 天 [LV.3]偶尔看看II
高级会员

- 积分
- 927
- 最后登录
- 2025-7-3
|
首先,感谢NXP社区组织的这次活动,幸运的拿到了LPC1768 DEMO板。收到板子也有几天,虽然工作比较忙,任务还是要完成的。先用freeRTOS来点个灯。
开发平台选择常用的MDK,容易上手,要顺利使用freeRTOS在lp1768 demo板上点个灯,下图中的几个pack一定要安装。
安装完后,新建工程,按提示来就好,CMSIS下面core勾上,freeRTOS勾上后,最下面的窗口会提示要勾选的项目,找到后都勾选,直到最下面窗口没有多余提示。
完成后如下图
后面编写main函数和LED驱动相关的文件
//************************************************************************
//config.h文件
//************************************************************************
#ifndef __CONFIG__H
#define __CONFIG__H
#include "stdio.h"
#include "LPC17xx.h"
#include "FreeRTOS.h"
#include "task.h"
#include "GPIO_LPC17xx.h"
#include "PIN_LPC17xx.h"
#include "led.h"
#endif
//************************************************************************
//led.h文件
//************************************************************************
#ifndef __LED__H
#define __LED__H
//LED1
#define LED1_PIN 7
#define LED1_PORT 0
#define LED1_Init() do{ \
GPIO_PortClock(1); \
PIN_Configure(LED1_PORT, LED1_PIN, PIN_FUNC_0, PIN_PINMODE_PULLDOWN, PIN_PINMODE_NORMAL); \
GPIO_SetDir(LED1_PORT, LED1_PIN, GPIO_DIR_OUTPUT); \
LED1_Off(); \
}while(0)
#define LED1_Off() GPIO_PinWrite(LED1_PORT, LED1_PIN, 0)
#define LED1_On() GPIO_PinWrite(LED1_PORT, LED1_PIN, 1)
//LED初始化
extern void LED_Init(void);
#endif
//************************************************************************
//led.c文件
//************************************************************************
#include "config.h"
void LED_Init(void)
{
LED1_Init();
}
//************************************************************************
//main.c文件
//************************************************************************
#include "config.h"
//任务句柄
static TaskHandle_t AppTaskCreate_Handle;
static TaskHandle_t LED_Task_Handle;
//任务堆栈
static StackType_t AppTaskCreate_Stack[128];
static StackType_t LED_Task_Stack[128];
//任务控制块
static StaticTask_t AppTaskCreate_TCB;
static StaticTask_t LED_Task_TCB;
//LED点灯的任务函数
static void LED_Task(void* parameter);
//创建任务
static void AppTaskCreate(void)
{
taskENTER_CRITICAL(); //进入临界区
LED_Task_Handle = xTaskCreateStatic((TaskFunction_t )LED_Task, //任务函数
(const char*)"LED_Task",//任务名称
(uint32_t)128, //任务堆栈大小
(void* )NULL, //传递给任务函数的参数
(UBaseType_t)4, //任务优先级
(StackType_t*)LED_Task_Stack,//任务堆栈
(StaticTask_t*)&LED_Task_TCB);//任务控制块
if (NULL != LED_Task_Handle) /* 创建成功 */
{
printf("LED_Task任务创建成功!\n");
}
else
{
printf("LED_Task任务创建失败!\n");
}
vTaskDelete(AppTaskCreate_Handle); //删除AppTaskCreate任务
taskEXIT_CRITICAL(); //退出临界区
}
static void LED_Task(void* parameter)
{
while(1)
{
LED1_On();
vTaskDelay(100);
LED1_Off();
vTaskDelay(900);
}
}
int main (void)
{
SystemCoreClockUpdate ();
SysTick_Config(SystemCoreClock/100);
LED_Init();
AppTaskCreate_Handle = xTaskCreateStatic((TaskFunction_t )AppTaskCreate,
(const char* )"AppTaskCreate", //任务名称
(uint32_t )128, //任务堆栈大小
(void* )NULL, //传递给任务函数的参数
(UBaseType_t )3, //任务优先级
(StackType_t* )AppTaskCreate_Stack,
(StaticTask_t* )&AppTaskCreate_TCB);
if (NULL != AppTaskCreate_Handle) // 创建成功
{
vTaskStartScheduler(); // 启动任务,开启调度
}
while (1) ;
}
以前用STM32时被坑到过,MDK升级后,更新pack版本,原来可以正常使用的工程出现一堆的错误,为解决这个问题,把工程里的文件整理一下,在项目目录下建立子目录,把相应的文件都复制过来,添加到项目里,再使用Manager Run-Time Environment工具把除CMSIS下的core以外的选项全部去掉。
附上完整项目包:
LPC1768-201903062344.rar
(5.33 MB, 下载次数: 41)
|
|