這段代碼是一個(gè)用于演示如何使用SUN6200無(wú)線(xiàn)通信模塊的示例程序。SUN6200無(wú)線(xiàn)通信模塊采用HS6200 2.4G無(wú)線(xiàn)收發(fā)IC,HS6200是一款低功耗、高性能的無(wú)線(xiàn)通信芯片,廣泛應(yīng)用于無(wú)線(xiàn)傳感器、智能家居、物聯(lián)網(wǎng)等領(lǐng)域。主控芯片為NE76E003
資料下載
HS6200 2.4G無(wú)線(xiàn)射頻IC 規(guī)格書(shū)Datasheet 應(yīng)用手冊(cè) 下載_資料下載_光明谷科技 (sunsili.com)
SUN6200 2.4G無(wú)線(xiàn)射頻模塊規(guī)格書(shū)
sun6200: SUN6200 2.4G無(wú)線(xiàn)模塊 RF射頻模塊 低成本替代Si24R1 NRF24L01 SPI接口,采用昂瑞微 (原HUNTERS漢天下)HS6200 2.4G無(wú)線(xiàn)收發(fā)芯片工作于 2.400 - 2.4835GHz 的全球 ISM 頻段。 此SDK不受平臺(tái)限制,可適用于任何平臺(tái)。 (https://gitee.com/lojam/sun6200)
以下是對(duì)代碼的概括性總結(jié)和詳細(xì)解析:
概括性總結(jié)
初始化: 程序開(kāi)始時(shí),初始化UART通信、LED指示燈,并配置HS6200模塊。
主循環(huán): 在主循環(huán)中,程序交替將HS6200設(shè)置為發(fā)送模式和接收模式。在發(fā)送模式下,發(fā)送一個(gè)固定的數(shù)據(jù)包;在接收模式下,等待接收數(shù)據(jù),并將接收到的數(shù)據(jù)通過(guò)UART發(fā)送給PC。
LED指示: 通過(guò)不同的LED指示當(dāng)前HS6200的狀態(tài),例如發(fā)送數(shù)據(jù)時(shí)點(diǎn)亮測(cè)試LED,接收到數(shù)據(jù)時(shí)點(diǎn)亮綠色LED。
看門(mén)狗定時(shí)器: 程序中包含了配置看門(mén)狗定時(shí)器的代碼,以防止程序卡死。
詳細(xì)解析
1定義和初始化:
定義了與HS6200通信所需的SPI接口的位操作宏,以及LED的指示宏。
初始化函數(shù)led_init用于設(shè)置LED的初始狀態(tài)和模式。
移植到基他平臺(tái),只需更改SPI IO口定義即可
sbit HS6200_CE = P1^0;
sbit HS6200_CS = P1^1;
sbit SPI_SCK = P1^2;
sbit SPI_MOSI = P1^3;
sbit SPI_MISO = P1^4;
void led_init(void)
{
LED_RED = 0;
LED_GRN = 0;
LED_TEST = 0;
setGPIO_LED_RED_OUT();
setGPIO_LED_GRN_OUT();
setGPIO_LED_TEST_OUT();
LED_RED = 1;
LED_GRN = 1;
LED_TEST = 1
;}
2 看門(mén)狗定時(shí)器配置 (Enable_WDT_Reset_Config):
該函數(shù)用于配置看門(mén)狗定時(shí)器,以防程序異??ㄋ?。通過(guò)特定的序列操作,設(shè)置看門(mén)狗定時(shí)器的超時(shí)時(shí)間,并啟用它。
/***********************************************************************
WDT CONFIG enable
warning : this macro is only when ICP not enable CONFIG WDT function
copy this marco code to you code to enable WDT reset.
************************************************************************/
void Enable_WDT_Reset_Config(void)
{
set_IAPEN;
IAPAL = 0x04;
IAPAH = 0x00;
IAPFD = 0x0F;
IAPCN = 0xE1;
set_CFUEN;
set_IAPGO; //trigger IAP
while((CHPCON&SET_BIT6)==SET_BIT6); //check IAPFF (CHPCON.6)
clr_CFUEN;
clr_IAPEN;
TA=0xAA;
TA=0x55;
WDCON=0x06; //Setting WDT prescale WDPS=0x07(111) div=256 WDTimeout:1.638s Info:datasheetPage118
set_WDCLR; //Clear WDT timer
while((WDCON|~SET_BIT6)==0xFF); //confirm WDT clear is ok before into power down mode
EA = 1;
set_WDTR; //WDT run
}
3 主函數(shù) (main):
初始化UART和HS6200模塊。
進(jìn)入一個(gè)無(wú)限循環(huán),循環(huán)中交替執(zhí)行發(fā)送和接收操作。
在發(fā)送模式下,通過(guò)HS6200發(fā)送一個(gè)預(yù)定義的數(shù)據(jù)包。
在接收模式下,等待接收數(shù)據(jù),接收到數(shù)據(jù)后通過(guò)UART輸出到PC,并重新發(fā)送接收到的數(shù)據(jù)包。
使用LED指示當(dāng)前的操作狀態(tài),如發(fā)送數(shù)據(jù)時(shí)點(diǎn)亮測(cè)試LED,接收到數(shù)據(jù)時(shí)點(diǎn)亮
綠色LED。
循環(huán)中包含延時(shí)和看門(mén)狗定時(shí)器的清除操作,以防止看門(mén)狗超時(shí)。
void main(void)
{
uint32_t cnt;
uint8_t i, recvLen;
#ifdef USE_SOFT_SPI
soft_spi_init();
#endif
InitialUART0_Timer1(9600); //UART0 Baudrate from Timer1
printf ("*=======================================*n");
printf ("* * Name: HS6200 SDK Sample Code. *n");
printf ("* * (C) Sunshine Silicon Corporation *n");
printf ("* * Website: http://www.sunsili.com *n");
printf ("* * E-Mail : fan@sunsili.com *n");
printf ("*========================================*n");
printf ("* HS6200 receive data and uart transmit the same data to PC .*n");
led_init();
// Enable_WDT_Reset_Config();
printf("HS6200 init .... n");
HS6200_Init();
printf("HS6200 Init Sucesss! n");
LED_RED = 0;
for( ; ;)
{
HS6200_ModeSwitch(Rf_PTX_Mode);
HS6200_Clear_All_Irq();
HS6200_Flush_Tx();
HS6200_SendPack(HS6200_W_TX_PAYLOAD , TXBuffer, 2);
LED_TEST_ON();
Delay_ms(10);
HS6200_ModeSwitch(Rf_PRX_Mode);
HS6200_Clear_All_Irq();
HS6200_Flush_Rx();
LED_GRN_OFF();
cnt = 1;
while(cnt++<100)
{
Delay_ms(1);
recvLen = HS6200_RecivePack(rx_buf);
if( recvLen )
{
HS6200_Clear_All_Irq();
HS6200_Flush_Rx();
HS6200_ModeSwitch(Rf_PTX_Mode);
HS6200_Clear_All_Irq();
HS6200_Flush_Tx();
HS6200_SendPack(HS6200_W_TX_PAYLOAD , rx_buf, recvLen);
// APP_LOG_DEBUG("HS6200 Recv n");
printf("HS6200 Recv: ");
for(i=0; i<recvLen; i++
) {
// Send_Data_To_UART0(rx_buf[i]);
printf("%x ", (int)rx_buf[i]);
}
printf("n");
break;
}
}
// Send_Data_To_UART0(cnt);
printf("Cnt: %d n", (int)cnt);
if( recvLen )
{
LED_GRN_ON();
}
LED_TEST_OFF();
Delay_ms(100);
set_WDCLR; //Clear WDT timer
}
}vb
4 調(diào)試信息:
程序中包含了一些調(diào)試信息的打印,例如初始化成功提示、接收到的數(shù)據(jù)等,這些信息通過(guò)UART發(fā)送到PC,便于調(diào)試和監(jiān)控程序的運(yùn)行狀態(tài)。
5 注釋和版權(quán)信息:
文件開(kāi)始部分包含了版權(quán)聲明、作者信息和版本歷史,強(qiáng)調(diào)了代碼的使用許可和來(lái)源。
SDK代碼是STM8Sxxx/51單片機(jī)/PIC單片機(jī)等完整的示例,展示了如何使用SUN6200模塊進(jìn)行基本的無(wú)線(xiàn)通信操作,包括數(shù)據(jù)的發(fā)送和接收,以及如何通過(guò)LED指示不同的工作狀態(tài)。通過(guò)這個(gè)示例,開(kāi)發(fā)者可以快速了解SUN6200模塊的基本使用方法,以及如何在自己的項(xiàng)目中集成和使用SUN6200模塊