请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR4133 大家好、我正在尝试将 MSP430与外置迷你 MP3音频播放器连接起来。 不过、我不明白为什么该代码未播放我连接的 SD 卡上存储的任何音频文件、 硬件本身的功能确实很好、因为我可以使用按钮等来运行音频文件。但是、每当数据通过 MSP 发送到播放器本身时、就不会有输出。
这里是我的 main.c 文件。
我还上传了我的 DFP.c 和 DFPlayer.h 代码、该代码来源于 Github。
#include <msp430.h>
#include <intrinsics.h>
#include <stdlib.h>
#include <DFPlayer.h>
void Uart_Init(void) {
P1SEL0 |= BIT0 | BIT1; // Set P1.0 and P1.1 to UART function
UCA0CTLW0 |= UCSWRST; // Enable software reset
UCA0CTLW0 |= UCSSEL__SMCLK; // Use SMCLK
UCA0BR0 = 52; // Baud rate setting for 9600 bps with 4MHz SMCLK
UCA0BR1 = 0x00;
UCA0MCTLW = 0x4900 | UCOS16 | UCBRF_1; // Modulation settings
UCA0CTLW0 &= ~UCSWRST; // Disable software reset
}
void UART_Send_Data(unsigned char data) {
while (!(UCA0IFG & UCTXIFG)); // Wait for TX buffer to be ready
UCA0TXBUF = data; // Transmit data
}
unsigned char UART_Read_Data(void) {
if (UCA0IFG & UCRXIFG) { // Check if the receive buffer is full
return UCA0RXBUF; // Return received data
}
return 0; // Return 0 if no data is available
}
void Send_Command(unsigned char cmd, unsigned char feedback, unsigned char param1, unsigned char param2) {
unsigned char command[10];
unsigned int checksum = 0;
int i; // Move declaration to the start of the function
command[0] = 0x7E;
command[1] = 0xFF;
command[2] = 0x06;
command[3] = cmd;
command[4] = feedback;
command[5] = (char)(param1 >> 8);
command[6] = (char)param1;
for (i = 1; i < 7; i++) {
checksum += command[i];
}
checksum = 0xFFFF - checksum + 1;
command[7] = (checksum >> 8) & 0xFF;
command[8] = checksum & 0xFF;
command[9] = 0xEF;
for (i = 0; i < 10; i++) {
UART_Send_Data(command[i]);
}
}
void Set_Volume(int volume) {
if (volume < 0) volume = 0;
if (volume > 30) volume = 30;
Send_Command(0x06, 0, 0, volume); // Command to set volume
}
void Play_Audio_File() {
Set_Volume(25); // Set volume to a clearly audible level
Send_Command(0x03, 0x00, 0x00, 0x01); // Command to play track number 1
}
void UART_Send_String(const char *str) {
while (*str) {
UART_Send_Data(*str++);
}
}
void print_response(unsigned char response) {
switch (response) {
case 0x3A:
UART_Send_String("Init complete\n");
break;
case 0x41:
UART_Send_String("Error\n");
break;
case 0x40:
UART_Send_String("ACK\n");
break;
default:
UART_Send_String("Unknown response\n");
break;
}
}
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
Uart_Init(); // Initialize UART
__delay_cycles(500000); // Wait for DFPlayer Mini to initialize
Play_Audio_File(); // Play the audio file "001.mp3" from the SD card
while (1) {
if (UCA0IFG & UCRXIFG) {
unsigned char response = UART_Read_Data(); // Continuously read data from DFPlayer
print_response(response);
}
}
}
#include "DFPlayer.h"
void DFPlayer_send_cmd(struct DFPlayer *player, char cmd,int16_t parameter)
{
char buffer[10];
int16_t CRC;
CRC = -(0xFF + 0x06 + cmd + (parameter>>8) + parameter);
buffer[0] = 0x7E;
buffer[1] = 0xFF;
buffer[2] = 0x06;
buffer[3] = cmd;
buffer[4] = 0x00;
buffer[5] = (char)(parameter>>8);
buffer[6] = (char)parameter;
buffer[7] = (char)(CRC>>8);
buffer[8] = (char)CRC;
buffer[9] = 0xEF;
player->send(buffer, 10);
}
#ifndef DFPLAYER_H
#define DFPLAYER_H
#include <stdint.h>
#define DFPLAYER_CMD_NEXT 0x01
#define DFPLAYER_CMD_PRESVIOUS 0x02
#define DFPLAYER_CMD_TRACK 0x03
#define DFPLAYER_CMD_VOLUME_P 0x04
#define DFPLAYER_CMD_VOLUME_M 0x05
#define DFPLAYER_CMD_VOL_MANU 0x06
#define DFPLAYER_CMD_EQ 0x07
#define DFPLAYER_CMD_MODE 0x08
#define DFPLAYER_CMD_STDBY 0x0A
#define DFPLAYER_CMD_NORMAL 0x0B
#define DFPLAYER_CMD_RESET 0x0C
#define DFPLAYER_CMD_PLAYBACK 0x0D
#define DFPLAYER_CMD_PAUSE 0x0E
#define DFPLAYER_CMD_FOLDER 0x0F
#define DFPLAYER_CMD_VOL_ADJ 0x10
#define DFPLAYER_CMD_REPEAT 0x11
#define DFPLAYER_QRY_PARAM 0x3F
#define DFPLAYER_QRY_ERROR 0x40
#define DFPLAYER_QRY_REPLY 0x41
#define DFPLAYER_QRY_CUR_STAT 0x42
#define DFPLAYER_QRY_CUR_VOL 0x43
#define DFPLAYER_QRY_CUR_EQ 0x44
#define DFPLAYER_QRY_CUR_MODE 0x45
#define DFPLAYER_QRY_CUR_VER 0x46
#define DFPLAYER_QRY_N_TF_FILE 0x47
#define DFPLAYER_QRY_N_USB_FILE 0x48
#define DFPLAYER_QRY_N_FLSH_FILE 0x49
#define DFPLAYER_QRY_KEEP_ON 0x4A
#define DFPLAYER_QRY_TF_TRACK 0x4B
#define DFPLAYER_QRY_USB_TRACK 0x4C
#define DFPLAYER_QRY_FLASH_TRACK 0x4D
#define DFPLAYER_USB_ONLINE \
{ \
0x7E, 0xFF, 0x06, 0x3F, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0xEF \
}
#define DFPLAYER_SD_ONLINE \
{ \
0x7E, 0xFF, 0x06, 0x3F, 0x00, 0x00, 0x02, 0xFF, 0xBF, 0xEF \
}
#define DFPLAYER_USB_SD_ONLINE \
{ \
0x7E, 0xFF, 0x06, 0x3F, 0x00, 0x00, 0x03, 0xFF, 0xBE, 0xEF \
}
#define DFPLAYER_PC_ONLINE \
{ \
0x7E, 0xFF, 0x06, 0x3F, 0x00, 0x00, 0x04, 0xFF, 0xBD, 0xEF \
}
#define DFPLAYER_FLASH_ONLINE \
{ \
0x7E, 0xFF, 0x06, 0x3F, 0x00, 0x00, 0x08, 0xFF, 0xB9, 0xEF \
}
#define DFPLAYER_USB_PUSH_IN \
{ \
0x7E, 0xFF, 0x06, 0x3A, 0x00, 0x00, 0x01, 0xFF, 0xC5, 0xEF \
}
#define DFPLAYER_SD_PUSH_IN \
{ \
0x7E, 0xFF, 0x06, 0x3A, 0x00, 0x00, 0x02, 0xFF, 0xC4, 0xEF \
}
#define DFPLAYER_USB_PUSH_OUT \
{ \
0x7E, 0xFF, 0x06, 0x3B, 0x00, 0x00, 0x01, 0xFF, 0xC4, 0xEF \
}
#define DFPLAYER_SD_PUSH_OUT \
{ \
0x7E, 0xFF, 0x06, 0x3B, 0x00, 0x00, 0x02, 0xFF, 0xC3, 0xEF \
}
typedef uint8_t (*dfplayer_send_fptr)(uint8_t *data, uint32_t length);
struct DFPlayer {
dfplayer_send_fptr send;
};
void DFPlayer_send_cmd(struct DFPlayer *player, char cmd,int16_t parameter);
#endif /* DFPLAYER_H */