Skip to content

Instantly share code, notes, and snippets.

@sp5wwp
Created July 23, 2022 10:04
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Embed
What would you like to do?
Sample CC1200 code (running on Nucleo F303RE for Module17 to CC1200 eval board interfacing)
//consts
const uint8_t cc1200_tx_settings[50*3] =
{
0x00, 0x01, 0x08,
0x00, 0x03, 0x09,
0x00, 0x08, 0x1F,
0x00, 0x0A, 0xC8, //deviation (for RX can be set to lower value like 0x9F)
0x00, 0x0B, 0x00,
0x00, 0x0C, 0x5D,
0x00, 0x0D, 0x00,
0x00, 0x0E, 0x8A,
0x00, 0x0F, 0xCB,
0x00, 0x10, 0xAC,
0x00, 0x11, 0x00,
0x00, 0x12, 0x45,
0x00, 0x13, 0x3F,
0x00, 0x14, 0x75,
0x00, 0x15, 0x10,
0x00, 0x16, 0x37,
0x00, 0x17, 0xEC,
0x00, 0x19, 0x11,
0x00, 0x1B, 0x51,
0x00, 0x1C, 0x87,
0x00, 0x1D, 0x00,
0x00, 0x20, 0x14,
0x00, 0x26, 0x03,
0x00, 0x27, 0x00,
0x00, 0x28, 0x20,
0x00, 0x2B, 0x3F, //power (0x01..0x3F)
0x00, 0x2E, 0xFF,
0x2F, 0x00, 0x1C,
0x2F, 0x01, 0x22,
0x2F, 0x05, 0x0D,
0x2F, 0x0C, 0x57, //freq 439M = 0x57CCCD
0x2F, 0x0D, 0xCC, //freq
0x2F, 0x0E, 0xCD, //freq
0x2F, 0x10, 0xEE,
0x2F, 0x11, 0x10,
0x2F, 0x12, 0x07,
0x2F, 0x13, 0xAF,
0x2F, 0x16, 0x40,
0x2F, 0x17, 0x0E,
0x2F, 0x19, 0x03,
0x2F, 0x1B, 0x33,
0x2F, 0x1D, 0x17,
0x2F, 0x1F, 0x00,
0x2F, 0x20, 0x6E,
0x2F, 0x21, 0x1C,
0x2F, 0x22, 0xAC,
0x2F, 0x27, 0xB5,
0x2F, 0x32, 0x0E,
0x2F, 0x36, 0x03,
0x2F, 0x91, 0x08,
};
//vars
uint8_t tx_data[4];
uint8_t rx_data[3]={0,0,0};
uint16_t adc_val=0;
int8_t freq_shift=0;
//IRQs
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
HAL_GPIO_TogglePin(TST_PIN_GPIO_Port, TST_PIN_Pin);
if(mode) //TX
{
HAL_ADC_Start(&hadc1);
adc_val=HAL_ADC_GetValue(&hadc1);
freq_shift=(adc_val>>4)-128+20;
tx_data[0]=freq_shift;
HAL_SPI_Transmit(&hspi3, tx_data, 1, 1);
}
else //RX
{
HAL_SPI_TransmitReceive(&hspi3, tx_data, rx_data, 1, 10);
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 2048+rx_data[0]*16);
HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);
}
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin==GPIO_PIN_1)
{
if(HAL_GPIO_ReadPin(PTT_IN_GPIO_Port, PTT_IN_Pin))
//PTT released
{
//RX
mode=0;
//stop data transmission
HAL_TIM_Base_Stop_IT(&htim6);
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 1);
//RX mode
tx_data[0]=0x34;
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0);
HAL_SPI_Transmit(&hspi3, tx_data, 1, 100);
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 1);
//DAC - RF PA bias control
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_2, DAC_ALIGN_12B_R, 0);
HAL_DAC_Start(&hdac1, DAC_CHANNEL_2);
//initialize data transmission - RX
tx_data[0]=0x2F|0x80|0x40;
tx_data[1]=0x7D;
tx_data[2]=0;
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0);
HAL_SPI_TransmitReceive(&hspi3, tx_data, rx_data, 3, 10);
HAL_TIM_Base_Start_IT(&htim6);
}
else //PTT down
{
//TX
mode=1;
//DAC - RF PA bias control
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_2, DAC_ALIGN_12B_R, (3.0/3.3)*4095);
HAL_DAC_Start(&hdac1, DAC_CHANNEL_2);
//stop data transmission
HAL_TIM_Base_Stop_IT(&htim6);
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 1);
//TX mode
tx_data[0]=0x35;
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0);
HAL_SPI_Transmit(&hspi3, tx_data, 1, 100);
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 1);
//initialize data transmission - TX
tx_data[0]=0x2F|0x40;
tx_data[1]=0x7E;
tx_data[2]=0;
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0);
HAL_SPI_Transmit(&hspi3, tx_data, 3, 10);
//start data transmission
HAL_TIM_Base_Start_IT(&htim6);
}
}
}
//main routine
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART2_UART_Init();
MX_TIM6_Init();
MX_DAC1_Init();
MX_SPI3_Init();
MX_ADC1_Init();
/* USER CODE BEGIN 2 */
HAL_Delay(500);
HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED);
//chip reset
tx_data[0]=0x30;
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0);
HAL_SPI_Transmit(&hspi3, tx_data, 1, 10);
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 1);
HAL_Delay(100);
for(uint8_t i=0; i<50; i++)
{
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0);
if(cc1200_tx_settings[i*3])
HAL_SPI_Transmit(&hspi3, &cc1200_tx_settings[i*3], 3, 100);
else
HAL_SPI_Transmit(&hspi3, &cc1200_tx_settings[i*3+1], 2, 100);
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 1);
HAL_Delay(10);
}
//mode - RX
tx_data[0]=0x34;
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0);
HAL_SPI_Transmit(&hspi3, tx_data, 1, 100);
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 1);
//freq offset compensation
int16_t offset=180;
tx_data[0]=0x2F|0x40;
tx_data[1]=0x0A;
tx_data[2]=*((uint8_t*)&offset+1);
tx_data[3]=*((uint8_t*)&offset);
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0);
HAL_SPI_Transmit(&hspi3, tx_data, 4, 10);
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 1);
HAL_Delay(10);
//dont increment address in burst mode
tx_data[0]=0x2F;
tx_data[1]=0x06;
tx_data[2]=0;
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0);
HAL_SPI_Transmit(&hspi3, tx_data, 3, 10);
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 1);
//read samples
tx_data[0]=0x2F|0x80|0x40;
tx_data[1]=0x7D;
tx_data[2]=0;
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0);
HAL_SPI_TransmitReceive(&hspi3, tx_data, rx_data, 3, 10);
HAL_Delay(10);
HAL_TIM_Base_Start_IT(&htim6);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment