数字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