#include "stm32f0xx_hal.h" #include "si5351.h" #include "jtencode.h" #include "adc.h" #include "dma.h" #include "i2c.h" #include "usart.h" #include "gpio.h" #include "gps.h" void sysclk_init(void); char call[7] = "N0CALL"; char loc[5] = "AA00"; uint8_t dbm = 27; uint8_t tx_buffer[255]; int main(void) { HAL_Init(); sysclk_init(); gpio_init(); //led_blink(5); MX_DMA_Init(); MX_ADC_Init(); i2c_init(); HAL_GPIO_WritePin(OSC_NOTEN, 0); HAL_GPIO_WritePin(TCXO_EN, 1); HAL_Delay(100); // MX_USART1_UART_Init(); //jtencode_init(); //gps_init(); si5351_init(i2c_get(), SI5351_CRYSTAL_LOAD_8PF, 0); si5351_set_correction(0); //SI5351_XTAL_FREQ si5351_set_pll(SI5351_PLL_FIXED, SI5351_PLLA); si5351_set_ms_source(SI5351_CLK0, SI5351_PLLA); si5351_set_ms_source(SI5351_CLK1, SI5351_PLLA); si5351_set_ms_source(SI5351_CLK2, SI5351_PLLA); si5351_set_ms_source(SI5351_CLK3, SI5351_PLLA); si5351_set_freq(1000000UL * 100, SI5351_PLL_FIXED, SI5351_CLK0); si5351_drive_strength(SI5351_CLK0, SI5351_DRIVE_2MA); // Set for max power if desired (8ma max) si5351_output_enable(SI5351_CLK0, 1); // Disable the clock initially //wspr_encode(call, loc, dbm, tx_buffer); si5351_pll_reset(SI5351_PLLA); HAL_Delay(1000); uint32_t led_timer = HAL_GetTick(); uint32_t last_gps = HAL_GetTick(); while (1) { if(HAL_GetTick() - led_timer > 100) { HAL_GPIO_TogglePin(LED_BLUE); led_timer = HAL_GetTick(); } if(HAL_GetTick() - last_gps > 100) { // gps_process(); last_gps = HAL_GetTick(); } } } // Initialize system clocks void sysclk_init(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_PeriphCLKInitTypeDef PeriphClkInit; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSI14; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSI14State = RCC_HSI14_ON; RCC_OscInitStruct.HSICalibrationValue = 16; RCC_OscInitStruct.HSI14CalibrationValue = 16; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; HAL_RCC_OscConfig(&RCC_OscInitStruct); RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0); PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_I2C1; PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1; PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_SYSCLK; HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit); HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); // SysTick_IRQn interrupt configuration HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); }