欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STM32笔记-FM收音机

程序员文章站 2024-02-25 14:38:39
...

FM的收音机制作比较简单,只用一个芯片就可以实现,代码也比较简单,芯片选用的RDA5807或者RDA5807M,两者稍有区别,主要在复位方面,RDA5807M少一个vio引脚,无法进行软件复位,在买芯片后厂家会提供51的库代码,我们只需要移植一下就可以使用了,在使用中,我们需要插上耳机插孔作为天线,下面贴上芯片外围和连接MCU的电路和操作的函数代码(比较简单,函数也比较易懂,只需要读懂寄存器就行),同时还需要加个功率放大器。

外围电路:

STM32笔记-FM收音机

功放电路(比较随意),大部分用D类功放,功耗低

STM32笔记-FM收音机

可以发现单片机就起个控制作用,使用的协议是IIC协议(给的库是模拟的),代码和电路都十分简单,下面把主函数的代码贴上:(通过按键来调节选频,可以用串口助手显示目前频段,厂家库中给的比较全)

int main(void)
{
	RDA5807_FM_Test();
}


void RDA5807_FM_Test(void)
{
  /* config the led */
	LED_GPIO_Config();
	LED1( ON );
	LED2( ON );
	
	/*config key*/
	Key_GPIO_Config();	
	SysTick_Init();
	
	USART1_Config();
	
	printf("\r\n rda5807m 测试实验 \r\n");
	
	if ( i2c_CheckDevice(RDA5807M_SLAVE_ADDRESS) == 0 )
	{
		printf("\r\n rda5807m 检测成功 \r\n");
	}
	else
	{
		printf("\r\n rda5807m 检测不成功 \r\n");
	}
	
	RDA5807_power();
	
	printf("\r\n 上电成功 \r\n");
	
	RDA_reg_data[7] = 140;	 // 05H寄存器低四bit 改变音量
  RDA5807_write_reg();
	
	temp = RDA_reg_data[7] & 0xff; //取音量值	
	printf("当前音量为%d" , temp);
	
	RDA_reg_data[0] |= (1 << 1); 	//SEEK UP	
	RDA5807_FM_seek();              //自动寻台
	
	while(1)
	{	
		if( Key_Scan(GPIOC,GPIO_Pin_13) == KEY_ON  )
		{
			RDA_reg_data[0] &= ~(1 << 1); 	    //向下搜台
	        RDA5807_FM_seek();              //自动寻台	
			/*反转*/
			GPIO_WriteBit(GPIOB, GPIO_Pin_0, 
				(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_0))));
		}  

		if( Key_Scan(GPIOA,GPIO_Pin_0) == KEY_ON  )
		{
			RDA_reg_data[0] |= (1 << 1); 	     //向上搜台	
			RDA5807_FM_seek();                 //自动寻台
			/*反转*/
			GPIO_WriteBit(GPIOF, GPIO_Pin_7, 
				(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOF, GPIO_Pin_7))));
		}
  }
}
其中的按键和定时函数不再写,比较好理解。