STM32ベースの音楽プレーヤー
Bilibiliビデオリンク:https://www.bilibili.com/video/BV1cp4y1678G/
データリンク:https://download.csdn.net/download/mbs520/13711787
Baiduネットワークディスクリンク:https:// pan。 baidu.com/s/1G-Q1CA1Px8RSZJtTYjmELw
抽出コード:abcd
好きであることを忘れないでください
1.プロジェクト要件:
ハードウェアドライバー+ソフトウェアツールプロジェクト
プロジェクトに必要な技術:
- UCOSIII
- GUIディスプレイ
- IISプロトコル
- サウンドカードドライバー-提供される情報と参照コード
- SDカードドライバー-提供される情報と参照コード
- Fatfsファイルシステム
- IIC / SPIおよびW25Q128ドライバー
- MCU画面でのフォントライブラリの使用
- mp3およびWAVデコードライブラリの移植と使用-提供される情報と参照コード
- JPGおよびBMPデコードライブラリの移植と使用-提供される情報と参照コード
- DMAの使用
機能は基本的に現在のMP3デバイスと同じです
①SDカードのディレクトリをスキャンして、SDカードドライバの組み込みファイルシステムから音楽ファイル(.mp3.wavなど)を取得できる
②WM8978サウンドカードチップを駆動し、IISを使用してSDカードから読み取ったオーディオデータをサウンドカードに送信し、サウンドカードを制御して音楽を再生します
③MP3プレーヤー関連の情報や
曲名をmcu画面に表示できる。。。。
フォントライブラリを使用して、関連する中国語を表示できます
2.材料の準備
1. 1つのSTM32F4開発ボード(オーディオインターフェイスのサポートが必要)(私が使用するGEC M4)
(プラグインできるLCD画面を購入する必要があることに注意してください。できれば、オンボードwm8978を使用します。そうでない場合は、オーディオドライバーモジュールを接続できます)
機能:マスターチップ、さまざまなデータの処理
または:
+
2. 800 * 480 4.3インチ容量性タッチLCDスクリーン(私が使用するPunctual Atomスクリーン)
(他の解像度の画面とは互換性がないことに注意してください)
機能:ディスプレイとタッチコントロール
3、32G未満のSDカード、カードリーダー
機能:mp3、wavファイル、画像ファイルなどの必要なファイルを保存します。
2.ハードウェア接続
1.画面を開発ボードに接続するだけです
3、ダウンロードしてデバッグ
1.関連情報をダウンロードします
。2 。ソースコードをマイクロコンピュータにダウンロードします
。3。SDカードルートディレクトリファイルをSDカードルートディレクトリにコピーします
。4 。システムの電源を入れ、十分な電力を供給します。そうしないと、画面が半分明るくなり、サウンドカードドライバが異常になります。
写真とボタンコントロールが正常に表示されれば、移植は成功です。
4つの関連する知識ポイント
(1)FATFSファイルシステム(SDカードファイルの読み取りと書き込みに使用されます)
1. FATFSは、完全に無料のオープンソースFATファイルシステムモジュールであり、小規模な組み込みシステム用に特別に設計されています。完全
に標準のC言語で記述されているため、ハードウェアプラットフォームに依存せず、8051、PIC、AVR、SH、
Z80、H8、ARM、およびその他の一連のマイクロプロセッサに簡単な変更で移植できます。FATl2、FATl6、およびFAT32をサポートし、複数のストレージメディアをサポートします。
2.なぜファイルシステムが必要なのですか?
SDカードは一種のメモリであるため、通常の読み取りおよび書き込み操作はアドレスに対してのみ読み取ることができます。読み取られるデータはすべて文字データであり、ファイルの概念はありません。ファイルシステムを追加したSDカードはFATFSファイルを使用できます。たとえば、画像を保存する場合は、ファイルの形式で保存するだけで済みますが、通常の読み取りと書き込みでは、指定されたメモリに画像データを1バイトずつしか保存できません。読み取りは厳密にに基づいている必要があります。読んだ住所の場所
3. Punctuality Atomは、直接移植できる比較的使いやすいFATFSソースコードを提供します。
コードファイルは、Punctuality Atomの公式Webサイトからダウンロードできます。
主なAPI機能は次のとおりです。C言語ファイルIOと同様に、ファイルの読み取りや書き込みなどの一連の操作を実行します。同様に、ファイル名を見て一般的な目的を知る必要があります
(2)MP3プレーヤー
次回書く、眠い〜o〜
(3)画像表示
次回書く、眠い〜o〜
(4)GUIインターフェース
次回書く、眠い〜o〜
5、プログラム表示
いくつかのキーコードを表示します。
#include "stm32f4xx.h"
/* 开始任务 */
//任务优先级
#define START_TASK_PRIO 3
//任务堆栈大小
#define START_STK_SIZE 128
//任务控制块
OS_TCB StartTaskTCB;
//任务堆栈
CPU_STK START_TASK_STK[START_STK_SIZE];
//任务函数
void start_task(void *p_arg);
/* 主任务 */
//任务优先级
#define MAIN_TASK_PRIO 6
//任务堆栈大小
#define MAIN_STK_SIZE 512
//任务控制块
OS_TCB MainTaskTCB;
//任务堆栈
CPU_STK MAIN_TASK_STK[MAIN_STK_SIZE];
//任务函数
void main_task(void *p_arg);
//系统初始化
void sys_init(void)
{
u8 key;
uart_init(115200); //串口初始化
LED_Init(); //LED初始化
KEY_Init();
LCD_Init(); //LCD初始化
FSMC_SRAM_Init(); //SRAM
tp_dev.init(); //触摸初始化
W25QXX_Init(); //初始化W25Q128
gui_init(); //gui初始化
my_mem_init(SRAMIN); //初始化内部内存池
my_mem_init(SRAMEX); //初始化外部内存池
my_mem_init(SRAMCCM); //初始化CCM内存池
exfuns_init(); //为fatfs相关变量申请内存
f_mount(fs[0],"0:",1); //挂载SD卡
f_mount(fs[1],"1:",1); //挂载FLASH.
piclib_init(); //初始化画图
while(font_init()) ; //检查字库
while(WM8978_Init());//检查音频芯片是否正常
}
int main(void)
{
OS_ERR err;
CPU_SR_ALLOC();
delay_init(168); //时钟初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断分组配置
sys_init(); //系统初始化
delay_ms(150);
LCD_Clear(GRAY);//清屏
OSInit(&err); //初始化UCOSIII
OS_CRITICAL_ENTER();//进入临界区
//创建开始任务
OSTaskCreate((OS_TCB * )&StartTaskTCB, //任务控制块
(CPU_CHAR * )"start task", //任务名字
(OS_TASK_PTR )start_task, //任务函数
(void * )0, //传递给任务函数的参数
(OS_PRIO )START_TASK_PRIO, //任务优先级
(CPU_STK * )&START_TASK_STK[0], //任务堆栈基地址
(CPU_STK_SIZE)START_STK_SIZE/10, //任务堆栈深度限位
(CPU_STK_SIZE)START_STK_SIZE, //任务堆栈大小
(OS_MSG_QTY )0, //任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息
(OS_TICK )0, //当使能时间片轮转时的时间片长度,为0时为默认长度,
(void * )0, //用户补充的存储区
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任务选项
(OS_ERR * )&err); //存放该函数错误时的返回值
OS_CRITICAL_EXIT(); //退出临界区
OSStart(&err); //开启UCOSIII
while(1);
}
//主任务
void main_task(void *pdata)
{
while(1)
{
audio_play();//音乐播放器
LCD_Clear(WHITE);
delay_ms(1000);
}
}