基于STM32的FM电台 下载本文

数字FM电台设计开发

以下是利用以上两个函数实现RDA5820具体配置的函数:

u8 RDA5820_Init(void); //初始化函数

void RDA5820_RX_Mode(void); //设置RDA5820为RX模式 void RDA5820_TX_Mode(void); //设置RDA5820为TX模式 void RDA5820_TxPAG_Set(u8 gain); //设置TX发送功率 void RDA5820_TxPGA_Set(u8 gain); //设置TX 输入信号增益 void RDA5820_Band_Set(u8 band); //设置RDA5820的工作频段 void RDA5820_Space_Set(u8 spc); //设置RDA5820的步进频率

3.5 SPI驱动VS1053音频解码器

该模块实现了利用SPI对VS1053的控制。

以下是需要的SPI函数:

u8 VS_SPI_ReadWriteByte(u8 data) //SPI读写数据函数 { }

void VS_SPI_SpeedLow(void) //SD卡初始化的时候,需要低速 { }

void VS_SPI_SpeedHigh(void) //SD卡正常工作的时候,可以高速了

{ }

以下是利用上面函数封装的VS1053读写数据函数:

void VS_WR_Cmd(u8 address,u16 data); //向VS10XX写命令 void VS_WR_Data(u8 data); //向VS10XX写数据

27

return SPI1_ReadWriteByte(data);

SPI1_SetSpeed(SPI_BaudRatePrescaler_32);//设置到低速模式

SPI1_SetSpeed(SPI_BaudRatePrescaler_8);//设置到高速模式

数字FM电台设计开发

u16 VS_RD_Reg(u8 address); //读VS10XX的寄存器

以下是利用上面函数封装的VS1053功能实现函数:

void VS_Init(void); //初始化VS10XX的IO口 void VS_Soft_Reset(void); //软复位VS10XX u8 VS_HD_Reset(void); //硬复位MP3 void VS_Sine_Test(void); //正弦测试 u16 VS_Ram_Test(void); //ram 测试

void VS_Set_Speed(u8 t); //设置播放速度(仅VS1053有效) u16 VS_Get_HeadInfo(void); //返回值:得到的码率 void VS_Restart_Play(void); //切歌

void VS_Set_Vol(u8 volx); //设定VS10XX播放的音量和高低音

3.6 SD卡读写驱动

该模块利用SPI实现对SD卡的数据读写。 以下是SD卡控制的主要函数:

void SD_SPI_Init(void); //SPI硬件层初始化 void SD_DisSelect(void); //取消选择,释放SPI总线 u8 SD_Select(void); //选择sd卡,并且等待卡准备OK u8 SD_WaitReady(void); //等待卡准备好 u8 SD_GetResponse(u8 Response); //等待SD卡回应

u8 SD_RecvData(u8*buf,u16 len); //从sd卡读取一个数据包的内容 u8 SD_SendBlock(u8*buf,u8 cmd); //向sd卡写入一个数据包的内容 512字节

u8 SD_Initialize(void); //初始化SD卡 u8 SD_ReadDisk(u8*buf,u32 sector,u8 cnt);//读SD卡 u8 SD_WriteDisk(u8*buf,u32 sector,u8 cnt);//写SD卡

3.7 74HC4052音频选择

该模块实现了74HC4952音频通道的选择我们可以利用这些函数选择VS1053输出的音频。

以下是具体函数

void Audiosel_Init(void) //声音初始化 {

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD,

28

数字FM电台设计开发

ENABLE); //使能PB端口时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//PB.7 推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; }

void Audiosel_Set(u8 ch) //设置4052的选择通道 { }

//声音通道选择 通道0:MP3 通道1:收音机 通道2:PWM音频 通道3:无声

AUDIO_SELA=ch&0X01; AUDIO_SELB=(ch>>1)&0X01;

GPIO_Init(GPIOD, &GPIO_InitStructure); //PD.7 推挽输出

3.8 TFT-LCD显示驱动

该模块实现TFT-LCD屏幕的显示驱动,这里只简单列举以下基本函数,不作具体展开:

void LCD_Init(void);

//初始化 //开显示 //关显示 //清屏

void LCD_DisplayOn(void); void LCD_DisplayOff(void);

void LCD_Clear(u16 Color);

void LCD_SetCursor(u16 Xpos, u16 Ypos); void LCD_DrawPoint(u16 x,u16 y); u16 LCD_ReadPoint(u16 x,u16 y);

//设置光标 //画点

//快速画点 //读点 //画圆

void LCD_Fast_DrawPoint(u16 x,u16 y,u16 color); void Draw_Circle(u16 x0,u16 y0,u8 r);

void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2); //画线 void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2); //画矩形 void LCD_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color); //填充单色

void LCD_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 *color); //填充指定颜色

void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode);//显示一个字

29

数字FM电台设计开发

void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size); //显示一个数字

void LCD_ShowxNum(u16 x,u16 y,u32 num,u8 len,u8 size,u8 mode); //显示 数字

void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p); //显示一个字符串,12/16字体

void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue); u16 LCD_ReadReg(u8 LCD_Reg); void LCD_WriteRAM_Prepare(void); void LCD_WriteRAM(u16 RGB_Code); void LCD_Scan_Dir(u8 dir); 向

void LCD_Display_Dir(u8 dir);

//设置屏扫描方向 //设置屏幕显示方

30

数字FM电台设计开发

第4章 下载调试

4.1 调试环境

调试所用软件: Keil uVision4

调试所用硬件如下图4.1所示: 战舰STM32开发板 J_link下载器 FM收音耳机 SD卡 USB电源线

图4.1 调试所用硬件

4.2下载验证

下载程序后开发板上显示“电台实验”、测试频率、设计者姓名学号、调试日期、以及各按键功能。开机默认为音源选择页如图4.2所示:

31