#include "iostm8s003f3.h" //定义 MCU GPIO #define RF_RST PB_ODR_ODR4//RF_rst PB4 #define nCS PA_ODR_ODR3//RF_NSS PA3 #define SW_CTRL PB_ODR_ODR5//SW_CTRL FEM_CPS PB5 PE4259 #define RF_IRQ_DIO0 PD_IDR_IDR4//RF_IRQ DIO0 PD4 #define CRC 0x01 //CRC Enable #define datlen 64 //数据长度 //SX1278寄存器地址定义 #define LR_RegFifo 0x00//FIFO读/写访问,当器件处于睡眠模式时,FIFO被清零,无法访问 // Common settings #define LR_RegOpMode 0x01//运行模式LoRa/FSK选择 #define LR_RegFrMsb 0x06//RF 载波频率最高有效位 #define LR_RegFrMid 0x07//RF 载波频率中间有效位 #define LR_RegFrLsb 0x08//RF 载波频率最低有效位若F(XOSC)=32MHz,则分辨率为61.035Hz。缺省值为 0x6c8000=434MHz。仅当器件处于睡眠或待机模式下才可以修改寄存器值 // Tx settings #define LR_RegPaConfig 0x09//PA选择和输出功率控制 #define LR_RegPaRamp 0x0A//PA斜升/斜降时间和低相噪PLL的控制 #define LR_RegOcp 0x0B//过流保护控制 // Rx settings #define LR_RegLna 0x0C//LNA设置 // LoRa registers #define LR_RegFifoAddrPtr 0x0D//FIFO数据缓冲区中SPI接口地址指针 #define LR_RegFifoTxBaseAddr 0x0E//FIFO数据缓冲区中发送调制器的写入基地址 #define LR_RegFifoRxBaseAddr 0x0F//FIFO数据缓冲区中接收解调器的读取基地址 #define LR_RegFifoRxCurrentaddr 0x10//接收到最后一个数据包的起始地址(数据缓冲区中) #define LR_RegIrqFlagsMask 0x11//可选IRQ标志屏蔽 #define LR_RegIrqFlags 0x12//IRQ标志 #define LR_RegRxNbBytes 0x13//接收到的字节数 #define LR_RegRxHeaderCntValueMsb 0x14//接收到的有效报头数,最高有效位(15:8)。报头和数据包计数器在 睡眠模式下复位。 #define LR_RegRxHeaderCntValueLsb 0x15//接收到的有效报头数,最低有效位(7:0)。报头和数据包计数器在 睡眠模式下复位。 #define LR_RegRxPacketCntValueMsb 0x16//接收到的有效数据包数,最高有效位(15:8)。报头和数据包计数器在 睡眠模式下复位。 #define LR_RegRxPacketCntValueLsb 0x17//接收到的有效数据包数,最低有效位(7:0)。报头和数据包计数器在 睡眠模式下复位。 #define LR_RegModemStat 0x18//LoRa调制解调器现场状态 #define LR_RegPktSnrValue 0x19//最后一个数据包的信噪比估值,以二进制补码格式乘以4 #define LR_RegPktRssiValue 0x1A//最后接收到的数据包的RSSI(dBm)RSSI[dBm]=-137+PacketRssi #define LR_RegRssiValue 0x1B//电流RSSI值(dBm)RSSI[dBm]=-137+Rssi #define LR_RegHopChannel 0x1C//FHSS起始信道 #define LR_RegModemConfig1 0x1D//调制解调器物理层配置1:7-4位信号带宽(0x07默认125kHz) 3-1位纠错编码率(默认001->4/5) 0位报头模式(0 0->显式报头模式 ) #define LR_RegModemConfig2 0x1E//调制解调器物理层配置2:7-4位SF值(以 2 基对数表示 默认0x07->128 码片/符号 ) 3位(0正常模式发送单个数据包 1持续模式通过FIFO发送多个数据包(用于频谱分析)) 2位发送端CRC信息(0关闭CRC 1开启CRC) 1-0位RX超时最高有效位 #define LR_RegSymbTimeoutLsb 0x1F//接收机超时值,RX超时最低有效位RX操作超时值以符号数表示:TimeOut=SymbTimeout-Ts #define LR_RegPreambleMsb 0x20//前导码长度最高有效位 =PreambleLength+4.25 符号 #define LR_RegPreambleLsb 0x21//前导码长度最低有效位 #define LR_RegPayloadLength 0x22//LoRa负载长度:隐式报头模式下 需要设置寄存器,以达到预期的 数据包长度。不允许将寄存器值 设置为 0。 #define LR_RegMaxPayloadLength 0x23//LoRa负载长度最大值:如果报头负载 长度超过该最大值,则会产生报 头 CRC 错误。允许对长度不正 确的数据包进行过滤。 #define LR_RegHopPeriod 0x24//FHSS跳频周期:(0= 关闭)。第一跳总是发生在第一个 报头符号后 #define LR_RegFifoRxByteAddr 0x25//FIFO中最后写入字节的地址,接收数据缓存当前指针(由 Lora 接收机写入的最后一个字节的地址) #define LR_RegModemConfig3 0x26//调制解调器物理层配置3: 3位0关闭1开启(符号长度超过16ms时必须打开) 2位0寄存器LnaGain设置的LNA增益 1内部AGC环路设置的LNA增益 // I/O settings #define REG_LR_DIOMAPPING1 0x40//DIO0 到 DIO3 引脚映射 #define REG_LR_DIOMAPPING2 0x41//DIO4 到 DIO5 引脚映射、 ClkOut 频率 // Version #define REG_LR_VERSION 0x42//芯片版本--相关升特 ID // Additional settings #define REG_LR_TCXO 0x4B//TCXO或XTAL输入设置 //变量定义 unsigned char Tx_phase; unsigned char Flg_TxRx; unsigned char Rx_phase; unsigned char Flg_RxFinish; unsigned char temp1,temp2,temp3; unsigned char gtmp; unsigned char gb_SF; unsigned char gb_BW; unsigned char CR; //LR_RegModemConfig1 unsigned char Sx1278Buf[datlen]; //发送接收缓冲区 const unsigned char SX1276FreqTbl[3] = {0x6C, 0x80, 0x00}; //434MHz射频载波频率(0x0685,0x073b,0x0813//434MHz 26m)(0x0634,0x0700,0x0800//169MHz 26m) const unsigned char SX1276LoRaBwTbl[10] ={0/*7.8KHz*/,1/*10.4KHz*/,2/*15.6KHz*/,3/*20.8KHz*/,4/*31.2KHz*/,5/*41.7KHz*/,6/*62.5KHz*/,7/*125KHz*/,8/*250KHz*/,9/*500KHz*/}; const unsigned char SX1276SpreadFactorTbl[7] ={6,7,8,9,10,11,12}; typedef enum{Rx_Parameters_Set,Read_FIFO_AndRx,Wait_RxFinish}RX_STATE; typedef enum{SetTx_Parameters,Write_FIFO_AndTx,Wait_Tx_Finish}TX_STATE; //函数声明 void GPIO_init(void); void SPI_init(void); void UART1_init(void); unsigned char SpiInOut(unsigned char Data);//SPI读写函数 void Uart_Send_Char(unsigned char UtxData);//Uart1 TX函数 void SX1276_Rx_Tx(char RxOrTx);//SX1278读写状态切换 void SX1276_Parameters_Select();//SX1278工作模式选择 void SX1276_Standby(void);//待机 void SX1276_Sleep(void);//休眠 void SX1276_EntryLoRa(void);//切换到LORA模式 void SX1276_LoRaClearIrq(void);//SX1278清除中断 unsigned char SX1276_LoRaRxWaitStable(void);//查询RX状态 void SX1276_Config(void);//SX1278基本配置 void SX1276_LoRaEntryRx(void);//基本配置,进入接收状态,等待接收完成Flg_RxFinish中断 void SX1276_LoRaEntryTx(void);//基本配置,进入发送状态 void SX1276_LoRaRxPacket(void);//将接收到的数据从FIFO中读出,并清除相应的中断标志位 void SX1276_LoRaTxPacket(void);//发送数据写入FIFO,开启发送模式,等待TxDone中断产生 void SX1276Read(unsigned char adr,unsigned char *data);//读SX1278数据1字节 void SX1276Write(unsigned char adr,unsigned char data);//写SX1278数据1字节 void SX1276ReadBuffer(unsigned char adr, unsigned char *ptr, unsigned char length);//读SX1278字符串 void SX1276WriteBuffer(unsigned char adr, unsigned char *ptr, unsigned char length);//写SX1278字符串 void SW_Swith_RX(); void SW_Swith_TX(); void main( void ) { CLK_CKDIVR = 0x00; // 16M内部RC系统时钟为16M asm("sim"); // 关全局中断 GPIO_init(); SPI_init(); UART1_init(); RF_RST=1; Flg_RxFinish=0; temp1=0; SX1276_Rx_Tx(0);//1发送 0接收 SX1276_Parameters_Select();//选择工作模式 asm("rim");// 开全局中断 while(1) { if(Flg_TxRx==0x01)//发射模式,下面是发射流程 { switch(Tx_phase)//SetTx_Parameters { case SetTx_Parameters: SW_Swith_TX();//切换PE4259到发射状态 SX1276_LoRaEntryTx();//基本配置,进入发送状态 Tx_phase=Write_FIFO_AndTx; break; case Write_FIFO_AndTx: SX1276_LoRaTxPacket();//发送数据写入FIFO,开启发送模式,等待TxDone中断产生 Tx_phase=Wait_Tx_Finish; break; case Wait_Tx_Finish: if(RF_IRQ_DIO0)//Packet send over 发送完成了IRQ 变为H,平时L { SX1276_LoRaClearIrq(); //清除所有中断标志位 while(RF_IRQ_DIO0); SX1276_Rx_Tx(0);//1发送 0接收; UART1_CR2_REN = 1;//接收使能,防止串位 UART1_CR2_RIEN = 1; } break; } } else//接收模式 { switch(Rx_phase) { case Rx_Parameters_Set: SW_Swith_RX();//切换PE4259到接收状态 SX1276_LoRaEntryRx();//基本配置,进入接收状态,等待接收完成Flg_RxFinish中断 Rx_phase=Read_FIFO_AndRx; break; case Read_FIFO_AndRx: if(RF_IRQ_DIO0) { SX1276_LoRaRxPacket();//将接收到的数据从 FIFO 中读出,并清除相应的中断标志位; while(RF_IRQ_DIO0); Rx_phase=Wait_RxFinish; } break; case Wait_RxFinish: if(Flg_RxFinish) { Flg_RxFinish=0; for(temp3=0;temp3<datlen;temp3++) { Uart_Send_Char(Sx1278Buf[temp3]); } SX1276_Rx_Tx(0);//1发送 0接收 } break; } } } } /*******************************************************************************PE4259 服务函数*******************************************************************************/ void SW_Swith_RX() { SW_CTRL=1; } void SW_Swith_TX() { SW_CTRL=0; } /*******************************************************************************PE4259 服务函数*******************************************************************************/ /*******************************************************************************SX1278 服务函数*******************************************************************************/ void SX1276_Rx_Tx(char RxOrTx)//SX1278读写状态切换 { if(RxOrTx==0x01) { Flg_TxRx=0x01; Tx_phase=SetTx_Parameters; } else { Flg_TxRx=0x00; Rx_phase=Rx_Parameters_Set; } } void SX1276_Parameters_Select()//SX1278工作模式选择 { /****BW 选择*********/ //gb_BW=1;//10.4K BW //gb_BW=2;//15.6K BW //gb_BW=3;//20.8K BW //gb_BW=4;//31.2K BW //gb_BW=5;//41.7K BW //gb_BW=6;//62.5K BW gb_BW=7;//125KHz BW /*******SF 选择*********/ //gb_SF=0;// SF=6; 64 chips / symbol //gb_SF=1;// SF=7; 128 chips / symbol //gb_SF=2;// SF=8; 256 chips / symbol gb_SF=3;// SF=9; 9 512 chips / symbol //gb_SF=4;////SF=10; 1024 chips / symbol //gb_SF=5;////SF=11; 2048 chips / symbol //gb_SF=6;//SF=12; 4096 chips / symbol /*******CR 选择*********/ CR=1;//// Error coding rate=4/5 //CR=2;//// Error coding rate=4/6 //CR=3;//// Error coding rate=4/7 //CR=4;//// Error coding rate=4/8 } void SX1276_Standby(void)//待机 { SX1276Write(LR_RegOpMode,0x01+0x08); //0x01 0x09 7位(0->FSK/OOK 1->LoRA) 6位(0->访问LoRa寄存器页面0x0D:0x3F 1->(在 LoRa 模式下)访问FSK寄存器页面0x0D:0x3F) } //3位(访问低频模式寄存器0高频模式 1低频模式) 2-0位器件模式:000睡眠,001待机,010频率合成发送FSTX,011发送TX,100频率合成接收FSRX,101持续接收RXCONTINUOUS,110单次接收RXSINGLE,111信道活动检测CAD void SX1276_Sleep(void)//休眠 { SX1276Write(LR_RegOpMode,0x00+0x08); //0x01 0x08 2-0位000休眠 } void SX1276_EntryLoRa(void)//切换到LORA模式 { SX1276Write(LR_RegOpMode,0x80+0x08); //0X01 0X88 7位1 LORA模式 3位1 低频模式 } void SX1276_LoRaClearIrq(void)//SX1278清除中断 { SX1276Write(LR_RegIrqFlags,0xFF); //7位(RxTimeout超时中断 一次写操作清除IRQ) 6位(RxDone数据包接收完成中断 一次写操作清除IRQ) 5位(PayloadCrcError负载CRC错误中断 一次写操作清除IRQ) 4位(ValidHeader Rx模式下接收到的有效报头 一次写操作清除IRQ) } //3位(TxDone FIFO负载发送完成中断 一次写操作清除IRQ) 2位(CadDone CAD完成 通过写操作清除 一次写操作清除IRQ) 1位(FhssChangeChannel FHSS改变信道中断 一次写操作清除IRQ) 0位(CadDetected CAD操作中检测到有效Lora信号 一次写操作清除 IRQ) unsigned char SX1276_LoRaRxWaitStable(void)//查询RX状态 { unsigned char tmp; SX1276Read(LR_RegModemStat,&tmp); return tmp; } void SX1276_Config(void)//SX1278基本配置 { SX1276_Sleep(); //休眠 延迟 SX1276Write(REG_LR_TCXO,0x09); //0x4b 0x09 XTAL带外部晶体的晶体振荡器 SX1276_EntryLoRa(); //切换到LORA模式 SX1276Write(0x06,SX1276FreqTbl[0]); //射频载波频率 SX1276Write(0x07,SX1276FreqTbl[1]); SX1276Write(0x08,SX1276FreqTbl[2]); SX1276Write(0x09,0xFF); //PA 选择和输出功率控制 0xFF/*20dbm*/,0xFC/*17dbm*/,0xF9/*14dbm*/,0xF6/*11dbm*/ SX1276Write(LR_RegOcp,0x0B); //过流保护控制 OCP 电流微调 100MA SX1276Write(LR_RegLna,0x23); //LNA 设置 7-5最大增益001 4-3LNA电流00 1-0高频RFI_HF 11 if(SX1276SpreadFactorTbl[gb_SF]==6) //SFactor=6 { unsigned char tmp; SX1276Write(LR_RegModemConfig1,(SX1276LoRaBwTbl[gb_BW]<<4)+(CR<<1)+0x01); //7-4BW位信号带宽 3-1CR位纠错编码率 0位0显式报头模式 1隐式报头模式 SX1276Write(LR_RegModemConfig2,(SX1276SpreadFactorTbl[gb_SF]<<4)+(CRC<<2)+0x03); SX1276Read(0x31,&tmp); tmp &= 0xF8; tmp |= 0x05; SX1276Write(0x31,tmp); SX1276Write(0x37,0x0C); } else { SX1276Write(LR_RegModemConfig1,(SX1276LoRaBwTbl[gb_BW]<<4)+(CR<<1)+0x00); //Explicit Enable CRC Enable(0x02) & Error Coding rate 4/5(0x01), 4/6(0x02), 4/7(0x03), 4/8(0x04) SX1276Write(LR_RegModemConfig2,(SX1276SpreadFactorTbl[gb_SF]<<4)+(CRC<<2)+0x03); //SFactor & LNA gain set by the internal AGC loop SX1276Write(LR_RegModemConfig3,0x08); //LowDataRateOptimize en } SX1276Write(LR_RegSymbTimeoutLsb,0xFF); //RegSymbTimeoutLsb Timeout = 0x3FF(Max)RX超时最低有效位 SX1276Write(LR_RegPreambleMsb,0); //RegPreambleMsb前导码长度最高有效位 SX1276Write(LR_RegPreambleLsb,16); //RegPreambleLsb 8+4=12byte Preamble 16+4=20前导码长度最低有效位 SX1276Write(REG_LR_DIOMAPPING2,0x01); //RegDioMapping2 DIO5=00, DIO4=01 SX1276_Standby(); //Entry standby mode } void SX1276_LoRaEntryRx(void)//基本配置,进入接收状态,等待接收完成Flg_RxFinish中断 { unsigned char addr; SX1276_Config(); //基本配置 SX1276Write(0x4D,0x84); //RX时PA功率为默认值 SX1276Write(LR_RegHopPeriod,0xFF); //RegHopPeriod NO FHSS SX1276Write(REG_LR_DIOMAPPING1,0x01); //DIO0=00, DIO1=00, DIO2=00, DIO3=01 DIO0=0RxDone SX1276Write(LR_RegIrqFlagsMask,0x3F); //打开 6位数据包接收完成中断 7位超时中断 SX1276_LoRaClearIrq(); //清除IRQ SX1276Write(LR_RegPayloadLength,datlen); //负载字节长度 SX1276Read(LR_RegFifoRxBaseAddr,&addr); //FIFO数据缓冲区中接收解调器的读取基地址 SX1276Write(LR_RegFifoAddrPtr,addr); //FIFO 数据缓冲区中 SPI 接口地 址指针 SX1276Write(LR_RegOpMode,0x0D); //低频模式 持续接收 } void SX1276_LoRaEntryTx(void)//基本配置,进入发送状态 { unsigned char addr; SX1276_Config(); //基本配置 SX1276Write(0x4D,0x87); //Tx时PA大功率设置 20dBm SX1276Write(LR_RegHopPeriod,0x00); //频率跳变之间的符号周期(0= 关闭)第一跳总是发生在第一个报头符号后 SX1276Write(REG_LR_DIOMAPPING1,0x41); //01 00 00 01 DIO0=01, DIO1=00, DIO2=00, DIO3=01 DIO0=1TxDone SX1276_LoRaClearIrq(); //清除IRQ SX1276Write(LR_RegIrqFlagsMask,0xF7); //打开TxDone中断(FIFO负载发送完成中断屏蔽:设置该位将屏蔽RegIrqFlags中对应的IRQ) SX1276Write(LR_RegPayloadLength,datlen); //负载字节长度 隐式报头模式下 需要设置寄存器 以达到预期的数据包长度 不允许将寄存器值设置为0 21byte SX1276Read(LR_RegFifoTxBaseAddr,&addr); //读出FIFO 数据缓冲区中TX发送调制器 的写入基地址 SX1276Write(LR_RegFifoAddrPtr,addr); //FIFO 数据缓冲区中 SPI 接口地 址指针 } void SX1276_LoRaRxPacket(void)//将接收到的数据从FIFO中读出,并清除相应的中断标志位 { unsigned char addr; unsigned char packet_size; Flg_RxFinish=1; SX1276Read(LR_RegFifoRxCurrentaddr,&addr); //数据包的最后地址(数据的尾地址) SX1276Write(LR_RegFifoAddrPtr,addr); //FIFO 数据缓冲区中 SPI 接口地 址指针 if(SX1276SpreadFactorTbl[gb_SF]==6)packet_size=21; //隐藏头模式,不包括内部数据包长度 else packet_size=datlen; //接收数据包长度 SX1276ReadBuffer(0x00,Sx1278Buf,packet_size); //读数据 SX1276_LoRaClearIrq(); //清除IRQ } void SX1276_LoRaTxPacket(void)//发送数据写入FIFO,开启发送模式,等待TxDone中断产生 { SX1276WriteBuffer(0x00,Sx1278Buf,datlen); //写数据 SX1276Write(LR_RegOpMode,0x03+0x08); //0x01=0x0B 0000 1011 3位1访问低频模式寄存器 2-0位器件模式011发送Tx模式 } //SX1278 SPI读写函数 void SX1276Read(unsigned char adr,unsigned char *data)//读SX1278数据1字节 { nCS=0; SpiInOut(adr); *data = SpiInOut(0); nCS=1; } void SX1276Write(unsigned char adr,unsigned char data)//写SX1278数据1字节 { nCS=0; //SX1278最高位1为写入 adr |= 0x80; SpiInOut(adr); SpiInOut(data); nCS=1; } void SX1276ReadBuffer(unsigned char adr, unsigned char *ptr, unsigned char length)//读SX1278字符串 { unsigned char i; if(length<=1) //length must more than one return; else { nCS=0; SpiInOut(adr); for(i=0;i<length;i++) ptr[i] = SpiInOut(0); nCS=1; } } void SX1276WriteBuffer(unsigned char adr, unsigned char *ptr, unsigned char length)//写SX1278字符串 { unsigned char i; if(length<=1) //length must more than one return; else { nCS=0; SpiInOut(adr|0x80); for(i=0;i<length;i++) SpiInOut(ptr[i]); nCS=1; } } /*******************************************************************************SX1278 服务函数*******************************************************************************/ /*******************************************************************************STM8S MCU 驱动*******************************************************************************/ //MCU初始化 void GPIO_init(void)//GPIO初始化 { //RF_RST PB4 PB_DDR_DDR4=1; //OUTPUT PB_CR1_C14=1; //SET PD //RF_SCK PC5 PC_DDR_DDR5=1; //SET PD PC_CR1_C15=1; //SET PD //RF_MISO PC7 INPUT PC_DDR_DDR7=0; //INPUT PC_CR1_C17=1; //PULL-UP-INPUT //RF_MOSI PC6 PC_DDR_DDR6=1;//OUTPUT PC_CR1_C16=1; //SET PD //RF_NSS PA3 PA_DDR_DDR3=1; //OUTPUT PA_CR1_C13=1; //SET PD //RF_IRQ DIO0 PD4 SX1278 PD_DDR_DDR4=0; //INPUT PD_CR1_C14=1; //PULL-UP-INPUT PD_CR2_C24=0; // //SW_CTRL FEM_CPS PB5 PE4259 PB_DDR_DDR5=1; //OUTPUT PB_CR1_C15=1; //SET PD nCS=1;//SPI_NSS } void SPI_init(void) { SPI_CR1_SPE = 0; //禁止SPI SPI_CR1_LSBFIRST = 0; //先发送MSB SPI_CR1_BR = 0; //波特率设为 fbus/2 8MHz SPI_CR1_MSTR = 1; //主模式 SPI_CR1_CPOL = 0; //空闲状态时SCK为低电平 SPI_CR1_CPHA = 0; //数据从第一个时钟边沿开始采样 SPI_CR2_BDM = 0; //双线单向模式 SPI_CR2_SSM = 0; //禁止软件从设备管理 SPI_CR2_SSI = 1; //内部从设备选择为主模式 SPI_ICR = 0x00; //禁止中断 SPI_CR1_SPE = 1; //SPI使能 } void UART1_init(void) { UART1_CR1=0; // 8bit UART1_CR2=0; UART1_CR3=0; // 1 stop bit UART1_BRR2 = 0x0B; //设置波特率115200 UART1_BRR1 = 0x08; //16M UART1_CR2_REN = 1; UART1_CR2_TEN = 1; UART1_CR2_RIEN = 1; UART1_SR_RXNE = 0; UART1_SR_TC = 1; UART1_SR_TXE = 1; } //一般服务函数 unsigned char SpiInOut(unsigned char Data)//SPI读写函数 { while(SPI_SR_TXE==0); SPI_DR = Data; while(SPI_SR_RXNE==0); return SPI_DR; } void Uart_Send_Char(unsigned char UtxData)//Uart1 TX函数 { while(!UART1_SR_TXE);//发送数据寄存器 0非空 1为空 UART1_DR = UtxData;// while(!UART1_SR_TC);//发送完成 0未完成 1完成发送 } //中断服务函数 #pragma vector=UART1_R_RXNE_vector//串口UART1入口 __interrupt void UART1_RX_RXNE(void)//Uart1 RX函数 { if(UART1_SR_RXNE == 1) { if(UART1_SR_OR_LHE == 1) { temp2 = UART1_SR; Sx1278Buf[temp1++] = UART1_DR; } else { Sx1278Buf[temp1++] = UART1_DR; } while(UART1_SR_RXNE == 1); } if(temp1>=datlen) { temp1=0; UART1_CR2_REN = 0; UART1_CR2_RIEN = 0; SX1276_Rx_Tx(1);//1发送 0接收; } } /*******************************************************************************STM8S MCU 驱动*******************************************************************************/