STM32驱动_cc2420
文章目录
- cc2420.c
- cc2420.h
- public.h
- main.c
cc2420.c
cc2420.c
如下:
#include "sys.h"
#include "CC2420.h"
#include "delay.h"uint8 CC2420_PSDU[1 + CC2420_PSDU_Len];
uint8 CC2420_Source_PANID[2] = {0xcc, 0xcc};
uint8 CC2420_Source_ShortAddr[2] = {0xcc, 0xcc};
uint8 CC2420_Source_IEEEAddr[8] = {0x12, 0x34, 0x56, 0x7c, 0xcc, 0xcc, 0xcc, 0xcc}; /* 本机地址 */
uint8 CC2420_Destination_PANID[2] = {0xcc, 0xcc};
uint8 CC2420_Destination_ShortAddr[2] = {0xcc, 0xcc};
uint8 CC2420_Destination_IEEEAddr[8] = {0x12, 0x34, 0x56, 0x7c, 0xcc, 0xcc, 0xcc, 0xcc}; /* 目标地址 */void CC2420_IOinit ( void ) { /* CC2420引脚初始化 */GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOA, ENABLE );GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_9; /* 输出引脚 */GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init ( GPIOA, &GPIO_InitStructure );GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_8; /* 输入引脚 */GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init ( GPIOA, &GPIO_InitStructure );GPIO_SetBits ( GPIOB, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 |GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 );SPI_Init();
}void SPI_Init ( void ) { /* SPI初始化函数 */SCLK_OFF();CSN_ON();
}uint8 SPI_Read ( void ) { /* SPI单字节读取函数 */uint8 i, rxdata = 0x00;for ( i = 0; i < 8; i++ ) {rxdata = rxdata << 1;SCLK_ON();if ( MISO_IN ) {rxdata |= 0x01;} else {rxdata &= ~0x01;}SCLK_OFF();}return rxdata;
}void SPI_Write ( uint8 txdata ) { /* SPI单字节写入函数 */uint8 i;for ( i = 0; i < 8; i++ ) {if ( txdata & 0x80 ) {MOSI_ON();} else {MOSI_OFF();}SCLK_ON();txdata = txdata << 1;SCLK_OFF();}
}uint8 SPI_WriteRead ( uint8 txdata ) { /* SPI单字节写入读取函数 */uint8 i, rxdata;rxdata = 0x00;for ( i = 0; i < 8; i++ ) {rxdata = rxdata << 1;if ( txdata & 0x80 ) {MOSI_ON();} else {MOSI_OFF();}SCLK_ON();if ( MISO_IN ) {rxdata |= 0x01;} else {rxdata &= ~0x01;}SCLK_OFF();txdata = txdata << 1;}return rxdata;
}uint16 SPI_Word_Read ( void ) { /* SPI双字节读取函数 */uint8 i;uint16 rxdata;rxdata = 0x0000;for ( i = 0; i < 16; i++ ) {rxdata = rxdata << 1;SCLK_ON();if ( MISO_IN ) {rxdata |= 0x01;} else {rxdata &= ~0x01;}SCLK_OFF();}return rxdata;
}void SPI_Word_Write ( uint16 txdata ) { /* SPI双字节写入函数 */uint8 i;for ( i = 0; i < 16; i++ ) {if ( txdata & 0x8000 ) {MOSI_ON();} else {MOSI_OFF();}SCLK_ON();txdata = txdata << 1;SCLK_OFF();}
}uint16 CC2420_ReadReg ( uint8 addr ) { /* CC2420寄存器读取函数 */uint16 value;CSN_OFF();SPI_Write ( addr | REG_READ );value = SPI_Word_Read();CSN_ON();return value;
}void CC2420_WriteReg ( uint8 addr, uint16 value ) { /* CC2420寄存器写入函数 */CSN_OFF();SPI_Write ( addr | REG_WRITE );SPI_Word_Write ( value );CSN_ON();
}void CC2420_ReadRXFIFO ( void ) { /* 读取FIFO寄存器 */uint8 i;CSN_OFF();SPI_Write ( REG_RXFIFO | REG_READ );CC2420_PSDU[0] = SPI_Read();for ( i = 0; i < CC2420_PSDU[0]; i++ ) {CC2420_PSDU[1 + i] = SPI_Read();}CSN_ON();CC2420_Command ( CMD_SFLUSHRX );
}void CC2420_WriteTXFIFO ( void ) { /* 写入FIFO寄存器 */uint8 i;CC2420_Command ( CMD_SFLUSHTX ); /* 刷新发送寄存器 */CSN_OFF();SPI_Write ( REG_TXFIFO | REG_WRITE ); /* 先写入写FIFO操作命令 */SPI_Write ( CC2420_PSDU[0] );for ( i = 0; i < CC2420_PSDU[0]; i++ ) {SPI_Write ( CC2420_PSDU[1 + i] );}CSN_ON();
}void CC2420_Command ( uint8 cmd ) { /* CC2420命令函数 */CSN_OFF();SPI_Write ( cmd );CSN_ON();
}uint8 CC2420_RAM_Read ( uint8 addr, uint8 block ) { /* CC2420的RAM读取函数 */uint8 value;CSN_OFF();SPI_Write ( addr | RAM );SPI_Write ( ( block << 6 ) | RAM_READ );value = SPI_Read();CSN_ON();return value;
}void CC2420_RAM_Write ( uint8 addr, uint8 block, uint8 value ) { /* CC2420的RAM写入函数 */CSN_OFF();SPI_Write ( addr | RAM );SPI_Write ( ( block << 6 ) | RAM_WRITE );SPI_Write ( value );CSN_ON();
}void CC2420_SetRxMode ( void ) { /* CC2420设置接收函数 */CC2420_Command ( CMD_SRFOFF );CC2420_Command ( CMD_SRXON );
}uint8 CC2420_RxPacket ( void ) { /* CC2420判断接收函数 */SFD_IN = 1;FIFO_IN = 1;if ( ( !SFD_IN ) && ( FIFO_IN ) ) {return TRUE;}return FALSE;
}void CC2420_TxPacket ( void ) { /* CC2420发送函数 */CC2420_Command ( CMD_SRFOFF );CC2420_Command ( CMD_STXON );while ( !SFD_IN );while ( SFD_IN );
}void CC2420_Init ( void ) { /* CC2420射频芯片初始化函数 */RESET_OFF();delay_ms ( 10 );RESET_ON();delay_ms ( 10 );CC2420_Command ( CMD_SXOSCON );delay_ms ( 10 );CC2420_PSDU[1] = ( PAN_ID_COMPRESSION << 6 ) | ( ACKNOWLEDGMENT_REQUEST << 5 ) | ( FRAME_PENDING << 4 ) |( SECURITY_ENABLE << 3 ) | ( FRAME_TYPE_DATA << 0 );CC2420_PSDU[2] = ( SOURCE_ADDRESSING_MODE << 6 ) | ( FRAME_VERSION << 4 ) | ( DEST_ADDRESSING_MODE << 2 );CC2420_PSDU[3] = SEQUENCE_NUMBER;CC2420_PSDU[4] = CC2420_Destination_PANID[0];CC2420_PSDU[5] = CC2420_Destination_PANID[1];CC2420_PSDU[6] = CC2420_Destination_IEEEAddr[0];CC2420_PSDU[7] = CC2420_Destination_IEEEAddr[1];CC2420_PSDU[8] = CC2420_Destination_IEEEAddr[2];CC2420_PSDU[9] = CC2420_Destination_IEEEAddr[3];CC2420_PSDU[10] = CC2420_Destination_IEEEAddr[4];CC2420_PSDU[11] = CC2420_Destination_IEEEAddr[5];CC2420_PSDU[12] = CC2420_Destination_IEEEAddr[6];CC2420_PSDU[13] = CC2420_Destination_IEEEAddr[7];CC2420_PSDU[14] = CC2420_Source_PANID[0];CC2420_PSDU[15] = CC2420_Source_PANID[1];CC2420_RAM_Write ( RAM_PANID, 2, CC2420_Source_PANID[0] );CC2420_RAM_Write ( RAM_PANID + 1, 2, CC2420_Source_PANID[1] );CC2420_PSDU[16] = CC2420_Source_IEEEAddr[0];CC2420_PSDU[17] = CC2420_Source_IEEEAddr[1];CC2420_PSDU[18] = CC2420_Source_IEEEAddr[2];CC2420_PSDU[19] = CC2420_Source_IEEEAddr[3];CC2420_PSDU[20] = CC2420_Source_IEEEAddr[4];CC2420_PSDU[21] = CC2420_Source_IEEEAddr[5];CC2420_PSDU[22] = CC2420_Source_IEEEAddr[6];CC2420_PSDU[23] = CC2420_Source_IEEEAddr[7];CC2420_RAM_Write ( RAM_IEEEADR, 2, CC2420_Source_IEEEAddr[0] );CC2420_RAM_Write ( RAM_IEEEADR + 1, 2, CC2420_Source_IEEEAddr[1] );CC2420_RAM_Write ( RAM_IEEEADR + 2, 2, CC2420_Source_IEEEAddr[2] );CC2420_RAM_Write ( RAM_IEEEADR + 3, 2, CC2420_Source_IEEEAddr[3] );CC2420_RAM_Write ( RAM_IEEEADR + 4, 2, CC2420_Source_IEEEAddr[4] );CC2420_RAM_Write ( RAM_IEEEADR + 5, 2, CC2420_Source_IEEEAddr[5] );CC2420_RAM_Write ( RAM_IEEEADR + 6, 2, CC2420_Source_IEEEAddr[6] );CC2420_RAM_Write ( RAM_IEEEADR + 7, 2, CC2420_Source_IEEEAddr[7] );CC2420_WriteReg ( REG_MDMCTRL0, CCA_HYST | CCA_MODE | PREAMBLE_LENGTH | AUTOCRC | ADR_DECODE );CC2420_WriteReg ( REG_SYNCWORD, SYNCWORD );CC2420_WriteReg ( REG_SECCTRL0, 0 );CSN_OFF();SPI_Write ( REG_RXFIFO | REG_READ );SPI_Read();CSN_ON();CC2420_Command ( CMD_SFLUSHRX );CC2420_Command ( CMD_SFLUSHTX );delay_ms ( 10 );
}
cc2420.h
cc2420.h
如下:
#ifndef _CC2420_H_
#define _CC2420_H_
#include "public.h"#define CC2420_PSDU_Len 127
/* SPI口访问方式定义 */
#define REG_READ 0x40
#define REG_WRITE 0x00
#define RAM 0x80
#define RAM_READ 0x20
#define RAM_WRITE 0x00
/* CC2420 命令字定义 */
#define CMD_SNOP (0x00 )
#define CMD_SXOSCON (0x01 )
#define CMD_STXCAL (0x02 )
#define CMD_SRXON (0x03 )
#define CMD_STXON (0x04 )
#define CMD_STXONCCA (0x05 )
#define CMD_SRFOFF (0x06 )
#define CMD_SXOSCOFF (0x07 )
#define CMD_SFLUSHRX (0x08 )
#define CMD_SFLUSHTX (0x09 )
#define CMD_SACK (0x0a )
#define CMD_SACKPEND (0x0b )
#define CMD_SRXDEC (0x0c )
#define CMD_STXENC (0x0d )
#define CMD_SAES (0x0e )
/* CC2420配置寄存器 */
#define REG_MAIN (0x10 )
#define RESETN (0x01 << 15)
#define ENC_RESETN (0x01 << 14)
#define DEMOD_RESETN (0x01 << 13)
#define MOD_RESETN (0x01 << 12)
#define FS_RESETN (0x01 << 11)
#define XOSC16M_BYPASS (0x01 << 0 )
#define REG_MDMCTRL0 (0x11 )
#define RESERVED_FRAME_MODE (0x00 << 13)
#define PAN_COORDINATOR (0x01 << 12)
#define ADR_DECODE (0x01 << 11)
#define CCA_HYST (0x02 << 8 )
#define CCA_MODE (0x03 << 6 )
#define AUTOCRC (0x01 << 5 )
#define AUTOACK ( << 4 )
#define PREAMBLE_LENGTH (0x02 << 0 )
#define REG_MDMCTRL1 (0x12 )
#define CORR_THR (0x20 << 6 )
#define DEMOD_AVG_MODE ( << 5 )
#define MODULATION_MODE ( << 4 )
#define TX_MODE ( << 2 )
#define RX_MODE ( << 0 )
#define REG_RSSI (0x13 )
#define REG_SYNCWORD (0x14 )
#define SYNCWORD (0xA70F )
#define REG_TXCTRL (0x15 )
#define TXMIXBUF_CUR ( << 14)
#define TX_TURNAROUND ( << 13)
#define TXMIX_CAP_ARRAY ( << 11)
#define TXMIX_CURRENT ( << 9 )
#define PA_CURRENT ( << 6 )
#define PA_LEVEL ( << 0 )
#define REG_RXCTRL0 (0x16 )
#define RXMIXBUF_CUR ( << 12)
#define HIGH_LNA_GAIN ( << 10)
#define MED_LNA_GAIN ( << 8 )
#define LOW_LNA_GAIN ( << 6 )
#define HIGH_LNA_CURRENT ( << 4 )
#define MED_LNA_CURRENT ( << 2 )
#define LOW_LNA_CURRENT ( << 0 )
#define REG_RXCTRL1 (0x17 )
#define RXBPF_LOCUR ( << 13)
#define RXBPF_MIDCUR ( << 12)
#define LOW_LOWGAIN ( << 11)
#define MED_LOWGAIN ( << 10)
#define HIGH_HGM ( << 9 )
#define MED_HGM ( << 8 )
#define LNA_CAP_ARRAY ( << 6 )
#define RXMIX_TAIL ( << 4 )
#define RXMIX_VCM ( << 2 )
#define RXMIX_CURRENT ( << 0 )
#define REG_FSCTRL (0x18 )
#define LOCK_THR ( << 14)
#define CAL_DONE ( << 13)
#define CAL_RUNNING ( << 12)
#define LOCK_LENGTH ( << 11)
#define LOCK_STATUS ( << 10)
#define FREQ ( << 0 )
#define REG_SECCTRL0 (0x19 )
#define RXFIFO_PROTECTION ( << 9 )
#define SEC_CBC_HEAD ( << 8 )
#define SEC_SAKEYSEL ( << 7 )
#define SEC_TXKEYSEL ( << 6 )
#define SEC_RXKEYSEL ( << 5 )
#define SEC_M ( << 2 )
#define SEC_MODE ( << 0 )
#define REG_SECCTRL1 (0x1a )
#define SEC_TXL ( << 8 )
#define SEC_RXL ( << 0 )
#define REG_BATTMON (0x1b )
#define BATTMON_EN ( << 5 )
#define BATTMON_VOLTAGE ( << 0 )
#define REG_IOCFG0 (0x1c )
#define BCN_ACCEPT ( << 11)
#define FIFO_POLARITY ( << 10)
#define FIFOP_POLARITY ( << 9 )
#define SFD_POLARITY ( << 8 )
#define CCA_POLARITY ( << 7 )
#define FIFOP_THR ( << 0 )
#define REG_IOCFG1 (0x1d )
#define HSSD_SRC ( << 10)
#define SFDMUX ( << 5 )
#define CCAMUX ( << 0 )
#define REG_MANFIDL (0x1e )
#define REG_MANFIDH (0x1f )
#define REG_FSMTC (0x20 )
#define TC_RXCHAIN2RX ( << 13)
#define TC_SWITCH2TX ( << 10)
#define TC_PAON2TX ( << 6 )
#define TC_TXEND2SWITCH ( << 3 )
#define TC_TXEND2PAOFF ( << 0 )
#define REG_MANAND (0x21 )
#define MANAND_VGA_RESET_N ( << 15)
#define MANAND_BIAS_PD ( << 14)
#define MANAND_BALUN_CTRL ( << 13)
#define MANAND_RXTX ( << 12)
#define MANAND_PRE_PD ( << 11)
#define MANAND_PA_N_PD ( << 10)
#define MANAND_PA_P_PD ( << 9 )
#define MANAND_DAC_LPF_PD ( << 8 )
#define MANAND_XOSC16M_PD ( << 7 )
#define MANAND_RXBPF_CAL_PD ( << 6 )
#define MANAND_CHP_PD ( << 5 )
#define MANAND_FS_PD ( << 4 )
#define MANAND_ADC_PD ( << 3 )
#define MANAND_VGA_PD ( << 2 )
#define MANAND_RXBPF_PD ( << 1 )
#define MANAND_LNAMIX_PD ( << 0 )
#define REG_MANOR (0x22 )
#define MANOR_VGA_RESET_N ( << 15)
#define MANOR_BIAS_PD ( << 14)
#define MANOR_BALUN_CTRL ( << 13)
#define MANOR_RXTX ( << 12)
#define MANOR_PRE_PD ( << 11)
#define MANOR_PA_N_PD ( << 10)
#define MANOR_PA_P_PD ( << 9 )
#define MANOR_DAC_LPF_PD ( << 8 )
#define MANOR_XOSC16M_PD ( << 7 )
#define MANOR_RXBPF_CAL_PD ( << 6 )
#define MANOR_CHP_PD ( << 5 )
#define MANOR_FS_PD ( << 4 )
#define MANOR_ADC_PD ( << 3 )
#define MANOR_VGA_PD ( << 2 )
#define MANOR_RXBPF_PD ( << 1 )
#define MANOR_LNAMIX_PD ( << 0 )
#define REG_AGCCTRL (0x23 )
#define VGA_GAIN_OE ( << 11)
#define VGA_GAIN ( << 4 )
#define LNAMIX_GAINMODE_O ( << 2 )
#define REG_AGCTST0 (0x24 )
#define LNAMIX_HYST ( << 12)
#define LNAMIX_THR_H ( << 6 )
#define LNAMIX_THR_L ( << 0 )
#define REG_AGCTST1 (0x25 )
#define AGC_BLANK_MODE ( << 14)
#define PEAKDET_CUR_BOOST ( << 13)
#define AGC_SETTLE_WAIT ( << 11)
#define AGC_PEAK_DET_MODE ( << 8 )
#define AGC_WIN_SIZE ( << 6 )
#define AGC_REF ( << 0 )
#define REG_AGCTST2 (0x26 )
#define MED2HIGHGAIN ( << 5 )
#define LOW2MEDGAIN ( << 0 )
#define REG_FSTST0 (0x27 )
#define VCO_ARRAY_SETTLE_LONG ( << 11)
#define VCO_ARRAY_OE ( << 10)
#define VCO_ARRAY_O ( << 5 )
#define VCO_ARRAY_RES ( << 0 )
#define REG_FSTST1 (0x28 )
#define VCO_TX_NOCAL ( << 15)
#define VCO_ARRAY_CAL_LONG ( << 14)
#define VCO_CURRENT_REF ( << 10)
#define VCO_CURRENT_K ( << 4 )
#define VC_DAC_EN ( << 3 )
#define VC_DAC_VAL ( << 0 )
#define REG_FSTST2 (0x29 )
#define VCO_CURCAL_SPEED ( << 13)
#define VCO_CURRENT_OE ( << 12)
#define VCO_CURRENT_O ( << 6 )
#define VCO_CURRENT_RES ( << 0 )
#define REG_FSTST3 (0x2a )
#define CHP_CAL_DISABLE ( << 15)
#define CHP_CURRENT_OE ( << 14)
#define CHP_TEST_UP ( << 13)
#define CHP_TEST_DN ( << 12)
#define CHP_DISABLE ( << 11)
#define PD_DELAY ( << 10)
#define CHP_STEP_PERIOD ( << 8 )
#define STOP_CHP_CURRENT ( << 4 )
#define START_CHP_CURRENT ( << 0 )
#define REG_RXBPFTST (0x2b )
#define RXBPF_CAP_OE ( << 14)
#define RXBPF_CAP_O ( << 7 )
#define REG_FSMSTATE (0x2c )
#define REG_ADCTST (0x2d )
#define REG_DACTST (0x2e )
#define DAC_SRC ( << 12)
#define DAC_I_O ( << 6 )
#define DAC_Q_O ( << 0 )
#define REG_TOPTST (0x2f )
#define RAM_BIST_RUN ( << 7 )
#define TEST_BATTMON_EN ( << 6 )
#define VC_IN_TEST_EN ( << 5 )
#define ATESTMOD_PD ( << 4 )
#define ATESTMOD_MODE ( << 0 )
#define REG_TXFIFO (0x3e )
#define REG_RXFIFO (0x3f )
#define RAM_IEEEADR (0x60 )
#define RAM_PANID (0x68 )
#define RAM_SHORTADR (0x6A )
/* PSDU相关定义 */
#define FRAME_TYPE_BEACCON 0x00
#define FRAME_TYPE_DATA 0x01
#define FRAME_TYPE_ACK 0x02
#define FRAME_TYPE_MAC 0x03
#define SECURITY_ENABLE 0x00
#define FRAME_PENDING 0x00
#define ACKNOWLEDGMENT_REQUEST 0x00
#define PAN_ID_COMPRESSION 0x00
#define DEST_ADDRESSING_MODE 0x03
#define FRAME_VERSION 0x01
#define SOURCE_ADDRESSING_MODE 0x03
#define SEQUENCE_NUMBER 0x02
/* CC2420引脚定义 */
#define RESET PAout(0)
#define SFD PAin(1)
#define CCA PAin(2)
#define FIFOP PAin(3)
#define FIFO PAin(4)
#define CSN PAout(5)
#define SCLK PAout(6)
#define MOSI PAout(7)
#define MISO PAin(8)
#define VREG_EN PAout(9)#define RESET_ON() RESET = 1
#define RESET_OFF() RESET = 0
#define SCLK_ON() SCLK = 1
#define SCLK_OFF() SCLK = 0
#define MOSI_ON() MOSI = 1
#define MOSI_OFF() MOSI = 0
#define CSN_ON() CSN = 1
#define CSN_OFF() CSN = 0
#define FIFO_IN FIFO
#define MISO_IN MISO
#define CCA_IN CCA
#define SFD_IN SFD
#define FIFOP_IN FIFOPvoid CC2420_IOinit ( void );
void SPI_Init ( void );
uint8 SPI_Read ( void );
void SPI_Write ( uint8 txdata );
uint8 SPI_WriteRead ( uint8 txdata );
uint16 SPI_Word_Read ( void );
void SPI_Word_Write ( uint16 txdata );
void CC2420_Init ( void );
uint16 CC2420_ReadReg ( uint8 addr );
void CC2420_WriteReg ( uint8 addr, uint16 value );
void CC2420_Command ( uint8 cmd );
uint8 CC2420_RAM_Read ( uint8 addr, uint8 block );
void CC2420_RAM_Write ( uint8 addr, uint8 block, uint8 value );
void CC2420_SetRxMode ( void );
uint8 CC2420_RxPacket ( void ) ;
void CC2420_TxPacket ( void );
void CC2420_ReadRXFIFO ( void );
void CC2420_WriteTXFIFO ( void );#define UART_READ_BACK 0x01
#define CC2420_REG_READ 0xE0
#define CC2420_REG_WRITE 0xE1
#define CC2420_RAM_READ 0xE2
#define CC2420_RAM_WRITE 0xE3
#define CC2420_TX 0xE4
#define CC2420_RX 0xE5
#define CC2420_SETRX 0xE6
#define CC2420_RXFIFO 0xE7
#define CC2420_TXFIFO 0xE8
#define CC2420_INIT 0xEE
#define CC2420_EXT 0xEF
#endif
public.h
public.h
如下:
#ifndef _PUBLIC_H_
#define _PUBLIC_H_typedef unsigned char uint8;
typedef signed char int8;
typedef unsigned short uint16;
typedef signed short int16;
typedef unsigned long uint32;
typedef signed long int32;
typedef float fp32;
typedef double fp64;#define TRUE 1
#define FALSE 0
#define NULL 0
#endif
main.c
main.c
如下:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "cc2420.h"extern uint8 CC2420_PSDU[];#define SEND_MESSAGE 0int main ( void ) {delay_init();LED_Init();CC2420_IOinit();VREG_EN = 1;delay_ms ( 1000 );CC2420_Init();CC2420_SetRxMode();CC2420_PSDU[0] = 23 + 48 + 2;while ( 1 ) {#if SEND_MESSAGECC2420_PSDU[25] = 100;CC2420_WriteTXFIFO();CC2420_TxPacket();CC2420_SetRxMode();LED = !LED;delay_ms ( 500 );
#elseif ( CC2420_RxPacket() ) {CC2420_ReadRXFIFO();if ( CC2420_PSDU[25] == 100 ) {LED = !LED;CC2420_PSDU[25] = 0;}}#endif}
}
STM32驱动_cc2420相关推荐
- 关于STM32驱动DS1302实时时钟的一点思考
关于STM32驱动DS1302实时时钟的一点思考 之前用51驱动过DS1302,没用多久就输出了正确的时间.当时以为这块芯片其实没啥,很简单.但是现在用STM32做项目,用到同样的芯片,以为这有何难, ...
- stm32官方例程在哪找_正点原子Linux第十一章模仿STM32驱动开发格式实验
1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第十一章模仿STM32驱动开发格式实验 在上一章使用C语 ...
- ARM(IMX6U)裸机模仿STM32驱动开发实验(定义外设结构体)
参考:Linux之ARM(IMX6U)裸机模仿STM32驱动开发格式 作者:一只青木呀 发布时间: 2020-08-15 12:11:56 网址:https://blog.csdn.net/weixi ...
- stm32读取目标芯片_使用stm32驱动RC522读IC卡(代码留言邮箱)
RC522与PN532简介 关于STM32驱动方式 接线说明 程序烧录 查看卡号 总结 RC522与PN532简介 在写这篇文章之前有写过一篇有关于PN532的文章,RC522与PN532在使用上都可 ...
- STM32驱动LCD实战
目录 01 驱动时序 02 FSMC外设配置 03 背光驱动 04 复位驱动 05 寄存器配置 前段时间写了<STM32驱动LCD原理>和<STM32的FSMC外设简介>两篇文 ...
- STM32驱动串口屏,STM32F103C8T6串口发送指令控制HMI串口屏
STM32驱动串口屏,STM32F103C8T6串口发送指令控制HMI串口屏 串口屏 基础指令集 硬件和接线 接线 实验前准备 STM32程序 串口程序 主函数 实验现象 总结 串口屏 串口屏是一个集 ...
- STM32驱动开发(二)--USB Device RNDIS虚拟网卡(USB2.0 基础概念讲解)
STM32驱动开发(二)–USB Device RNDIS虚拟网卡(USB2.0基础概念讲解) 一.简介 本文基于stm32 Rndis实例,github开源, 使用STM32F407单板.结合协 ...
- 【常用芯片】ULN2003工作原理及中文资料(实例:STM32驱动28BYJ48步进电机)
ULN2003的基本介绍 ULN2003的概述 ULN2003是高耐压.大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成.一般采用DIP-16 或SOP-16 塑料封装. ULN2003的主要特点 ...
- STM32驱动WS2812B-2020 RGB彩灯(一)
STM32驱动WS2812B-2020RGB彩灯(一) 最近搞飞控,看到有些飞控上都使用的RGB彩灯,够酷炫,所以尝试着自己搞一个. 手上的硬件有一块自制的STM32F103最小系统板,一个同事焊好的 ...
最新文章
- PE文件和COFF文件格式分析——导出表
- docker安装mycat_分布式数据库中间件 MyCat 搞起来!
- HDFS中的safemode
- 链路聚合-CISCO
- LFFD 再升级!新增行人和人头检测模型,还有了优化的C++实现
- Javascript 的函数式对象(三)利用闭包模拟类的静态变量和方法
- dm数据库 linux版下载,linux环境搭建DM数据库
- Java 数据结构与算法面试 链表
- mysql 多表连接技巧_【Mysql进阶技巧(1)】 MySQL的多表关联与自连接
- 拼多多摄像头是否安全的检测
- 什么是利亚诺夫指数?Lyapunove指数 李雅普诺夫指数
- html动态显示背景颜色,js动态修改背景颜色方法汇总
- 2022高处安装、维护、拆除考试题库及模拟考试
- A fatal exception has occurred.Program will exit。可能是系统装有多个java编程程序。
- flutter 仿照 uiswitch
- 头像制作抖音微信壁纸小程序搭建一个基于uniCloud阿里OSS对象存储的免费图床源码
- 从简单的数据表中学习oracle的窗口函数使用
- JNI入门学程之HelloWorld篇
- HTML期末作业课程设计期末大作业——体育排球5页面带注册HTML+CSS+JS(学生网页设计作业源码)...
- 嵌入式linux开发,mqtt库移植