一、声明
这个程序用到了蜂鸣器,"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();