OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...

查看: 923|回复: 4

点灯成功,发帖自己庆祝一下,并感谢原子团队

[复制链接]

  离线 

2

主题

141

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
266
金钱
266
注册时间
2018-5-14
在线时间
52 小时
发表于 2018-6-12 16:33:22 | 显示全部楼层 |阅读模式
正点原子公众号
经过几天的学习,主要是看原子团队的freeRTOS教程,感觉对freeRTOS有了初步了解,打算并尝试着移植到自己的工程中去。
参考左工的例程,创建了工程,并在之前的产品上实现了按键操作LED灯亮灭,初步点灯成功。
感谢原子团队!感谢左工!感谢freeRTOS团队!


工程目录

工程目录


[C] 纯文本查看 复制代码
#include "stm32f10x.h"
#include "freeRTOS.h"
#include "task.h"
#include "led_task.h"
#include "key_task.h"

int main(void)
{

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);

  /* Add your application code here
     */

	led_task_create();
	key_task_create();
	
	vTaskStartScheduler();
  /* Infinite loop */
	while (1)
	{
	}
}

[C] 纯文本查看 复制代码
#include  "key_task.h"
#include  "key.h"
#include  "led_task.h"


//KEY任务优先级 1
#define KEY_TASK_PRIO		8
//任务堆栈大小
#define KEY_STK_SIZE 		100 
//任务句柄
TaskHandle_t KEYTask_Handler;
//声明
void key_task(void *pvParameters);



void key_task_create(void)
{

	taskENTER_CRITICAL();
	
	key_io_init();
	key_buf_init();
	
	xTaskCreate((TaskFunction_t )key_task,     			//任务函数名
                (const char*    )"key_task",   			//任务名
                (uint16_t       )KEY_STK_SIZE, 			//堆栈大小
                (void*          )NULL,				    //参数
                (UBaseType_t    )KEY_TASK_PRIO,	        //任务优先级
                (TaskHandle_t*  )&KEYTask_Handler);     //任务句柄
	taskEXIT_CRITICAL();
}

void key_task(void *pvParameters)
{
	uint8_t key_data;
	
    while(1)
    {
		key_scan();
		
		if (KeyData)
		{
			key_data = KeyData<<1;
			
			xQueueSend(Led_Queue,&key_data,10);
			key_data = 0;
			KeyData = 0;
		}
		
		vTaskDelay(1);
    }
} 




[AppleScript] 纯文本查看 复制代码
#include "led.h"
#include "led_task.h"


//LED任务优先级 1
#define LED_TASK_PRIO		2
//任务堆栈大小
#define LED_STK_SIZE 		50 
//任务句柄
TaskHandle_t LEDTask_Handler;
//声明
void led_task(void *pvParameters);


#define LED_QUEUE_NUM    4
QueueHandle_t Led_Queue;

void led_task_create(void)
{

	taskENTER_CRITICAL();
	
	led_io_init();
	
	Led_Queue=xQueueCreate(LED_QUEUE_NUM,sizeof(uint8_t)); 

	xTaskCreate((TaskFunction_t )led_task,     			//任务函数名
                (const char*    )"led_task",   			//任务名
                (uint16_t       )LED_STK_SIZE, 			//堆栈大小
                (void*          )NULL,				    //参数
                (UBaseType_t    )LED_TASK_PRIO,	        //任务优先级
                (TaskHandle_t*  )&LEDTask_Handler);     //任务句柄
	taskEXIT_CRITICAL();
}

void led_task(void *pvParameters)
{
	uint8_t ledOutData=0;
	uint8_t ledFlashData=0;
	uint8_t ledQueueRece;
	
	// taskENTER_CRITICAL();
	// led_io_init();
	// taskEXIT_CRITICAL();
	
    while(1)
    {
		ledFlashData ^= 0x01;
		
		if (xQueueReceive(Led_Queue,&ledQueueRece,0))
		{
		
			ledOutData = (ledQueueRece&0xfe)|(ledFlashData&0x01);
			
		}
		else
		{
			ledOutData = (ledOutData&0xfe)|(ledFlashData&0x01);
		}
		
		led_switch(ledOutData);
		vTaskDelay(20);
    }
} 




回复

使用道具 举报

  离线 

2

主题

141

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
266
金钱
266
注册时间
2018-5-14
在线时间
52 小时
 楼主| 发表于 2018-6-12 16:37:19 | 显示全部楼层
本帖最后由 kvdong 于 2018-6-12 16:39 编辑

drivers目录下是原来产品的文件,系统直接引用了。不过按键里面用到了全局变量,回头要处理一下。
万里长征的第一步终于走出来了,还是值得高兴一下下的PS:貌似主贴里没有感谢意法团队,在这补上吧,虽然使用意法的产品是付费了的。
回复 支持 反对

使用道具 举报

  离线 

74

主题

6612

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
13194
金钱
13194
注册时间
2013-11-13
在线时间
1531 小时
发表于 2018-6-12 18:31:44 | 显示全部楼层
客气了,恭喜用起来了
开往春天的手扶拖拉机
回复 支持 反对

使用道具 举报

  离线 

2

主题

141

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
266
金钱
266
注册时间
2018-5-14
在线时间
52 小时
 楼主| 发表于 2018-6-12 20:08:59 | 显示全部楼层
zuozhongkai 发表于 2018-6-12 18:31
客气了,恭喜用起来了

只是初步了解了一些,路还很长啊
回复 支持 反对

使用道具 举报

  离线 

505

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
131579
金钱
131579
注册时间
2010-12-1
在线时间
1209 小时
发表于 2018-6-13 00:30:56 | 显示全部楼层
正点原子公众号
恭喜恭喜
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




关闭

必看:"原子哥”力荐上一条 /1 下一条

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-8-19 19:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */