标题:
RT-Thread工程移植到STM32f103 RTT-RTC做TICK 串口DMA接收源程序
[打印本页]
作者:
312859829
时间:
2019-8-1 21:56
标题:
RT-Thread工程移植到STM32f103 RTT-RTC做TICK 串口DMA接收源程序
初学RT-Thread,官网给的历程大多是HAL库版本的,原来做的项目中都是用的固件库,底层驱动移植起来相当麻烦,于是网上找资料动手移植起来,实现功能:①线程中LED闪烁;②软件定时器回调函数打印“timer1 is timeout”;③串口DMA接收数据,邮箱实现线程同步(信号量本已实现,为了验证邮箱实现同样的功能,屏蔽)并打印接收到的数据。
平台:正点原子精英开发板
全部资料51hei下载地址:
RTT-RTC做TICK.7z
(2.03 MB, 下载次数: 29)
2019-8-2 04:35 上传
点击文件名下载附件
下载积分: 黑币 -5
RT-Thread-串口DMA接收.7z
(846.48 KB, 下载次数: 60)
2019-8-2 04:35 上传
点击文件名下载附件
下载积分: 黑币 -5
STM32单片机源程序如下:
/*
*************************************************************************
* 包含的头文件
*************************************************************************
*/
#include "board.h"
#include "rtthread.h"
#include <string.h>
/*
******************************************************************
* 变量
******************************************************************
*/
/* 定义线程控制块 */
static rt_thread_t usart_thread = RT_NULL;
/* 定义线程控制块 */
static rt_thread_t led1_thread = RT_NULL;
/* 定义信号量控制块 */
rt_sem_t test_sem = RT_NULL;
/* 邮 箱 控 制 块 */
struct rt_mailbox mb;
/* 用 于 放 邮 件 的 内 存 池 */
static char mb_pool[128];
/* 定 时 器 的 控 制 块 */
static rt_timer_t timer1;
/************************* 全局变量声明 ****************************/
/*
* 当我们在写应用程序的时候,可能需要用到一些全局变量。
*/
/* 相关宏定义 */
extern char Usart_Rx_Buf[USART_RBUFF_SIZE];
/*
*************************************************************************
* 函数声明
*************************************************************************
*/
static void usart_thread_entry(void* parameter);
static void led1_thread_entry(void* parameter);
static void timeout1(void *parameter);
/*
*************************************************************************
* main 函数
*************************************************************************
*/
/**
* @brief 主函数
* @param 无
* @retval 无
*/
int main(void)
{
rt_err_t result;
/*
* 开发板硬件初始化,RTT系统初始化已经在main函数之前完成,
* 即在component.c文件中的rtthread_startup()函数中完成了。
* 所以在main函数中,只需要创建线程和启动线程即可。
*/
/* 创建一个信号量 */
//test_sem = rt_sem_create("test_sem",/* 消息队列名字 */
// 0, /* 信号量初始值,默认有一个信号量 */
// RT_IPC_FLAG_FIFO); /* 信号量模式 FIFO(0x00)*/
//if (test_sem != RT_NULL)
//rt_kprintf("信号量创建成功!\n\n");
/* 初 始 化 一 个 mailbox */
result = rt_mb_init(&mb,
"mbt", /* 名 称 是 mbt */
&mb_pool[0], /* 邮 箱 用 到 的 内 存 池 是 mb_pool */
sizeof(mb_pool) / 4, /* 邮 箱 中 的 邮 件 数 目 , 因 为 一 封 邮
件 占 4 字 节 */
RT_IPC_FLAG_FIFO); /* 采 用 FIFO 方 式 进 行 线 程 等 待 */
if (result != RT_EOK)
{
rt_kprintf("init mailbox failed.\n");
return -1;
}
usart_thread = /* 线程控制块指针 */
rt_thread_create( "usart", /* 线程名字 */
usart_thread_entry, /* 线程入口函数 */
RT_NULL, /* 线程入口函数参数 */
512, /* 线程栈大小 */
2, /* 线程的优先级 */
20); /* 线程时间片 */
/* 启动线程,开启调度 */
if (usart_thread != RT_NULL)
rt_thread_startup(usart_thread);
else
return -1;
led1_thread = /* 线程控制块指针 */
rt_thread_create( "led1", /* 线程名字 */
led1_thread_entry, /* 线程入口函数 */
RT_NULL, /* 线程入口函数参数 */
512, /* 线程栈大小 */
3, /* 线程的优先级 */
20); /* 线程时间片 */
/* 启动线程,开启调度 */
if (led1_thread != RT_NULL)
rt_thread_startup(led1_thread);
else
return -1;
/* 创 建 定 时 器 1 周 期 定 时 器 */
timer1 = rt_timer_create("timer1", timeout1,
RT_NULL, 2500,
RT_TIMER_FLAG_PERIODIC);
/* 启 动 定 时 器 1 */
if (timer1 != RT_NULL)
rt_timer_start(timer1);
}
/*
*************************************************************************
* 线程定义
*************************************************************************
*/
static void usart_thread_entry(void* parameter)
{
rt_err_t uwRet = RT_EOK;
char *str;
/* 任务都是一个无限循环,不能返回 */
while (1)
{
//uwRet = rt_sem_take(test_sem, /* 获取串口中断的信号量 */
//-1); /* 等待时间:0 */
uwRet=rt_mb_recv(&mb, (rt_uint32_t *)&str, RT_WAITING_FOREVER);
if(RT_EOK == uwRet)
{
//rt_kprintf("收到数据:%s\n",Usart_Rx_Buf);
rt_kprintf("收到数据:%s\n",str);
memset(Usart_Rx_Buf,0,USART_RBUFF_SIZE);/* 清零 */
}
}
}
static void led1_thread_entry(void* parameter)
{
while (1)
{
LED1_ON;
rt_kprintf("LED1_ON\r\n");
rt_thread_delay(5000); /* 延时500个tick */
LED1_OFF;
rt_kprintf("LED1_OFF\r\n");
rt_thread_delay(5000); /* 延时500个tick */
}
}
/* 定 时 器 2 超 时 函 数 */
static void timeout1(void *parameter)
{
rt_kprintf("timer1 is timeout\n");
}
/********************************END OF FILE****************************/
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1