這段代碼是一個用于演示如何使用SUN6200無線通信模塊的示例程序。SUN6200無線通信模塊采用HS6200 2.4G無線收發(fā)IC,HS6200是一款低功耗、高性能的無線通信芯片,廣泛應用于無線傳感器、智能家居、物聯網等領域。主控芯片為NE76E003
資料下載
HS6200 2.4G無線射頻IC 規(guī)格書Datasheet 應用手冊 下載_資料下載_光明谷科技 (sunsili.com)
SUN6200 2.4G無線射頻模塊規(guī)格書
sun6200: SUN6200 2.4G無線模塊 RF射頻模塊 低成本替代Si24R1 NRF24L01 SPI接口,采用昂瑞微 (原HUNTERS漢天下)HS6200 2.4G無線收發(fā)芯片工作于 2.400 - 2.4835GHz 的全球 ISM 頻段。 此SDK不受平臺限制,可適用于任何平臺。 (https://gitee.com/lojam/sun6200)
以下是對代碼的概括性總結和詳細解析:
概括性總結
初始化: 程序開始時,初始化UART通信、LED指示燈,并配置HS6200模塊。
主循環(huán): 在主循環(huán)中,程序交替將HS6200設置為發(fā)送模式和接收模式。在發(fā)送模式下,發(fā)送一個固定的數據包;在接收模式下,等待接收數據,并將接收到的數據通過UART發(fā)送給PC。
LED指示: 通過不同的LED指示當前HS6200的狀態(tài),例如發(fā)送數據時點亮測試LED,接收到數據時點亮綠色LED。
看門狗定時器: 程序中包含了配置看門狗定時器的代碼,以防止程序卡死。
詳細解析
1定義和初始化:
定義了與HS6200通信所需的SPI接口的位操作宏,以及LED的指示宏。
初始化函數led_init用于設置LED的初始狀態(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 看門狗定時器配置 (Enable_WDT_Reset_Config):
該函數用于配置看門狗定時器,以防程序異常卡死。通過特定的序列操作,設置看門狗定時器的超時時間,并啟用它。
/***********************************************************************
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 主函數 (main):
初始化UART和HS6200模塊。
進入一個無限循環(huán),循環(huán)中交替執(zhí)行發(fā)送和接收操作。
在發(fā)送模式下,通過HS6200發(fā)送一個預定義的數據包。
在接收模式下,等待接收數據,接收到數據后通過UART輸出到PC,并重新發(fā)送接收到的數據包。
使用LED指示當前的操作狀態(tài),如發(fā)送數據時點亮測試LED,接收到數據時點亮
綠色LED。
循環(huán)中包含延時和看門狗定時器的清除操作,以防止看門狗超時。
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 調試信息:
程序中包含了一些調試信息的打印,例如初始化成功提示、接收到的數據等,這些信息通過UART發(fā)送到PC,便于調試和監(jiān)控程序的運行狀態(tài)。
5 注釋和版權信息:
文件開始部分包含了版權聲明、作者信息和版本歷史,強調了代碼的使用許可和來源。
SDK代碼是STM8Sxxx/51單片機/PIC單片機等完整的示例,展示了如何使用SUN6200模塊進行基本的無線通信操作,包括數據的發(fā)送和接收,以及如何通過LED指示不同的工作狀態(tài)。通過這個示例,開發(fā)者可以快速了解SUN6200模塊的基本使用方法,以及如何在自己的項目中集成和使用SUN6200模塊