config.h
Код: Выделить всё
#define SRES 0x30
#define SCAL 0x33
#define SRX 0x34
#define STX 0x35
#define SIDLE 0x36
#define SPWD 0x39
#define IOCFG2 0x00
#define IOCFG1 0x01
#define IOCFG0 0x02
#define FIFOTHR 0x03
#define SYNC1 0x04
#define SYNC0 0x05
#define PKTLEN 0x06
#define PKTCTRL1 0x07
#define PKTCTRL0 0x08
#define ADDR 0x09
#define CHANNR 0x0A
#define FSCTRL1 0x0B
#define FSCTRL0 0x0C
#define FREQ2 0x0D
#define FREQ1 0x0E
#define FREQ0 0x0F
#define MDMCFG4 0x10
#define MDMCFG3 0x11
#define MDMCFG2 0x12
#define MDMCFG1 0x13
#define MDMCFG0 0x14
#define DEVIATN 0x15
#define MCSM2 0x16
#define MCSM1 0x17
#define MCSM0 0x18
#define FOCCFG 0x19
#define BSCFG 0x1A
#define AGCTRL2 0x1B
#define AGCTRL1 0x1C
#define AGCTRL0 0x1D
#define WOREVT1 0x1E
#define WOREVT0 0x1F
#define WORCTRL 0x20
#define FREND1 0x21
#define FREND0 0x22
#define FSCAL3 0x23
#define FSCAL2 0x24
#define FSCAL1 0x25
#define FSCAL0 0x26
#define RCCTRL1 0x27
#define RCCTRL0 0x28
#define FSTEST 0x29
#define PTEST 0x2A
#define AGCTEST 0x2B
#define TEST2 0x2C
#define TEST1 0x2D
#define TEST0 0x2E
#define PATABLE 0x3E
const unsigned char cc_config[] =
{
IOCFG0, 0x00,
IOCFG2, 0x0D,
FIFOTHR, 0x47,
PKTCTRL0,0x32,
FSCTRL1, 0x06,
FSCTRL0, 0x00,
FREQ2, 0x10,
FREQ1, 0xB0,
FREQ0, 0x71,
MDMCFG4, 0xF5,
MDMCFG3, 0x83,
MDMCFG2, 0x33,
MDMCFG1, 0x22,
MDMCFG0, 0xF8,
MCSM2, 0x07,
MCSM1, 0x30,
MCSM0, 0x18,
AGCTRL2, 0x03,
AGCTRL1, 0x40,
AGCTRL0, 0x91,
FREND1, 0x56,
FREND0, 0x11,
FSCAL3, 0xE9,
FSCAL2, 0x2A,
FSCAL1, 0x00,
FSCAL0, 0x1F,
TEST2, 0x81,
TEST1, 0x35,
TEST0, 0x09,
PATABLE, 0x00,
PATABLE, 0xC0,
PATABLE, 0x00,
PATABLE, 0x00,
PATABLE, 0x00,
PATABLE, 0x00,
PATABLE, 0x00,
PATABLE, 0x00
};
main.c
Код: Выделить всё
#include "stm32f0xx_spi.h"
#include "stm32f0xx_rcc.h"
#include "stm32f0xx_gpio.h"
#include "config.h"
GPIO_InitTypeDef PORT_GPIOA;
SPI_InitTypeDef SPI_port;
#define SS GPIO_Pin_4
#define CS_L GPIOA->BRR = (1<<4) //CS = L
#define CS_H GPIOA->BSRR = (1<<4) //CS = H
unsigned int i;
void delay(unsigned int delayTime)
{
for (i = 0; i < delayTime; i++);
}
void InitGPIOA()
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
PORT_GPIOA.GPIO_Mode = GPIO_Mode_OUT;
PORT_GPIOA.GPIO_OType = GPIO_OType_PP;
PORT_GPIOA.GPIO_Pin = SS;
PORT_GPIOA.GPIO_PuPd = GPIO_PuPd_UP;
PORT_GPIOA.GPIO_Speed = GPIO_Speed_Level_3;
GPIO_Init(GPIOA,&PORT_GPIOA);
}
void InitSPI()
{
/* SPI SCK and MOSI*/
PORT_GPIOA.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_7;
PORT_GPIOA.GPIO_Mode = GPIO_Mode_AF;
PORT_GPIOA.GPIO_Speed = GPIO_Speed_50MHz;
PORT_GPIOA.GPIO_OType = GPIO_OType_PP;
PORT_GPIOA.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(GPIOA, &PORT_GPIOA);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
SPI_port.SPI_CPOL = SPI_CPOL_High;
SPI_port.SPI_CPHA = SPI_CPHA_2Edge;
SPI_port.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
SPI_port.SPI_DataSize = SPI_DataSize_8b;
SPI_port.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_port.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_port.SPI_Mode = SPI_Mode_Master;
SPI_port.SPI_NSS = SPI_NSS_Soft;
SPI_Init(SPI1,&SPI_port);
SPI_Cmd(SPI1, ENABLE);
}
void spi_send(unsigned char command)
{
SPI_SendData8(SPI1,command);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET) {}
}
void cc1101_strobe(unsigned char s)
{
CS_H;
delay(150);
CS_L;
delay(50);
spi_send(s);
delay(50);
CS_H;
}
void rtx_rx()
{
cc1101_strobe(SIDLE);
cc1101_strobe(SRX);
}
void rtx_tx()
{
cc1101_strobe(SIDLE);
cc1101_strobe(STX);
}
void cc1101_init()
{
int a;
cc1101_strobe(SRES);
CS_H;
delay(150);
CS_L;
delay(50);
for(a=0; a<74; a++)
{
delay(1);
spi_send(cc_config[a]);
delay(1);
}
delay(50);
CS_H;
}
int main()
{
InitGPIOA();
GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_0);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_0);
InitSPI();
CS_H;
cc1101_init();
rtx_rx();
}