STM32笔记-FM收音机

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

外围电路:

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

可以发现单片机就起个控制作用,使用的协议是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))));
		}
  }
}
其中的按键和定时函数不再写,比较好理解。


猜你喜欢

转载自blog.csdn.net/VCA821/article/details/80809319