04_创建声光色影四个任务

一、声明

        这个程序用到了蜂鸣器,"music.c"同时这个文件里面用到了 "driver_passive_buzzer.h"

        用到了RGB全彩LED灯,"driver_Color_led.h"

        用到了C8T6板子上的LED灯,"driver_led.h"   

        用到了红外接收模块,#include "driver_ir_receiver.h"

        #include "driver_rotary_encoder.h"(这个是因为外部中断里面还有一个是旋转编码器,所以我们要添加一下这个头文件)当然BSP里面也要添加外部中断的库

        这四个任务可以同时执行,但因为这四个任务同时在运行,所以每个任务的执行情况都会有所延时,比如蜂鸣器播发的孤勇者就可以很明显的听出很拖沓的声音,如果把其它几个任务都屏蔽掉了节奏就恢复正常了

        自己的程序是04,temp的程序是05

二、CubeMx的配置

(1)基础配置

 

(2)重点配置

        注意这里的TIM的PSC和ARR的数据不同就会影响蜂鸣器的播放以及RGB灯光闪烁的亮度

        蜂鸣器的VCC要用5V

        使用的引脚是PA8的TIM1_CH1 

        RGB全彩LED灯的VCC是5V

        R的引脚是PA2     TM2_CH3

        G的引脚是PA15   TM2_CH1

        B的引脚是PB3     TM2_CH2

 红外接收模块 

 

        当我把Keil里面的文件都处理好了之后,发现按键按下还是没办法显示现象,这个时候才想起来我的CubeMx里面没有配置 

三、Keil5的代码编写

(1)头文件

 

#include "driver_led.h"

#include "driver_lcd.h"

#include "driver_color_led.h"

#include "driver_passive_buzzer.h"
#include "driver_timer.h"

#include "driver_ir_receiver.h"

#include "driver_rotary_encoder.h"

        红色文件只需要在BSP的文件包里面添加,但是不需要在keil里面的BSP里面也添加。蓝色文件需要在Keil里面的BSP文件里面添加,但是不需要包含它的头文件

(2)创建三个任务

创建任务时使用的函数如下: 

BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, // 函数指针, 任务函数
                        const char * const pcName, // 任务的名字
                        const configSTACK_DEPTH_TYPE usStackDepth, // 栈大小,单位为word,10表示40字节
                        void * const pvParameters, // 调用任务函数时传入的参数
                        UBaseType_t uxPriority,    // 优先级
                        TaskHandle_t * const pxCreatedTask ); // 任务句柄, 以后使用它来操作这个任务

使用静态分配内存的函数如下:

TaskHandle_t xTaskCreateStatic ( 
    TaskFunction_t pxTaskCode,   // 函数指针, 任务函数
    const char * const pcName,   // 任务的名字
    const uint32_t ulStackDepth, // 栈大小,单位为word,10表示40字节
    void * const pvParameters,   // 调用任务函数时传入的参数
    UBaseType_t uxPriority,      // 优先级
    StackType_t * const puxStackBuffer, // 静态分配的栈,就是一个buffer
    StaticTask_t * const pxTaskBuffer // 静态分配的任务结构体的指针,用它来操作这个任务
);

相比于使用动态分配内存创建任务的函数,最后2个参数不一样 

 

 /*  创建三个任务  */

	/*声*/
   extern void PlayMusic(void *params);
   ret = xTaskCreate(PlayMusic,"SoundTsak",128,NULL,osPriorityNormal,&xSoundTaskHandle);
  
   /*光*/
   xLightTaskHandle = xTaskCreateStatic(Led_Test,"LightTask",128,NULL,osPriorityNormal,g_pucStackOfLightTask,&g_TCBofLightTask);
                                                                                       
  /*色*/
   xColorTaskHandle = xTaskCreateStatic(ColorLED_Test,"ColorTask",128,NULL,osPriorityNormal,g_pucStackOfColorTask,&g_TCBofColorTask);

(3)写定义变量

TaskHandle_t xSoundTaskHandle;
	BaseType_t ret;
	
	static StackType_t g_pucStackOfLightTask[128];
	static StaticTask_t g_TCBofLightTask;
	static TaskHandle_t xLightTaskHandle;

	static StackType_t g_pucStackOfColorTask[128];
	static StaticTask_t g_TCBofColorTask;
	static TaskHandle_t xColorTaskHandle;

(4)默认任务是红外遥控控制OLED

	IRReceiver_Test();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值