![]() |
發(fā)布時間: 2022-9-6 11:19
正文摘要:Bluetooth5.0+Si4730+PT2313+TPA3116D2+Oled 128*64 +5Keys+編碼旋轉調節(jié) 30W*2多功能功放:*目前軟件已經(jīng)做到V3.0,硬件也改版到V3.0,業(yè)余玩下趣味多多 功能: 1,藍牙功能(杰里等淘寶藍牙音頻模組Bluetooth5.0 ... |
樓主給我一份吧,謝謝! 1424376352@qq.com |
樓主你好!發(fā)一份給我,謝謝。787158391@qq.com. |
2186721554@qq,com拜托樓主發(fā)我一份,謝謝謝謝![]() |
請發(fā)給我一份 謝謝。3403709449@qq.com |
煩請樓主也發(fā)一份給我學習學習。1927511197@QQ.COM。謝謝! |
高手啊,學習下,都是手工焊接的嗎? |
feeling1791 發(fā)表于 2022-9-19 14:40 請發(fā)給我一份 謝謝, xlxhtz2468@sina.com |
南山車主 發(fā)表于 2024-2-22 00:59 //Copright (c) 2021,FFT_Combo //All rights reserved. //名稱: radio.h //說明: si4730 gpio定義,函數(shù)聲明 //作者: feeling1791 //日期: 2020-12-20 //版本: ver3.1 #ifndef __RADIO_H #define __RADIO_H #include "stm32f10x.h" #include "sys.h" //-----------------radio端口定義---------------- #define TU_SDA_OUT() GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=3<<20; //輸出PA5 #define TU_SDA_IN() GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL|=8<<20; //輸入PA5 #define TU_SCL_OUT() GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=3<<24; //輸出PA6 #define TU_SCL_IN() GPIOA->CRL&=0XF0FFFFFF;GPIOA->CRL|=8<<24; //輸入PA6 #define TU_SDA_H PAout(5) = 1 #define TU_SDA_L PAout(5) = 0 #define TU_SCL_H PAout(6) = 1 #define TU_SCL_L PAout(6) = 0 #define TU_SDA_read PAin(5) #define TU_SCL_read PAin(6) #define TU_RST_H GPIOA->BSRR = GPIO_Pin_7 #define TU_RST_L GPIOA->BRR = GPIO_Pin_7 #define TU_EN_H GPIOA->BSRR = GPIO_Pin_1 #define TU_EN_L GPIOA->BRR = GPIO_Pin_1 #define TU_POWER_OFF() GPIOA->BSRR = GPIO_Pin_1 //HIGH RX_HARD_MUTE #define TU_POWER_ON() GPIOA->BRR = GPIO_Pin_1 //LOW /******************************************************** typedef and function claim ********************************************************/ typedef enum OPERA_MODE { READ = 1, WRITE = 2 } T_OPERA_MODE; typedef enum ERROR_OP { OK = 1, I2C_ERROR = 2, LOOP_EXP_ERROR = 3, G_ERROR = 4 } T_ERROR_OP; typedef enum POWER_UP_TYPE { FM_RECEIVER = 1, AM_RECEIVER = 2 } T_POWER_UP_TYPE; typedef enum SEEK_MODE { SEEKDOWN_HALT = 1, SEEKDOWN_WRAP = 2, SEEKUP_HALT = 3, SEEKUP_WRAP = 4 } T_SEEK_MODE; typedef enum RX_ANTENNA_SELECT { EXTERNAL_ANTENNA = 1, INTERNAL_ANTENNA = 2 } T_RX_ANTENNA_SELECT; //------------------------------------------------------------------------ //低靈敏度 FM_SNR 5 FM_RSSI 30 //電臺識別率高,但是搜臺少 //中靈敏度 FM_SNR 3 FM_RSSI 15 //電臺識別率中,但是搜臺一般 //高靈敏度 FM_SNR 2 FM_RSSI 8 //電臺識別率地,但是搜臺多 #define FM_SNR_LOCAL 0x0005 //FM SNR 5dB #define FM_RSSI_LOCAL 0x0000F //FM RSSI 15dBuV #define FM_SNR_REMOTE 0x0002 //FM SNR 2dB #define FM_RSSI_REMOTE 0x0008 //FM RSSI 8dBuV //#define FM_SNR_LOCAL 0x0005 //FM SNR 5dB //#define FM_RSSI_LOCAL 0x00019 //FM RSSI 25dBuV //#define FM_SNR_REMOTE 0x0003 //FM SNR 3dB //#define FM_RSSI_REMOTE 0x000a //FM RSSI 10dBuV #define MW_SNR_LOCAL 0x0005 //MW SNR normal=5dB #define MW_RSSI_LOCAL 0x0019 //MW_RSSI normal=25dBuV #define MW_SNR_REMOTE 0x0003 //MW SNR normal=3dB #define MW_RSSI_REMOTE 0x000a //MW_RSSI normal=10dBuV //#define SW_SNR_LOCAL 0x0005 //SW_SNR normal=5dB //#define SW_RSSI_LOCAL 0x0014 //SW_RSSI normal=20dBuV //#define SW_SNR_REMOTE 0x0002 //SW_SNR normal=2dB //#define SW_RSSI_REMOTE 0x0008 //SW_RSSI normal=8dBuV //------------------------------------------------------------------------ #define FM_Deemphasis 0x0001 //去加重設置 50us #define FM_BLEND_STEREO 0x001e //FM_BLEND_STEREO_THRESHOLD 20 dBuV RSSI高于設定閾值時開啟立體聲模式 #define FM_BLEND_MONO 0x001e //FM_BLEND_MONO_THRESHOLD 20 dBuV RSSI低于于設定閾值時開啟混音模式 //#define FM_BLEND_STEREO 0x0000 //FM_BLEND_STEREO_THRESHOLD 強制開啟立體聲模式 //#define FM_BLEND_MONO 0x0000 //FM_BLEND_MONO_THRESHOLD 強制開啟混音模式 #define FM_bandwidth 0x000a //bandwidth 100KHz #define FM_BAND_TOP_VALUE 0x2a26 //107.9MHz #define FM_BAND_BOTTOM_VALUE 0x222E //87.5MHz //#define FM_BAND_BOTTOM_VALUE 0x1db0 //76MHz #define FM_BAND_BOTTOM_XY_VALUE 0x1900 //64MHz #define FM_AutoScan_Step_VALUE 0x000a //亞洲FM步進100K #define FM_ManualScan_Step_VALUE 0x000a //手動搜臺步進10 //------------------------------------------------------------------------ #define AM_Deemphasis 0x0001 //去加重設置 50us #define AM_bandwidth 0x0003 //bandwidth 2KHz /* #define SW_BAND_TOP_VALUE 0x59d8 //23000KHz //#define SW_BAND_BOTTOM 0x08fc //2300KHz #define SW_BAND_BOTTOM_VALUE 0x06af //1711KHz 1711KHz -1800KHz 導航和定位信號 1800KHz-2000KHz 160米業(yè)務無線電 2000KHz-2300KHz 海事通訊 #define SW_AutoScan_Step_VALUE 0x0005 //亞洲SW步進5K #define SW_ManualScan_Step_VALUE 0x0005 //手動搜臺步進10 */ #define MW_BAND_TOP_VALUE 0x06b9 //1721KHz #define MW_BAND_BOTTOM_VALUE 0x020a //522KHz #define MW_AutoScan_Step_VALUE 0x0009 //亞洲MW步進9K #define MW_ManualScan_Step_VALUE 0x0009 //手動搜臺步進9 //------------------------------------------------------------------------ #define DefaultVOL 55 //開機默認音量 #define MidVOL 50 //中等音量 #define MaxVOL 63 //最大音量 #define FMDefaultFREQ 10080 //開機默認頻率 #define MWDefaultFREQ 792 //開機默認頻率 //#define SWDefaultFREQ 6110 //開機默認頻率 //================================================================== // General Commands //================================================================== #define STCINT 0x01 #define ASQINT 0x02 #define RDSINT 0x04 #define RSQINT 0x08 #define ERR 0x40 #define CTS 0x80 // POWER_UP #define POWER_UP 0x01 #define POWER_UP_IN_FUNC_FMRX 0xd0 #define POWER_UP_IN_FUNC_AMRX 0x01 #define POWER_UP_IN_FUNC_FMTX 0x02 #define POWER_UP_IN_FUNC_WBRX 0x03 #define POWER_UP_IN_FUNC_QUERY 0x0F #define POWER_UP_IN_PATCH 0x20 #define POWER_UP_IN_GPO2OEN 0x40 #define POWER_UP_IN_CTSIEN 0x80 #define POWER_UP_IN_OPMODE_RX_ANALOG 0x05 #define POWER_UP_IN_OPMODE_TX_ANALOG 0x50 // GET_REV #define GET_REV 0x10 // POWER_DOWN #define POWER_DOWN 0x11 // SET_PROPERTY #define SET_PROPERTY 0x12 // GET_PROPERTY #define GET_PROPERTY 0x13 // GET_INT_STATUS #define GET_INT_STATUS 0x14 //================================================================== // FM Receive Commands //================================================================== // FM_TUNE_FREQ #define FM_TUNE_FREQ 0x20 // FM_SEEK_START #define FM_SEEK_START 0x21 #define FM_SEEK_START_IN_WRAP 0x04 #define FM_SEEK_START_IN_SEEKUP 0x08 // FM_TUNE_STATUS #define FM_TUNE_STATUS 0x22 #define FM_TUNE_STATUS_IN_INTACK 0x01 #define FM_TUNE_STATUS_IN_CANCEL 0x02 #define FM_TUNE_STATUS_OUT_VALID 0x01 #define FM_TUNE_STATUS_OUT_AFCRL 0x02 #define FM_TUNE_STATUS_OUT_BTLF 0x80 // FM_RSQ_STATUS #define FM_RSQ_STATUS 0x23 #define FM_RSQ_STATUS_IN_INTACK 0x01 #define FM_RSQ_STATUS_OUT_RSSILINT 0x01 #define FM_RSQ_STATUS_OUT_RSSIHINT 0x02 #define FM_RSQ_STATUS_OUT_ASNRLINT 0x04 #define FM_RSQ_STATUS_OUT_ASNRHINT 0x08 #define FM_RSQ_STATUS_OUT_BLENDINT 0x80 #define FM_RSQ_STATUS_OUT_VALID 0x01 #define FM_RSQ_STATUS_OUT_AFCRL 0x02 #define FM_RSQ_STATUS_OUT_SMUTE 0x08 #define FM_RSQ_STATUS_OUT_PILOT 0x80 #define FM_RSQ_STATUS_OUT_STBLEND 0x7F // FM_RDS_STATUS #define FM_RDS_STATUS 0x24 #define FM_RDS_STATUS_IN_INTACK 0x01 #define FM_RDS_STATUS_IN_MTFIFO 0x02 #define FM_RDS_STATUS_OUT_RECV 0x01 #define FM_RDS_STATUS_OUT_SYNCLOST 0x02 #define FM_RDS_STATUS_OUT_SYNCFOUND 0x04 #define FM_RDS_STATUS_OUT_SYNC 0x01 #define FM_RDS_STATUS_OUT_GRPLOST 0x04 #define FM_RDS_STATUS_OUT_BLED 0x03 #define FM_RDS_STATUS_OUT_BLEC 0x0C #define FM_RDS_STATUS_OUT_BLEB 0x30 #define FM_RDS_STATUS_OUT_BLEA 0xC0 #define FM_RDS_STATUS_OUT_BLED_SHFT 0 #define FM_RDS_STATUS_OUT_BLEC_SHFT 2 #define FM_RDS_STATUS_OUT_BLEB_SHFT 4 #define FM_RDS_STATUS_OUT_BLEA_SHFT 6 //================================================================== // AM Receive Commands //================================================================== // AM_TUNE_FREQ #define AM_TUNE_FREQ 0x40 // AM_SEEK_START #define AM_SEEK_START 0x41 #define AM_SEEK_START_IN_WRAP 0x04 #define AM_SEEK_START_IN_SEEKUP 0x08 // AM_TUNE_STATUS #define AM_TUNE_STATUS 0x42 #define AM_TUNE_STATUS_IN_INTACK 0x01 #define AM_TUNE_STATUS_IN_CANCEL 0x02 #define AM_TUNE_STATUS_OUT_VALID 0x01 #define AM_TUNE_STATUS_OUT_AFCRL 0x02 #define AM_TUNE_STATUS_OUT_BTLF 0x80 // AM_RSQ_STATUS #define AM_RSQ_STATUS 0x23 #define AM_RSQ_STATUS_IN_INTACK 0x01 #define AM_RSQ_STATUS_OUT_RSSILINT 0x01 #define AM_RSQ_STATUS_OUT_RSSIHINT 0x02 #define AM_RSQ_STATUS_OUT_ASNRLINT 0x04 #define AM_RSQ_STATUS_OUT_ASNRHINT 0x08 #define AM_RSQ_STATUS_OUT_VALID 0x01 #define AM_RSQ_STATUS_OUT_AFCRL 0x02 #define AM_RSQ_STATUS_OUT_SMUTE 0x08 //================================================================== // FM Transmit Commands //================================================================== // TX_TUNE_FREQ #define TX_TUNE_FREQ 0x30 // TX_TUNE_POWER #define TX_TUNE_POWER 0x31 // TX_TUNE_MEASURE #define TX_TUNE_MEASURE 0x32 // TX_TUNE_STATUS #define TX_TUNE_STATUS 0x33 #define TX_TUNE_STATUS_IN_INTACK 0x01 // TX_ASQ_STATUS #define TX_ASQ_STATUS 0x34 #define TX_ASQ_STATUS_IN_INTACK 0x01 #define TX_ASQ_STATUS_OUT_IALL 0x01 #define TX_ASQ_STATUS_OUT_IALH 0x02 #define TX_ASQ_STATUS_OUT_OVERMOD 0x04 // TX_RDS_BUFF #define TX_RDS_BUFF 0x35 #define TX_RDS_BUFF_IN_INTACK 0x01 #define TX_RDS_BUFF_IN_MTBUFF 0x02 #define TX_RDS_BUFF_IN_LDBUFF 0x04 #define TX_RDS_BUFF_IN_FIFO 0x80 // TX_RDS_PS #define TX_RDS_PS 0x36 //================================================================== // WB Receive Commands //================================================================== // WB_TUNE_FREQ #define WB_TUNE_FREQ 0x50 // WB_TUNE_STATUS #define WB_TUNE_STATUS 0x52 #define WB_TUNE_STATUS_IN_INTACK 0x01 #define WB_TUNE_STATUS_OUT_VALID 0x01 #define WB_TUNE_STATUS_OUT_AFCRL 0x02 // WB_RSQ_STATUS #define WB_RSQ_STATUS 0x53 #define WB_RSQ_STATUS_IN_INTACK 0x01 #define WB_RSQ_STATUS_OUT_RSSILINT 0x01 #define WB_RSQ_STATUS_OUT_RSSIHINT 0x02 #define WB_RSQ_STATUS_OUT_ASNRLINT 0x04 #define WB_RSQ_STATUS_OUT_ASNRHINT 0x08 #define WB_RSQ_STATUS_OUT_VALID 0x01 #define WB_RSQ_STATUS_OUT_AFCRL 0x02 // WB_ASQ_STATUS #define WB_ASQ_STATUS 0x55 #define WB_ASQ_STATUS_IN_INTACK 0x01 #define WB_ASQ_STATUS_OUT_ALERTONINT 0x01 #define WB_ASQ_STATUS_OUT_ALERTOFFINT 0x02 #define WB_ASQ_STATUS_OUT_ALERT 0x01 //****************************Properties******************************/ //================================================================== // General Properties //================================================================== // GPO_IEN #define GPO_IEN 0x0001 #define GPO_IEN_STCIEN_MASK 0x0001 #define GPO_IEN_ASQIEN_MASK 0x0002 #define GPO_IEN_RDSIEN_MASK 0x0004 #define GPO_IEN_RSQIEN_MASK 0x0008 #define GPO_IEN_ERRIEN_MASK 0x0040 #define GPO_IEN_CTSIEN_MASK 0x0080 #define GPO_IEN_STCREP_MASK 0x0100 #define GPO_IEN_ASQREP_MASK 0x0200 #define GPO_IEN_RDSREP_MASK 0x0400 #define GPO_IEN_RSQREP_MASK 0x0800 #define GPO_IEN_STCIEN_SHFT 0 #define GPO_IEN_ASQIEN_SHFT 1 #define GPO_IEN_RDSIEN_SHFT 2 #define GPO_IEN_RSQIEN_SHFT 3 #define GPO_IEN_ERRIEN_SHFT 6 #define GPO_IEN_CTSIEN_SHFT 7 #define GPO_IEN_STCREP_SHFT 8 #define GPO_IEN_ASQREP_SHFT 9 #define GPO_IEN_RDSREP_SHFT 10 #define GPO_IEN_RSQREP_SHFT 11 // DIGITAL_INPUT_FORMAT #define DIGITAL_INPUT_FORMAT 0x0101 #define DIGITAL_INPUT_FORMAT_ISIZE_MASK 0x0003 #define DIGITAL_INPUT_FORMAT_IMONO_MASK 0x0004 #define DIGITAL_INPUT_FORMAT_IMODE_MASK 0x0078 #define DIGITAL_INPUT_FORMAT_IFALL_MASK 0x0080 #define DIGITAL_INPUT_FORMAT_ISIZE_SHFT 0 #define DIGITAL_INPUT_FORMAT_IMONO_SHFT 2 #define DIGITAL_INPUT_FORMAT_IMODE_SHFT 3 #define DIGITAL_INPUT_FORMAT_IFALL_SHFT 7 // DIGITAL_INPUT_SAMPLE_RATE #define DIGITAL_INPUT_SAMPLE_RATE 0x0103 // DIGITAL_OUTPUT_FORMAT #define DIGITAL_OUTPUT_FORMAT 0x0102 #define DIGITAL_OUTPUT_FORMAT_OSIZE_MASK 0x0003 #define DIGITAL_OUTPUT_FORMAT_OMONO_MASK 0x0004 #define DIGITAL_OUTPUT_FORMAT_OMODE_MASK 0x0078 #define DIGITAL_OUTPUT_FORMAT_OFALL_MASK 0x0080 #define DIGITAL_OUTPUT_FORMAT_OSIZE_SHFT 0 #define DIGITAL_OUTPUT_FORMAT_OMONO_SHFT 2 #define DIGITAL_OUTPUT_FORMAT_OMODE_SHFT 3 #define DIGITAL_OUTPUT_FORMAT_OFALL_SHFT 7 // DIGITAL_OUTPUT_SAMPLE_RATE #define DIGITAL_OUTPUT_SAMPLE_RATE 0x0104 // REFCLK_FREQ #define REFCLK_FREQ 0x0201 // REFCLK_PRESCALE #define REFCLK_PRESCALE 0x0202 #define REFCLK_PRESCALE_MASK 0x0FFF #define REFCLK_PRESCALE_SHFT 0 //================================================================== // FM Receive Properties //================================================================== // FM_DEEMPHASIS #define FM_DEEMPHASIS 0x1100 #define FM_DEEMPHASIS_MASK 0x0003 #define FM_DEEMPHASIS_SHFT 0 // FM_BLEND_STEREO_THRESHOLD #define FM_BLEND_STEREO_THRESHOLD 0x1105 #define FM_BLEND_STEREO_THRESHOLD_MASK 0x007F #define FM_BLEND_STEREO_THRESHOLD_SHFT 0 // FM_BLEND_MONO_THRESHOLD #define FM_BLEND_MONO_THRESHOLD 0x1106 #define FM_BLEND_MONO_THRESHOLD_MASK 0x007F #define FM_BLEND_MONO_THRESHOLD_SHFT 0 // FM_MAX_TUNE_ERROR #define FM_MAX_TUNE_ERROR 0x1108 #define FM_MAX_TUNE_ERROR_MASK 0x007F #define FM_MAX_TUNE_ERROR_SHFT 0 // FM_RSQ_INT_SOURCE #define FM_RSQ_INT_SOURCE 0x1200 #define FM_RSQ_INT_SOURCE_RSSILIEN_MASK 0x0001 #define FM_RSQ_INT_SOURCE_RSSIHIEN_MASK 0x0002 #define FM_RSQ_INT_SOURCE_ASNRLIEN_MASK 0x0004 #define FM_RSQ_INT_SOURCE_ASNRHIEN_MASK 0x0008 #define FM_RSQ_INT_SOURCE_BLENDIEN_MASK 0x0080 #define FM_RSQ_INT_SOURCE_RSSILIEN_SHFT 0 #define FM_RSQ_INT_SOURCE_RSSIHIEN_SHFT 1 #define FM_RSQ_INT_SOURCE_ASNRLIEN_SHFT 2 #define FM_RSQ_INT_SOURCE_ASNRHIEN_SHFT 3 #define FM_RSQ_INT_SOURCE_BLENDIEN_SHFT 7 // FM_RSQ_SNR_HI_THRESHOLD #define FM_RSQ_SNR_HI_THRESHOLD 0x1201 #define FM_RSQ_SNR_HI_THRESHOLD_MASK 0x007F #define FM_RSQ_SNR_HI_THRESHOLD_SHFT 0 // FM_RSQ_SNR_LO_THRESHOLD #define FM_RSQ_SNR_LO_THRESHOLD 0x1202 #define FM_RSQ_SNR_LO_THRESHOLD_MASK 0x007F #define FM_RSQ_SNR_LO_THRESHOLD_SHFT 0 // FM_RSQ_RSSI_HI_THRESHOLD #define FM_RSQ_RSSI_HI_THRESHOLD 0x1203 #define FM_RSQ_RSSI_HI_THRESHOLD_MASK 0x007F #define FM_RSQ_RSSI_HI_THRESHOLD_SHFT 0 // FM_RSQ_RSSI_LO_THRESHOLD #define FM_RSQ_RSSI_LO_THRESHOLD 0x1204 #define FM_RSQ_RSSI_LO_THRESHOLD_MASK 0x007F #define FM_RSQ_RSSI_LO_THRESHOLD_SHFT 0 // FM_RSQ_BLEND_THRESHOLD #define FM_RSQ_BLEND_THRESHOLD 0x1207 #define FM_RSQ_BLEND_THRESHOLD_BLEND_MASK 0x007F #define FM_RSQ_BLEND_THRESHOLD_PILOT_MASK 0x0080 #define FM_RSQ_BLEND_THRESHOLD_BLEND_SHFT 0 #define FM_RSQ_BLEND_THRESHOLD_PILOT_SHFT 7 // FM_SOFT_MUTE_RATE #define FM_SOFT_MUTE_RATE 0x1300 #define FM_SOFT_MUTE_RATE_MASK 0x00FF #define FM_SOFT_MUTE_RATE_SHFT 0 // FM_SOFT_MUTE_MAX_ATTENUATION #define FM_SOFT_MUTE_MAX_ATTENUATION 0x1302 #define FM_SOFT_MUTE_MAX_ATTENUATION_MASK 0x001F #define FM_SOFT_MUTE_MAX_ATTENUATION_SHFT 0 // FM_SOFT_MUTE_SNR_THRESHOLD #define FM_SOFT_MUTE_SNR_THRESHOLD 0x1303 #define FM_SOFT_MUTE_SNR_THRESHOLD_MASK 0x000F #define FM_SOFT_MUTE_SNR_THRESHOLD_SHFT 0 // FM_SEEK_BAND_BOTTOM #define FM_SEEK_BAND_BOTTOM 0x1400 // FM_SEEK_BAND_TOP #define FM_SEEK_BAND_TOP 0x1401 // FM_SEEK_FREQ_SPACING #define FM_SEEK_FREQ_SPACING 0x1402 #define FM_SEEK_FREQ_SPACING_MASK 0x001F #define FM_SEEK_FREQ_SPACING_SHFT 0 // FM_SEEK_TUNE_SNR_THRESHOLD #define FM_SEEK_TUNE_SNR_THRESHOLD 0x1403 #define FM_SEEK_TUNE_SNR_THRESHOLD_MASK 0x007F #define FM_SEEK_TUNE_SNR_THRESHOLD_SHFT 0 // FM_SEEK_TUNE_RSSI_THRESHOLD #define FM_SEEK_TUNE_RSSI_THRESHOLD 0x1404 #define FM_SEEK_TUNE_RSSI_THRESHOLD_MASK 0x007F #define FM_SEEK_TUNE_RSSI_THRESHOLD_SHFT 0 // FM_RDS_INTERRUPT_SOURCE #define FM_RDS_INTERRUPT_SOURCE 0x1500 #define FM_RDS_INTERRUPT_SOURCE_RECV_MASK 0x0001 #define FM_RDS_INTERRUPT_SOURCE_SYNCLOST_MASK 0x0002 #define FM_RDS_INTERRUPT_SOURCE_SYNCFOUND_MASK 0x0004 #define FM_RDS_INTERRUPT_SOURCE_RECV_SHFT 0 #define FM_RDS_INTERRUPT_SOURCE_SYNCLOST_SHFT 1 #define FM_RDS_INTERRUPT_SOURCE_SYNCFOUND_SHFT 2 // FM_RDS_INTERRUPT_FIFO_COUNT #define FM_RDS_INTERRUPT_FIFO_COUNT 0x1501 #define FM_RDS_INTERRUPT_FIFO_COUNT_MASK 0x00FF #define FM_RDS_INTERRUPT_FIFO_COUNT_SHFT 0 // FM_RDS_CONFIG #define FM_RDS_CONFIG 0x1502 #define FM_RDS_CONFIG_RDSEN_MASK 0x0001 #define FM_RDS_CONFIG_BLETHD_MASK 0x0300 #define FM_RDS_CONFIG_BLETHC_MASK 0x0C00 #define FM_RDS_CONFIG_BLETHB_MASK 0x3000 #define FM_RDS_CONFIG_BLETHA_MASK 0xC000 #define FM_RDS_CONFIG_RDSEN_SHFT 0 #define FM_RDS_CONFIG_BLETHD_SHFT 8 #define FM_RDS_CONFIG_BLETHC_SHFT 10 #define FM_RDS_CONFIG_BLETHB_SHFT 12 #define FM_RDS_CONFIG_BLETHA_SHFT 14 //================================================================== // FM Transmit Properties //================================================================== // TX_COMPONENT_ENABLE #define TX_COMPONENT_ENABLE 0x2100 #define TX_COMPONENT_ENABLE_PILOT_MASK 0x0001 #define TX_COMPONENT_ENABLE_LMR_MASK 0x0002 #define TX_COMPONENT_ENABLE_RDS_MASK 0x0004 #define TX_COMPONENT_ENABLE_PILOT_SHFT 0 #define TX_COMPONENT_ENABLE_LMR_SHFT 1 #define TX_COMPONENT_ENABLE_RDS_SHFT 2 // TX_AUDIO_DEVIATION #define TX_AUDIO_DEVIATION 0x2101 // TX_PILOT_DEVIATION #define TX_PILOT_DEVIATION 0x2102 // TX_RDS_DEVIATION #define TX_RDS_DEVIATION 0x2103 // TX_LINE_INPUT_LEVEL #define TX_LINE_INPUT_LEVEL 0x2104 #define TX_LINE_INPUT_LEVEL_LILEVEL_MASK 0x03FF #define TX_LINE_INPUT_LEVEL_LIATTEN_MASK 0x3000 #define TX_LINE_INPUT_LEVEL_LILEVEL_SHFT 0 #define TX_LINE_INPUT_LEVEL_LIATTEN_SHFT 12 // TX_LINE_INPUT_MUTE #define TX_LINE_INPUT_MUTE 0x2105 #define TX_LINE_INPUT_MUTE_RIMUTE_MASK 0x0001 #define TX_LINE_INPUT_MUTE_LIMUTE_MASK 0x0002 #define TX_LINE_INPUT_MUTE_RIMUTE_SHFT 0 #define TX_LINE_INPUT_MUTE_LIMUTE_SHFT 1 // TX_PREEMPHASIS #define TX_PREEMPHASIS 0x2106 #define TX_PREMPHASIS_MASK 0x0003 #define TX_PREMPHASIS_SHFT 0 // TX_PILOT_FREQUENCY #define TX_PILOT_FREQUENCY 0x2107 // TX_ACOMP_ENABLE #define TX_ACOMP_ENABLE 0x2200 #define TX_ACOMP_ENABLE_ACEN_MASK 0x0001 #define TX_ACOMP_ENABLE_LIMITEN_MASK 0x0002 #define TX_ACOMP_ENABLE_ACEN_SHFT 0 #define TX_ACOMP_ENABLE_LIMITEN_SHFT 1 // TX_ACOMP_THRESHOLD #define TX_ACOMP_THRESHOLD 0x2201 // TX_ACOMP_ATTACK_TIME #define TX_ACOMP_ATTACK_TIME 0x2202 #define TX_ACOMP_ATTACK_TIME_MASK 0x000F #define TX_ACOMP_ATTACK_TIME_SHFT 0 // TX_ACOMP_RELEASE_TIME #define TX_ACOMP_RELEASE_TIME 0x2203 #define TX_ACOMP_RELEASE_TIME_MASK 0x0007 #define TX_ACOMP_RELEASE_TIME_SHFT 0 // TX_ACOMP_GAIN #define TX_ACOMP_GAIN 0x2204 #define TX_ACOMP_GAIN_MASK 0x003F #define TX_ACOMP_GAIN_SHFT 0 // TX_LIMITER_RELEASE_TIME #define TX_LIMITER_RELEASE_TIME 0x2205 // TX_ASQ_INT_SELECT #define TX_ASQ_INT_SELECT 0x2300 #define TX_ASQ_INT_SELECT_IALLIEN_MASK 0x0001 #define TX_ASQ_INT_SELECT_IALHIEN_MASK 0x0002 #define TX_ASQ_INT_SELECT_OVERMODIEN_MASK 0x0004 #define TX_ASQ_INT_SELECT_IALLIEN_SHFT 0 #define TX_ASQ_INT_SELECT_IALHIEN_SHFT 1 #define TX_ASQ_INT_SELECT_OVERMODIEN_SHFT 2 // TX_ASQ_LEVEL_LOW #define TX_ASQ_LEVEL_LOW 0x2301 #define TX_ASQ_LEVEL_LOW_MASK 0x00FF #define TX_ASQ_LEVEL_LOW_SHFT 0 // TX_ASQ_DURATION_LOW #define TX_ASQ_DURATION_LOW 0x2302 // TX_ASQ_LEVEL_HIGH #define TX_ASQ_LEVEL_HIGH 0x2303 #define TX_ASQ_LEVEL_HIGH_MASK 0x00FF #define TX_ASQ_LEVEL_HIGH_SHFT 0 // TX_ASQ_DURATION_LOW #define TX_ASQ_DURATION_HIGH 0x2304 // TX_RDS_INT_SOURCE #define TX_RDS_INT_SOURCE 0x2C00 #define TX_RDS_INT_SOURCE_FIFOMT_MASK 0x0001 #define TX_RDS_INT_SOURCE_CBUFWRAP_MASK 0x0002 #define TX_RDS_INT_SOURCE_FIFOXMIT_MASK 0x0004 #define TX_RDS_INT_SOURCE_CBUFXMIT_MASK 0x0008 #define TX_RDS_INT_SOURCE_PSXMIT_MASK 0x0010 #define TX_RDS_INT_SOURCE_FIFOMT_SHFT 0 #define TX_RDS_INT_SOURCE_CBUFWRAP_SHFT 1 #define TX_RDS_INT_SOURCE_FIFOXMIT_SHFT 2 #define TX_RDS_INT_SOURCE_CBUFXMIT_SHFT 3 #define TX_RDS_INT_SOURCE_PSXMIT_SHFT 4 // TX_RDS_PI #define TX_RDS_PI 0x2C01 // TX_RDS_PS_MIX #define TX_RDS_PS_MIX 0x2C02 #define TX_RDS_PS_MIX_MASK 0x0007 #define TX_RDS_PS_MIX_SHFT 0 // TX_RDS_PS_MISC #define TX_RDS_PS_MISC 0x2C03 #define TX_RDS_PS_MISC_RDSMS_MASK 0x0008 #define TX_RDS_PS_MISC_RDSTA_MASK 0x0010 #define TX_RDS_PS_MISC_RDSPTY_MASK 0x03E0 #define TX_RDS_PS_MISC_RDSTP_MASK 0x0400 #define TX_RDS_PS_MISC_FORCEB_MASK 0x0800 #define TX_RDS_PS_MISC_RDSD0_MASK 0x1000 #define TX_RDS_PS_MISC_RDSD1_MASK 0x2000 #define TX_RDS_PS_MISC_RDSD2_MASK 0x4000 #define TX_RDS_PS_MISC_RDSD3_MASK 0x8000 #define TX_RDS_PS_MISC_RDSMS_SHFT 3 #define TX_RDS_PS_MISC_RDSTA_SHFT 4 #define TX_RDS_PS_MISC_RDSPTY_SHFT 5 #define TX_RDS_PS_MISC_RDSTP_SHFT 10 #define TX_RDS_PS_MISC_FORCEB_SHFT 11 #define TX_RDS_PS_MISC_RDSD0_SHFT 12 #define TX_RDS_PS_MISC_RDSD1_SHFT 13 #define TX_RDS_PS_MISC_RDSD2_SHFT 14 #define TX_RDS_PS_MISC_RDSD3_SHFT 15 // TX_RDS_PS_REPEAT_COUNT #define TX_RDS_PS_REPEAT_COUNT 0x2C04 #define TX_RDS_PS_REPEAT_COUNT_MASK 0x00FF #define TX_RDS_PS_REPEAT_COUNT_SHFT 0 // TX_RDS_PS_MESSAGE_COUNT #define TX_RDS_PS_MESSAGE_COUNT 0x2C05 #define TX_RDS_PS_MESSAGE_COUNT_MASK 0x000F #define TX_RDS_PS_MESSAGE_COUNT_SHFT 0 // TX_RDS_PS_AF #define TX_RDS_PS_AF 0x2C06 // TX_RDS_FIFO_SIZE #define TX_RDS_FIFO_SIZE 0x2C07 #define TX_RDS_FIFO_SIZE_MASK 0x00FF #define TX_RDS_FIFO_SIZE_SHFT 0 //================================================================== // AM Receive Properties //================================================================== // AM_DEEMPHASIS #define AM_DEEMPHASIS 0x3100 #define AM_DEEMPHASIS_MASK 0x0001 #define AM_DEEMPHASIS_SHFT 0 // AM_CHANNEL_FILTER #define AM_CHANNEL_FILTER 0x3102 #define AM_CHANNEL_FILTER_MASK 0x0007 #define AM_CHANNEL_FILTER_SHFT 0 // AM_RSQ_INT_SOURCE #define AM_RSQ_INTERRUPTS 0x3200 //Si473x //#define AM_RSQ_INT_SOURCE 0x3200 #define AM_RSQ_INT_SOURCE_RSSILIEN_MASK 0x0001 #define AM_RSQ_INT_SOURCE_RSSIHIEN_MASK 0x0002 #define AM_RSQ_INT_SOURCE_ASNRLIEN_MASK 0x0004 #define AM_RSQ_INT_SOURCE_ASNRHIEN_MASK 0x0008 #define AM_RSQ_INT_SOURCE_RSSILIEN_SHFT 0 #define AM_RSQ_INT_SOURCE_RSSIHIEN_SHFT 1 #define AM_RSQ_INT_SOURCE_ASNRLIEN_SHFT 2 #define AM_RSQ_INT_SOURCE_ASNRHIEN_SHFT 3 // AM_RSQ_SNR_HI_THRESHOLD #define AM_RSQ_SNR_HI_THRESHOLD 0x3201 #define AM_RSQ_SNR_HI_THRESHOLD_MASK 0x007F #define AM_RSQ_SNR_HI_THRESHOLD_SHFT 0 // AM_RSQ_SNR_LO_THRESHOLD #define AM_RSQ_SNR_LO_THRESHOLD 0x3202 #define AM_RSQ_SNR_LO_THRESHOLD_MASK 0x007F #define AM_RSQ_SNR_LO_THRESHOLD_SHFT 0 // AM_RSQ_RSSI_HI_THRESHOLD #define AM_RSQ_RSSI_HI_THRESHOLD 0x3203 #define AM_RSQ_RSSI_HI_THRESHOLD_MASK 0x007F #define AM_RSQ_RSSI_HI_THRESHOLD_SHFT 0 // AM_RSQ_RSSI_LO_THRESHOLD #define AM_RSQ_RSSI_LO_THRESHOLD 0x3204 #define AM_RSQ_RSSI_LO_THRESHOLD_MASK 0x007F #define AM_RSQ_RSSI_LO_THRESHOLD_SHFT 0 // AM_SOFT_MUTE_RATE #define AM_SOFT_MUTE_RATE 0x3300 // AM_SOFT_MUTE_SLOPE #define AM_SOFT_MUTE_SLOPE 0x3301 #define AM_SOFT_MUTE_SLOPE_MASK 0x000F #define AM_SOFT_MUTE_SLOPE_SHFT 0 // AM_SOFT_MUTE_MAX_ATTENUATION #define AM_SOFT_MUTE_MAX_ATTENUATION 0x3302 #define AM_SOFT_MUTE_MAX_ATTENUATION_MASK 0x003F #define AM_SOFT_MUTE_MAX_ATTENUATION_SHFT 0 // AM_SOFT_MUTE_SNR_THRESHOLD #define AM_SOFT_MUTE_SNR_THRESHOLD 0x3303 #define AM_SOFT_MUTE_SNR_THRESHOLD_MASK 0x003F #define AM_SOFT_MUTE_SNR_THRESHOLD_SHFT 0 // AM_SEEK_BAND_BOTTOM #define AM_SEEK_BAND_BOTTOM 0x3400 // AM_SEEK_BAND_TOP #define AM_SEEK_BAND_TOP 0x3401 // AM_SEEK_FREQ_SPACING #define AM_SEEK_FREQ_SPACING 0x3402 #define AM_SEEK_FREQ_SPACING_MASK 0x000F #define AM_SEEK_FREQ_SPACING_SHFT 0 // AM_SEEK_TUNE_SNR_THRESHOLD //#define AM_SEEK_TUNE_SNR_THRESHOLD 0x3403 //Si474x #define AM_SEEK_SNR_THRESHOLD 0x3403 //Si473x #define AM_SEEK_TUNE_SNR_THRESHOLD_MASK 0x003F #define AM_SEEK_TUNE_SNR_THRESHOLD_SHFT 0 // AM_SEEK_TUNE_RSSI_THRESHOLD //#define AM_SEEK_TUNE_RSSI_THRESHOLD 0x3404 //Si474x #define AM_SEEK_RSSI_THRESHOLD 0x3404 //Si473x #define AM_SEEK_TUNE_RSSI_THRESHOLD_MASK 0x003F #define AM_SEEK_TUNE_RSSI_THRESHOLD_SHFT 0 //================================================================== // General Receive Properties //================================================================== // RX_VOLUME #define RX_VOLUME 0x4000 #define RX_VOLUME_MASK 0x003F #define RX_VOLUME_SHFT 0 // RX_HARD_MUTE #define RX_HARD_MUTE 0x4001 #define RX_HARD_MUTE_RMUTE_MASK 0x0001 #define RX_HARD_MUTE_LMUTE_MASK 0x0002 #define RX_HARD_MUTE_RMUTE_SHFT 0 #define RX_HARD_MUTE_LMUTE_SHFT 1 //================================================================== // Bit Definitions for Properties //================================================================== // DIGITAL_MODE - used for input or output #define DIGITAL_MODE_I2S 0x0 #define DIGITAL_MODE_LEFT 0x6 #define DIGITAL_MODE_MSB1ST 0xC #define DIGITAL_MODE_MSB2ND 0x8 // DIGITAL_SIZE - used for input or output #define DIGITAL_SIZE_16 0x0 #define DIGITAL_SIZE_20 0x1 #define DIGITAL_SIZE_24 0x2 #define DIGITAL_SIZE_8 0x3 // FM_DEEMPH #define FM_DEEMPH_75US 0x2 #define FM_DEEMPH_50US 0x1 // FM_RDS_BLETH - used for all block error thresholds #define FM_RDS_BLETH_NO_ERRORS 0x0 #define FM_RDS_BLETH_1OR2_ERRORS 0x1 #define FM_RDS_BLETH_3TO5_ERRORS 0x2 #define FM_RDS_BLETH_UNCORRECTABLE 0x3 // TX_LINE_INPUT_LEVEL_LIATTEN #define TX_LINE_INPUT_LEVEL_LIATTEN_396kOhm 0x0000 #define TX_LINE_INPUT_LEVEL_LIATTEN_100kOhm 0x1000 #define TX_LINE_INPUT_LEVEL_LIATTEN_74kOhm 0x2000 #define TX_LINE_INPUT_LEVEL_LIATTEN_60kOhm 0x3000 // TX_DEEMPHASIS #define TX_PREEMPHASIS_75US 0x0 #define TX_PREEMPHASIS_50US 0x1 #define TX_PREEMPHASIS_DISABLED 0x2 // TX_ACOMP_ATTACK_TIME #define TX_ACOMP_ATTACK_TIME_0_5MS 0x0 #define TX_ACOMP_ATTACK_TIME_1_0MS 0x1 #define TX_ACOMP_ATTACK_TIME_1_5MS 0x2 #define TX_ACOMP_ATTACK_TIME_2_0MS 0x3 #define TX_ACOMP_ATTACK_TIME_2_5MS 0x4 #define TX_ACOMP_ATTACK_TIME_3_0MS 0x5 #define TX_ACOMP_ATTACK_TIME_3_5MS 0x6 #define TX_ACOMP_ATTACK_TIME_4_0MS 0x7 #define TX_ACOMP_ATTACK_TIME_4_5MS 0x8 #define TX_ACOMP_ATTACK_TIME_5_0MS 0x9 // TX_ACOMP_RELEASE_TIME #define TX_ACOMP_RELEASE_TIME_100MS 0x0 #define TX_ACOMP_RELEASE_TIME_200MS 0x1 #define TX_ACOMP_RELEASE_TIME_350MS 0x2 #define TX_ACOMP_RELEASE_TIME_525MS 0x3 #define TX_ACOMP_RELEASE_TIME_1000MS 0x4 // TX_RDS_PS_MIX #define TX_RDS_PS_MIX_FIFO_EMPTY 0x0 #define TX_RDS_PS_MIX_12_5_PCT 0x1 #define TX_RDS_PS_MIX_25_PCT 0x2 #define TX_RDS_PS_MIX_50_PCT 0x3 #define TX_RDS_PS_MIX_75_PCT 0x4 #define TX_RDS_PS_MIX_87_5_PCT 0x5 #define TX_RDS_PS_MIX_100_PCT 0x6 // TX_RDS_PS_MISC_PTY #define TX_RDS_PS_MISC_PTY_NONE 0 #define TX_RDS_PS_MISC_PTY_NEWS 1 #define TX_RDS_PS_MISC_PTY_INFO 2 #define TX_RDS_PS_MISC_PTY_SPORTS 3 #define TX_RDS_PS_MISC_PTY_TALK 4 #define TX_RDS_PS_MISC_PTY_ROCK 5 #define TX_RDS_PS_MISC_PTY_CLROCK 6 #define TX_RDS_PS_MISC_PTY_ADHITS 7 #define TX_RDS_PS_MISC_PTY_SOFTROCK 8 #define TX_RDS_PS_MISC_PTY_TOP40 9 #define TX_RDS_PS_MISC_PTY_COUNTRY 10 #define TX_RDS_PS_MISC_PTY_OLDIES 11 #define TX_RDS_PS_MISC_PTY_SOFT 12 #define TX_RDS_PS_MISC_PTY_NOST 13 #define TX_RDS_PS_MISC_PTY_JAZZ 14 #define TX_RDS_PS_MISC_PTY_CLASS 15 #define TX_RDS_PS_MISC_PTY_RHYBLUES 16 #define TX_RDS_PS_MISC_PTY_SOFTRB 17 #define TX_RDS_PS_MISC_PTY_FGNLANG 18 #define TX_RDS_PS_MISC_PTY_RMUSIC 19 #define TX_RDS_PS_MISC_PTY_RTALK 20 #define TX_RDS_PS_MISC_PTY_PERS 21 #define TX_RDS_PS_MISC_PTY_PUBLIC 22 #define TX_RDS_PS_MISC_PTY_COLLEGE 23 #define TX_RDS_PS_MISC_PTY_UN24 24 #define TX_RDS_PS_MISC_PTY_UN25 25 #define TX_RDS_PS_MISC_PTY_UN26 26 #define TX_RDS_PS_MISC_PTY_UN27 27 #define TX_RDS_PS_MISC_PTY_UN28 28 #define TX_RDS_PS_MISC_PTY_WTHR 29 #define TX_RDS_PS_MISC_PTY_EMERTEST 30 #define TX_RDS_PS_MISC_PTY_ALERT 31 // AM_CHANNEL_FILTER_BW #define AM_CHANNEL_FILTER_BW_6KHZ 0 #define AM_CHANNEL_FILTER_BW_4KHZ 1 #define AM_CHANNEL_FILTER_BW_3KHZ 2 #define AM_CHANNEL_FILTER_BW_2KHZ 3 //================================================================== // WB Receive Properties //================================================================== // WB_MAX_TUNE_ERROR #define WB_MAX_TUNE_ERROR 0x5108 // WB_VALID_SNR_THRESHOLD #define WB_VALID_SNR_THRESHOLD 0x5403 #define WB_VALID_SNR_THRESHOLD_MASK 0x007F #define WB_VALID_SNR_THRESHOLD_SHFT 0 // WB_VALID_RSSI_THRESHOLD #define WB_VALID_RSSI_THRESHOLD 0x5404 #define WB_VALID_RSSI_THRESHOLD_MASK 0x007F #define WB_VALID_RSSI_THRESHOLD_SHFT 0 #define FM_BAND 1 #define AM_BAND 2 #define IO2W_SENB0_ADDRESS 0x22 #define IO2W_SENB1_ADDRESS 0xC6 #define SENB 0 #define DEMO_DELAY 5000 #define RDS_DELAY 30000 //----------------------------------------------------------------------------- // Defines //----------------------------------------------------------------------------- #define IO3W 0 #define IO2W 1 #define MIN_FM_FREQ 8750 #define MAX_FM_FREQ 10800 #define FM_STEP 10 #define MIN_AM_FREQ 522 #define MAX_AM_FREQ 1620 #define AM_STEP 9 extern void TU_Init(void); extern T_ERROR_OP Si47XX_Power_Up(T_POWER_UP_TYPE power_up_type); extern T_ERROR_OP Si47XX_Wait_STC(void); extern void si47xx_set_property(unsigned int propNumber, unsigned int propValue); extern void Si47XX_SetDSPPropertys(unsigned char IN_RxSensitivity); extern void Si47XX_Power_OFF(void); extern void ResetSi47XX_2w(void); extern unsigned char OperationSi47XX_2w(T_OPERA_MODE operation, unsigned char *data1, unsigned char numBytes); extern unsigned char si47xx_get_vol(void); extern void si47xx_set_vol(unsigned char vol); extern void si47xx_mute(unsigned char muteStaus); extern T_ERROR_OP Si47XX_Set_FM_Frequency(unsigned short channel_freq); extern unsigned int si47xx_command_TUNE_STATUS_Freq(unsigned char band); extern unsigned char si47xx_command_FM_SEEK_START_DOWN(void); extern unsigned char si47xx_command_FM_SEEK_START_UP(void); #endif //Copright (c) 2021,FFT_Combo //All rights reserved. //名稱: radio.c //說明: si4730驅動 //作者: feeling1791 (Wechat) //日期: 2020-12-20 //版本: ver3.1 #include "radio.h" #include "delay.h" #include "display.h" void TU_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5| GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //GPIO_SetBits(GPIOA,GPIO_Pin_5); //sda //GPIO_SetBits(GPIOA,GPIO_Pin_6); //scl RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_1 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //GPIO_SetBits(GPIOA,GPIO_Pin_7); //rst TU_POWER_OFF();//Tuner power control,Hight--->OFF,Low---> ON } /************************************** // 設備上電,IC軟開機 ***************************************/ T_ERROR_OP Si47XX_Power_Up(T_POWER_UP_TYPE power_up_type) { unsigned short loop_counter = 0; unsigned char Si47XX_reg_data[32]; unsigned char error_ind = 0; unsigned char Si47XX_power_up[] = {0x01,0xd0,0x05}; ResetSi47XX_2w(); delay_ms(250); //if use internal crystal, need wait 500ms, Si47XX_power_up[1] = 0x(5x) switch(power_up_type) { case FM_RECEIVER: { Si47XX_power_up[1] = 0xd0; //使用時鐘晶振,32.768khz ,FM模式 Si47XX_power_up[2] = 0x05; ////模擬L/R輸出 break; } case AM_RECEIVER: { Si47XX_power_up[1] = 0xd1; Si47XX_power_up[2] = 0x05; break; } } //send CMD error_ind = OperationSi47XX_2w(WRITE, &(Si47XX_power_up[0]), 3); if(error_ind) return I2C_ERROR; //wait CTS = 1 do { error_ind = OperationSi47XX_2w(READ, &(Si47XX_reg_data[0]), 1); if(error_ind) return I2C_ERROR; loop_counter++; } while(((Si47XX_reg_data[0]) != 0x80) && (loop_counter < 0xff)); //loop_counter limit should guarantee at least 300us if(loop_counter >= 0xff) return LOOP_EXP_ERROR; return OK; } /************************************** Si47XX_Wait_STC(): wait STC = 1 (then clear it-removed) ***************************************/ T_ERROR_OP Si47XX_Wait_STC(void) { unsigned short loop_counter = 0, loop_counter_1 = 0; unsigned char Si47XX_reg_data[32]; unsigned char error_ind = 0; unsigned char Si47XX_get_int_status[] = {0x14}; do { //send CMD error_ind = OperationSi47XX_2w(WRITE, &(Si47XX_get_int_status[0]), 1); if(error_ind) return I2C_ERROR; /* wait CTS = 1 and then wait STCINT = 1 */ do { error_ind = OperationSi47XX_2w(READ, &(Si47XX_reg_data[0]), 1); if(error_ind) return I2C_ERROR; loop_counter_1++; } while(((Si47XX_reg_data[0]&0x80) == 0) && (loop_counter_1 < 0xff)); //loop_counter limit should guarantee at least 300us if(loop_counter_1 >= 0xff) return LOOP_EXP_ERROR; loop_counter_1 = 0; /* wait CTS end */ error_ind = OperationSi47XX_2w(READ, &(Si47XX_reg_data[0]), 1); if(error_ind) return I2C_ERROR; loop_counter++; } while(((Si47XX_reg_data[0]&0x01) == 0) && (loop_counter < 0xffff)); //loop_counter(0xffff) limit should guarantee at least: for FM,worst case = 60ms*((108-87.5)/0.1+1)= 12s to wait STC = 1 // for AM,worst case = 80ms*((1710-520)/9+1)= 11s to wait STC = 1 if(loop_counter == 0xffff) return LOOP_EXP_ERROR; return OK; } //----------------------------------------------------------------------------------------------- // 設置屬性值(屬性格式0x0000) //----------------------------------------------------------------------------------------------- void si47xx_set_property(unsigned int propNumber, unsigned int propValue) { unsigned char cmd[8]={0x00,0xd0,0x00,0x00,0x00,0x00,0x00,0x00}; cmd[0] = SET_PROPERTY; // Initialize the reserved section to 0 cmd[1] = 0; // Put the property number in the third and fourth bytes. cmd[2] = (unsigned char)(propNumber >> 8); cmd[3] = (unsigned char)(propNumber & 0x00FF); // Put the property value in the fifth and sixth bytes. cmd[4] = (unsigned char)(propValue >> 8); cmd[5] = (unsigned char)(propValue & 0x00FF); // Invoke the command OperationSi47XX_2w(WRITE,&cmd[0],6); } //----------------------------------------------------------------------------------------------- // 設備參數(shù)初始化(設置屬性) //----------------------------------------------------------------------------------------------- void Si47XX_SetDSPPropertys(unsigned char IN_RxSensitivity) { //設定中斷 STCIEN si47xx_set_property(GPO_IEN,0x00c9); delay_ms(10); //設定參考時鐘 32768K si47xx_set_property(REFCLK_FREQ,0x8000); delay_ms(10); //設定參考時鐘分頻 1分頻 si47xx_set_property(REFCLK_PRESCALE,0x0001); delay_ms(10); //設定音量0~63 si47xx_set_property(RX_VOLUME,63); delay_ms(10); //設定左右聲道靜音 si47xx_set_property(RX_HARD_MUTE,0x0000); delay_ms(10); //FM調頻屬性設置 //設定去加重50us 0x0001 si47xx_set_property(FM_DEEMPHASIS,FM_Deemphasis); delay_ms(10); //設定FM_BLEND_STEREO_THRESHOLD 30 dBuV RSSI高于設定閾值時開啟立體聲模式 si47xx_set_property(FM_BLEND_STEREO_THRESHOLD,FM_BLEND_STEREO); //設定FM_BLEND_STEREO_THRESHOLD 強制立體聲 設置為0 //si47xx_set_property(FM_BLEND_STEREO_THRESHOLD,0x0000); delay_ms(10); //設定FM_BLEND_MONO_THRESHOLD 30 dBuV RSSI低于于設定閾值時開啟混音模式 si47xx_set_property(FM_BLEND_MONO_THRESHOLD,FM_BLEND_MONO); //設定FM_BLEND_MONO_THRESHOLD 強制立體聲 設置為0 //si47xx_set_property(FM_BLEND_MONO_THRESHOLD,0x0000); delay_ms(10); //設定FM_MAX_TUNE_ERROR 40 kHz si47xx_set_property(FM_MAX_TUNE_ERROR,0x0028); delay_ms(10); //設定FM_RSQ_INT_SOURCE Enable blend,Audio SNR high,Audio SNR low,RSSI high and RSSI low interrupts. si47xx_set_property(FM_RSQ_INT_SOURCE,0x008f); delay_ms(10); //設定FM_RSQ_SNR_HI_THRESHOLD 30dB si47xx_set_property(FM_RSQ_SNR_HI_THRESHOLD,0x001e); delay_ms(10); //設定FM_RSQ_SNR_LO_THRESHOLD 6dB si47xx_set_property(FM_RSQ_SNR_LO_THRESHOLD,0x0006); delay_ms(10); //設定FM_RSQ_RSSI_HI_THRESHOLD 50dBuV si47xx_set_property(FM_RSQ_RSSI_HI_THRESHOLD,0x0032); delay_ms(10); //設定FM_RSQ_RSSI_LO_THRESHOLD 24dBuV si47xx_set_property(FM_RSQ_RSSI_LO_THRESHOLD,0x0018); delay_ms(10); //設定FM_RSQ_BLEND_THRESHOLD 50% si47xx_set_property(FM_RSQ_BLEND_THRESHOLD,0x0032); delay_ms(10); //設定FM_SOFT_MUTE_MAX_ATTENUATION 10dB si47xx_set_property(FM_SOFT_MUTE_MAX_ATTENUATION,0x000a); delay_ms(10); //設定FM_SOFT_MUTE_SNR_THRESHOLD 6dB si47xx_set_property(FM_SOFT_MUTE_SNR_THRESHOLD,0x0006); delay_ms(10); //設定FM_SEEK_BAND_BOTTOM 8750(87.5M) 0x21fc si47xx_set_property(FM_SEEK_BAND_BOTTOM,FM_BAND_BOTTOM_VALUE); delay_ms(10); //設定FM_SEEK_BAND_TOP 10790 (107.9) 0x2a26 si47xx_set_property(FM_SEEK_BAND_TOP,FM_BAND_TOP_VALUE); delay_ms(10); //設定FM_SEEK_FREQ_SPACING 100k 0x000a 100 kHz Spacing si47xx_set_property(FM_SEEK_FREQ_SPACING,FM_bandwidth); delay_ms(10); if(IN_RxSensitivity==0) { //設定FM_SEEK_TUNE_SNR_THRESHOLD 2dBuV 0x0002 si47xx_set_property(FM_SEEK_TUNE_SNR_THRESHOLD,FM_SNR_LOCAL); delay_ms(10); //設定FM_SEEK_TUNE_RSSI_THRESHOLD 8dBuV 0x0008 si47xx_set_property(FM_SEEK_TUNE_RSSI_THRESHOLD,FM_RSSI_LOCAL); delay_ms(10); } else { //設定FM_SEEK_TUNE_SNR_THRESHOLD 2dBuV 0x0002 si47xx_set_property(FM_SEEK_TUNE_SNR_THRESHOLD,FM_SNR_REMOTE); delay_ms(10); //設定FM_SEEK_TUNE_RSSI_THRESHOLD 8dBuV 0x0008 si47xx_set_property(FM_SEEK_TUNE_RSSI_THRESHOLD,FM_RSSI_REMOTE); delay_ms(10); } //AM調頻屬性設置 //設定AM_CHANNEL_FILTER (4kHz 0x0001)(6kHz 0x0000)(3kHz 0x0002)(2kHz 0x0003) si47xx_set_property(AM_CHANNEL_FILTER,0x0001); delay_ms(10); //設定AM_DEEMPHASIS 50us 0x0001 si47xx_set_property(AM_DEEMPHASIS,AM_Deemphasis); delay_ms(10); //設定AM_RSQ_INTERRUPTS All interrupts are disabled by default 0x0000 si47xx_set_property(AM_RSQ_INTERRUPTS,0x0000); delay_ms(10); //設定AM_RSQ_SNR_LO_THRESHOLD 10 dB 0x000a si47xx_set_property(AM_RSQ_SNR_LO_THRESHOLD,0x000a); delay_ms(10); //設定AM_RSQ_SNR_HI_THRESHOLD 10 dB 0x000a si47xx_set_property(AM_RSQ_SNR_HI_THRESHOLD,0x000a); delay_ms(10); //設定AM_RSQ_RSSI_HI_THRESHOLD 30 dB 0x001e si47xx_set_property(AM_RSQ_RSSI_HI_THRESHOLD,0x001e); delay_ms(10); //設定AM_RSQ_RSSI_LO_THRESHOLD 10 dB 0x000a si47xx_set_property(AM_RSQ_RSSI_LO_THRESHOLD,0x000a); delay_ms(10); //設定AM_SOFT_MUTE_RATE 278dB/s 0x0040 si47xx_set_property(AM_SOFT_MUTE_RATE,0x0040); delay_ms(10); //設定AM_SOFT_MUTE_MAX_ATTENUATION 10dB 0x000a si47xx_set_property(AM_SOFT_MUTE_MAX_ATTENUATION,0x000a); delay_ms(10); //設定AM_SOFT_MUTE_SNR_THRESHOLD 9dB 0x0009 si47xx_set_property(AM_SOFT_MUTE_SNR_THRESHOLD,0x0009); delay_ms(10); //設定AM_SOFT_MUTE_SNR_THRESHOLD 9dB 0x0009 si47xx_set_property(AM_SOFT_MUTE_SNR_THRESHOLD,0x0009); delay_ms(10); //設定AM_SEEK_BAND_BOTTOM 0x020a 522KHz si47xx_set_property(AM_SEEK_BAND_BOTTOM,MW_BAND_BOTTOM_VALUE); delay_ms(10); //設定AM_SEEK_BAND_TOP 0x06ae 1710KHz si47xx_set_property(AM_SEEK_BAND_TOP,MW_BAND_TOP_VALUE); delay_ms(10); //設定AM_SEEK_FREQ_SPACING 0x000a 10kHz si47xx_set_property(AM_SEEK_FREQ_SPACING,0x0009); delay_ms(10); if(IN_RxSensitivity==0) { //設定AM_SEEK_SNR_THRESHOLD 0x0002 2dB si47xx_set_property(AM_SEEK_SNR_THRESHOLD,MW_SNR_LOCAL); delay_ms(10); //設定AM_SEEK_RSSI_THRESHOLD 0x000f 15dBuV si47xx_set_property(AM_SEEK_RSSI_THRESHOLD,MW_RSSI_LOCAL); delay_ms(10); } else { //設定AM_SEEK_SNR_THRESHOLD 0x0002 2dB si47xx_set_property(AM_SEEK_SNR_THRESHOLD,MW_SNR_REMOTE); delay_ms(10); //設定AM_SEEK_RSSI_THRESHOLD 0x000f 15dBuV si47xx_set_property(AM_SEEK_RSSI_THRESHOLD,MW_RSSI_REMOTE); delay_ms(10); } } //----------------------------------------------------------------------------------------------- // 設備關機 //----------------------------------------------------------------------------------------------- void Si47XX_Power_OFF(void) { unsigned char write_buf[1]={0x00}; write_buf[0]=POWER_DOWN; OperationSi47XX_2w(WRITE,&write_buf[0],1); delay_us(300); } //----------------------------------------------------------------------------------------------- //獲取屬性值(高8位,低8位分別獲取) //----------------------------------------------------------------------------------------------- void si47xx_get_property(unsigned int propNumber, unsigned char *valueH,unsigned char *valueL) { unsigned char cmd[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; cmd[0] = GET_PROPERTY; //Initialize the reserved section to 0 cmd[1] = 0; //Put the property number in the third and fourth bytes. cmd[2] = (unsigned char)(propNumber >> 8); cmd[3] = (unsigned char)(propNumber & 0x00FF); //Invoke the command OperationSi47XX_2w(WRITE,&cmd[0],4); delay_ms(300); OperationSi47XX_2w(READ,&cmd[0],4); *valueH = cmd[2]; *valueL = cmd[3]; //Freq=((u16)rsp[2] << 8) | (u16)rsp[3]; } //----------------------------------------------------------------------------------------------- //獲取音量值 //----------------------------------------------------------------------------------------------- unsigned char si47xx_get_vol(void) { unsigned char valueH = 0; unsigned char valueL = 0; unsigned char vol; si47xx_get_property(RX_VOLUME, &valueH, &valueL); delay_ms(10); vol=((u16)valueH << 8) | (u16)valueL; return vol; } //----------------------------------------------------------------------------------------------- //設定音量值 //----------------------------------------------------------------------------------------------- void si47xx_set_vol(unsigned char vol) { if(vol <= 63) { si47xx_set_property(RX_VOLUME,vol); delay_ms(10); } } //----------------------------------------------------------------------------------------------- //MUTE AUDIO //----------------------------------------------------------------------------------------------- void si47xx_mute(unsigned char muteStaus) { if(muteStaus) { si47xx_set_property(RX_HARD_MUTE,0x0003); //mute on delay_ms(10); } else { si47xx_set_property(RX_HARD_MUTE,0x0000); //unmute delay_ms(10); } } /************************************** Si47XX_Set_Property_FM_SNR_Threshold() Default is 3dB ***************************************/ T_ERROR_OP Si47XX_Set_Property_FM_SNR_Threshold(void) { unsigned short loop_counter = 0; unsigned char Si47XX_reg_data[32]; unsigned char error_ind = 0; unsigned char Si47XX_set_property[] = {0x12,0x00,0x14,0x03,0x00,0x02}; //SNR threshold = 0x0002 = 2dB //send CMD error_ind = OperationSi47XX_2w(WRITE, &(Si47XX_set_property[0]), 6); if(error_ind) return I2C_ERROR; //wait CTS = 1 do { error_ind = OperationSi47XX_2w(READ, &(Si47XX_reg_data[0]), 1); if(error_ind) return I2C_ERROR; loop_counter++; } while(((Si47XX_reg_data[0]) != 0x80) && (loop_counter < 0xff)); //loop_counter limit should guarantee at least 300us if(loop_counter >= 0xff) return LOOP_EXP_ERROR; return OK; } /************************************** Si47XX_Set_Property_FM_RSSI_Threshold() Default is 20dBuV ***************************************/ T_ERROR_OP Si47XX_Set_Property_FM_RSSI_Threshold(void) { unsigned short loop_counter = 0; unsigned char Si47XX_reg_data[32]; unsigned char error_ind = 0; unsigned char Si47XX_set_property[] = {0x12,0x00,0x14,0x04,0x00,0x08}; //RSSI threshold = 0x0008 = 8dBuV //send CMD error_ind = OperationSi47XX_2w(WRITE, &(Si47XX_set_property[0]), 6); if(error_ind) return I2C_ERROR; //wait CTS = 1 do { error_ind = OperationSi47XX_2w(READ, &(Si47XX_reg_data[0]), 1); if(error_ind) return I2C_ERROR; loop_counter++; } while(((Si47XX_reg_data[0]) != 0x80) && (loop_counter < 0xff)); //loop_counter limit should guarantee at least 300us if(loop_counter >= 0xff) return LOOP_EXP_ERROR; return OK; } /************************************** static Si47XX_FM_Tune_Freq() ***************************************/ static T_ERROR_OP Si47XX_FM_Tune_Freq(unsigned short channel_freq) { unsigned short loop_counter = 0; unsigned char Si47XX_reg_data[32]; unsigned char error_ind = 0; unsigned char Si47XX_tune_freq[] = {0x20,0x00,0x00,0x00,0x00}; //0x27F6=10230KHz Si47XX_tune_freq[2] = (channel_freq&0xff00) >> 8; Si47XX_tune_freq[3] = (channel_freq&0x00ff); //send CMD error_ind = OperationSi47XX_2w(WRITE, &(Si47XX_tune_freq[0]), 5); if(error_ind) return I2C_ERROR; //wait CTS = 1 do { error_ind = OperationSi47XX_2w(READ, &(Si47XX_reg_data[0]), 1); if(error_ind) return I2C_ERROR; loop_counter++; } while(((Si47XX_reg_data[0]) != 0x80) && (loop_counter < 0xff)); //loop_counter limit should guarantee at least 300us if(loop_counter >= 0xff) return LOOP_EXP_ERROR; return OK; } /************************************** Si47XX_Set_FM_Frequency() ***************************************/ T_ERROR_OP Si47XX_Set_FM_Frequency(unsigned short channel_freq) { if(Si47XX_FM_Tune_Freq(channel_freq) != OK) return G_ERROR; if(Si47XX_Wait_STC() != OK) return G_ERROR; return OK; } //----------------------------------------------------------------------------------------------- // 設備復位 //----------------------------------------------------------------------------------------------- void ResetSi47XX_2w(void) { TU_SDA_OUT(); TU_SCL_OUT(); TU_SDA_L; TU_RST_L; TU_SCL_H; delay_ms(500); TU_RST_H; delay_ms(10); TU_SDA_H; delay_ms(10); } //----------------------------------------------------------------------------------------------- // IIC 讀寫函數(shù) 例如 OperationSi47XX_2w(WRITE,&write_buf[0],3); OperationSi47XX_2w(READ,&cmd[0],4); //----------------------------------------------------------------------------------------------- unsigned char OperationSi47XX_2w(T_OPERA_MODE operation, unsigned char *data1, unsigned char numBytes) { unsigned char controlWord,j; unsigned char error = 0; char i; //Start: make sure here SCK = 1,SDA = 1(output). TU_SCL_H; TU_SDA_H; delay_us(3); TU_SDA_L; delay_us(3); TU_SCL_L; delay_us(3); //Write control data: make sure here: SCL = 0; SDA = 0 //controlWord = radio_address | (operation & 0x01); //sens = 0 device address = 0010001x r/w b //sens = 1 device address = 1100011x r/w b if(operation == READ) { controlWord = 0xc7; //IIC器件讀地址0xc7 } else { controlWord = 0xc6; //IIC器件寫地址0xc6 } for(i = 8; i > 0; i--) //Write 1 byte { if((controlWord >> (i-1)) & 0x01) TU_SDA_H; else TU_SDA_L; delay_us(3); TU_SCL_H; delay_us(3); TU_SCL_L; delay_us(3); } //Check ACK for control word /*******************************************/ TU_SDA_IN(); delay_us(3); TU_SCL_H; delay_us(3); if((TU_SDA_read) != 0) { error = 1; goto Stop_2W; } /*******************************************/ TU_SCL_L; delay_us(3); //WRITE or READ data for(j = 0; j < numBytes; j++, data1++) { if(operation == WRITE) { TU_SDA_OUT(); } else { TU_SDA_IN(); } for(i = 8; i > 0; i--) //write or read 1 byte { if(operation == WRITE) { if( (*data1 >> (i-1)) & 0x01 ) TU_SDA_H; else TU_SDA_L; } delay_us(3); TU_SCL_H; delay_us(3); if(operation == READ) { *data1 = (*data1 << 1) | (TU_SDA_read); //READ_SDIO; } TU_SCL_L; delay_us(3); } //CHECK ACK or SEND ACK=0,最后一個bit 的ACK必須發(fā)送 if(operation == WRITE) { TU_SDA_IN(); } else { TU_SDA_OUT(); if(j == (numBytes - 1)) TU_SDA_H; else TU_SDA_L; } delay_us(3); TU_SCL_H; delay_us(3); if(operation == WRITE) { if((TU_SDA_read) != 0) { error = 1; goto Stop_2W; } } TU_SCL_L; delay_us(3); } //STOP: make sure here: SCL= 0 Stop_2W: TU_SDA_OUT(); TU_SDA_L; delay_us(3); TU_SCL_H; delay_us(3); TU_SDA_H; delay_us(3); return(error); //no return data } unsigned char si47xx_command_FM_SEEK_START_UP(void) { unsigned short loop_counter = 0; unsigned char RES_buf[1]={0x00}; unsigned char cmd[2]={0x00,0x00}; cmd[0]=FM_SEEK_START; cmd[1]=0x0c; OperationSi47XX_2w(WRITE,&cmd[0],2); delay_ms(150); do{ OperationSi47XX_2w(READ,&RES_buf[0],1); delay_us(300); loop_counter++; } while((((RES_buf[0])&0x80) == 0) && (loop_counter < 0xff)); if(loop_counter >= 0xff) { return ERROR; } else { return OK; } } //----------------------------------------------------------------------------------------------- //自動首臺-向上 FM_SEEK_START //----------------------------------------------------------------------------------------------- unsigned char si47xx_command_FM_SEEK_START_DOWN(void) { unsigned short loop_counter = 0; unsigned char RES_buf[1]={0x00}; unsigned char cmd[2]={0x00,0x00}; cmd[0]=FM_SEEK_START; cmd[1]=0x04; OperationSi47XX_2w(WRITE, &cmd[0],2); delay_ms(150); do{ OperationSi47XX_2w(READ,&RES_buf[0],1); delay_us(300); loop_counter++; } while((((RES_buf[0])&0x80) == 0) && (loop_counter < 0xff)); if(loop_counter >= 0xff) { return ERROR; } else { return OK; } } /********************************************************************************************************************************/ void si47xx_command_FM_TUNE_STATUS(unsigned char *res) { unsigned char cmd[2]={0x00,0x00}; cmd[0]=FM_TUNE_STATUS; cmd[1]=0x03; //aborts a seek currently in progress;clears the seek/tune complete interrupt status indicator 0x01 不然搜臺錯誤。 OperationSi47XX_2w(WRITE,&cmd[0],2); delay_us(300); OperationSi47XX_2w(READ,&res[0],8); } void si47xx_command_GET_INT_STATUS(unsigned char *res) { unsigned char cmd[2]={0x00,0x00}; cmd[0]=GET_INT_STATUS; //cmd[1]=0x01; //clears the seek/tune complete interrupt status indicator 0x01 不然搜臺錯誤。 OperationSi47XX_2w(WRITE,&cmd[0],1); delay_us(300); OperationSi47XX_2w(READ,&res[0],1); } unsigned int si47xx_command_TUNE_STATUS_Freq(unsigned char band) { unsigned int Freq; unsigned char rsp[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; unsigned char Res[1]={0x00}; //Reply Status. Clear-to-send high. STCINT = 1 si47xx_command_GET_INT_STATUS(&Res[0]); delay_ms(10); if(band==1) { si47xx_command_FM_TUNE_STATUS(&rsp[0]); if(rsp[0]==0x88) { Freq=((u16)rsp[2] << 8) | (u16)rsp[3]; return Freq; } else { return 0; } } return Freq; } /********************************************************************************************************************************/ |
樓主能否共享下si4730驅動程序,謝謝 |
樓主幫忙發(fā)一份給我學習學習,萬分感謝 |
請樓主發(fā)一份給我,整一套來聽聽。254370820@qq.com. |
feeling1791 發(fā)表于 2022-11-11 16:03 可以也給我發(fā)一份嗎?謝謝! 38793307@qq.com |
煩請樓主也發(fā)一份給我學習學習。459299729@qq.com。謝謝! |
煩請樓主也發(fā)一份給我學習學習,l.htlht@163.com 謝謝 |
這個功放方案很好用,學習下。 |
煩請樓主也發(fā)一份給我學習學習。123754086@qq.com。謝謝! |
sunping360 發(fā)表于 2022-10-18 07:04 你好,樓主好久都不來51黑了,你能把文件發(fā)一份給我?123866032@qq.com 謝謝 |
太復雜了!不適合我這種初級DIY 玩玩藍牙+3116就夠了 |
樓主幫忙發(fā)一份給我學習學習,萬分感謝![]() |
樓主可以發(fā)一份文件給我嘛,學習學習 ![]() |
佩服樓主技術,能否發(fā)一份資料。正在學習單片機萬分感謝123866032@qq.com |
花了不少功夫,不知相關程序設計思路? |
GUOJF2020 發(fā)表于 2022-12-5 12:45 樓主你好!發(fā)一份給我,謝謝。1942157728@qq.com. |
樓主幫忙發(fā)一份給我學習學習,萬分感謝 865037326@qq.com |
請樓主發(fā)一份給我聽聽,謝謝。1184327224@qq.com |
請樓主發(fā)一份給我,整一套來聽聽。1184327224@qq.com |
麻煩樓主發(fā)一份資料學習學習,萬分感謝,2416611411@qq.com |
樓主幫忙發(fā)一份給我學習學習,萬分感謝8964569652@qq.com |
樓主幫忙發(fā)一份給我學習學習,萬分感謝 417341723@qq.com |
有沒有軟件?能發(fā)一份給我學一下嗎? |
謝謝分亨。。。麻煩發(fā)674373430@qq.com |
有沒軟件?能發(fā)一份給我學習一下嗎?674373430@qq.com |
謝謝分亨。。。麻煩發(fā)3293889013@qq.com |
樓主厲害!,超喜歡這個頻譜顯示,麻煩給份資料學習。≈x謝! |
煩請樓主發(fā)一份資料學習學習,謝謝。 |
GUOJF2020 發(fā)表于 2022-12-5 12:45 是不是廣場舞音箱的量產(chǎn)品?帶外接輸入,藍牙輸入,帶USB/CARD讀取,功放不錯,顯示弱了點 |
樓主厲害!,超喜歡這個頻譜顯示,麻煩給份資料學習!謝謝。892734852@qq.com |
樓主幫忙發(fā)一份給我學習學習,萬分感謝 479361682@qq.com |
主控板和按鍵板都有,就是藍牙版本有點低。建榮的藍牙主控。 |
image_editor_1668472681809.jpg (357.91 KB, 下載次數(shù): 219)
IMG_20221114_183749.jpg (2.95 MB, 下載次數(shù): 225)
GUOJF2020 發(fā)表于 2022-12-1 14:32 你這板簡直是太適合了,應該是 2.1CH功放,一片CSC2313來做音源選擇,可以接藍牙輸出,外接輸入1,外接輸入2,共3路音源選擇!前提是需要MCU(STM32或者STC最小核心板即可編程控制了CSC2313,功放的mute,再外接幾個功能按鍵和顯示屏在核心小板上,非常nice |
Powered by 單片機教程網(wǎng)