# HG changeset patch # User Ethan Zonca # Date 2016-03-25 22:30:33 # Node ID 23ecc15c694d676386beae82dda9c34e8e51a8df # Parent f76c13fc82996c2915352c22ab1f3a6e495eccdf Tons of changes, got my first wspr transmission through! Manually powered up at even minute + 1 second diff --git a/Makefile b/Makefile --- a/Makefile +++ b/Makefile @@ -40,9 +40,9 @@ JTENCODE_INCLUDES = -Ilib/jtencode # USER_CFLAGS: user C flags (enable warnings, enable debug info) USER_CFLAGS = -Wall -g -ffunction-sections -fdata-sections -Os -fno-common --function-sections -fdata-sections -flto # USER_LDFLAGS: user LD flags -USER_LDFLAGS = -fno-exceptions -ffunction-sections -fdata-sections -Wl,--gc-sections -flto +USER_LDFLAGS = -flto -fno-exceptions -ffunction-sections -fdata-sections -Wl,--gc-sections USER_LDFLAGS += --static -# -nostartfiles +#USER_LDFLAGS += -nostartfiles # TARGET_DEVICE: device to compile for TARGET_DEVICE = STM32F031x6 @@ -93,6 +93,7 @@ DEFS = -D$(CORE) $(USER_DEFS) -D$(TARGET # compile gcc flags CFLAGS = $(DEFS) $(INCLUDES) +# EMZ: Maybe remove -msoft-float CFLAGS += -mcpu=$(CPU) -mthumb -msoft-float CFLAGS += $(USER_CFLAGS) @@ -216,7 +217,7 @@ LDFLAGS = -T $(LD_SCRIPT) -L $(CUBELIB_B $(CC) $(CFLAGS) -Os -c -o $@ $^ $(BUILD_DIR)/%.o: src/%.s | $(BUILD_DIR) - $(CC) $(CFLAGS) -c -o $@ $^ + $(CC) $(CFLAGS) -Os -c -o $@ $^ $(BUILD_DIR): $(MKDIR) $@ diff --git a/inc/stm32f0xx_hal_conf.h b/inc/stm32f0xx_hal_conf.h --- a/inc/stm32f0xx_hal_conf.h +++ b/inc/stm32f0xx_hal_conf.h @@ -27,7 +27,7 @@ //#define HAL_RNG_MODULE_ENABLED //#define HAL_RTC_MODULE_ENABLED //#define HAL_SPI_MODULE_ENABLED -//#define HAL_TIM_MODULE_ENABLED +#define HAL_TIM_MODULE_ENABLED #define HAL_UART_MODULE_ENABLED //#define HAL_USART_MODULE_ENABLED //#define HAL_IRDA_MODULE_ENABLED diff --git a/src/main.c b/src/main.c --- a/src/main.c +++ b/src/main.c @@ -10,7 +10,8 @@ void sysclk_init(void); -#define WSPR_DEFAULT_FREQ 14097100UL +//#define WSPR_DEFAULT_FREQ 14097100UL +#define WSPR_DEFAULT_FREQ 10140100UL #define WSPR_TONE_SPACING 146 // ~1.46 Hz #define WSPR_CTC 10672 // CTC value for WSPR @@ -42,14 +43,18 @@ void encode_wspr(void) uint32_t freq2 = (freq * 100) + (tx_buffer[i] * tone_spacing); si5351_set_freq(freq2, 0, SI5351_CLK0); + HAL_GPIO_TogglePin(LED_BLUE); //si5351_set_freq((freq * 100) + (tx_buffer[i] * tone_spacing), 0, SI5351_CLK0); - HAL_Delay(300); - //proceed = 0; - //while(!proceed); + //HAL_Delay(300); + proceed = 0; + while(!proceed); } + si5351_output_enable(SI5351_CLK0, 0); } + TIM_HandleTypeDef htim1; + int main(void) { HAL_Init(); @@ -62,8 +67,57 @@ int main(void) HAL_GPIO_WritePin(OSC_NOTEN, 0); HAL_GPIO_WritePin(TCXO_EN, 1); + + + // Start timer for WSPR + __TIM1_CLK_ENABLE(); + TIM_MasterConfigTypeDef sMasterConfig; + TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig; + TIM_OC_InitTypeDef sConfigOC; + + htim1.Instance = TIM1; + htim1.Init.Prescaler = 512; // gives 64uS ticks from 8MHz ahbclk + htim1.Init.CounterMode = TIM_COUNTERMODE_UP; + htim1.Init.Period = ctc; // Count up to this value (how many 64uS ticks per symbol) + htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim1.Init.RepetitionCounter = 0; + HAL_TIM_Base_Init(&htim1); + + HAL_TIM_Base_Start_IT(&htim1); +/* + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig); + + sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; + sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; + sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; + sBreakDeadTimeConfig.DeadTime = 0; + sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; + sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; + sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; + HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig); + + sConfigOC.OCMode = TIM_OCMODE_TIMING; + sConfigOC.Pulse = 0; + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; + sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; + HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1); +*/ + + HAL_NVIC_SetPriority(TIM1_BRK_UP_TRG_COM_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM1_BRK_UP_TRG_COM_IRQn); + HAL_Delay(100); + + + + + // MX_USART1_UART_Init(); jtencode_init(); @@ -96,7 +150,7 @@ int main(void) if(HAL_GetTick() - led_timer > 100) { - //HAL_GPIO_TogglePin(LED_BLUE); + HAL_GPIO_TogglePin(LED_BLUE); led_timer = HAL_GetTick(); } if(HAL_GetTick() - last_gps > 100) diff --git a/src/stm32f0xx_it.c b/src/stm32f0xx_it.c --- a/src/stm32f0xx_it.c +++ b/src/stm32f0xx_it.c @@ -1,105 +1,37 @@ -/** - ****************************************************************************** - * @file stm32f0xx_it.c - * @brief Interrupt Service Routines. - ****************************************************************************** - * - * COPYRIGHT(c) 2016 STMicroelectronics - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ -/* Includes ------------------------------------------------------------------*/ +// +// Interrupts: all global ISRs +// + #include "stm32f0xx_hal.h" #include "stm32f0xx.h" #include "stm32f0xx_it.h" - -/* USER CODE BEGIN 0 */ +#include "gpio.h" -/* USER CODE END 0 */ - -/* External variables --------------------------------------------------------*/ extern DMA_HandleTypeDef hdma_usart1_rx; extern DMA_HandleTypeDef hdma_usart1_tx; extern UART_HandleTypeDef huart1; +extern TIM_HandleTypeDef htim1; +extern volatile uint8_t proceed; -/******************************************************************************/ -/* Cortex-M0 Processor Interruption and Exception Handlers */ -/******************************************************************************/ - -/** -* @brief This function handles System tick timer. -*/ void SysTick_Handler(void) { - /* USER CODE BEGIN SysTick_IRQn 0 */ - - /* USER CODE END SysTick_IRQn 0 */ - HAL_IncTick(); - HAL_SYSTICK_IRQHandler(); - /* USER CODE BEGIN SysTick_IRQn 1 */ - - /* USER CODE END SysTick_IRQn 1 */ + HAL_IncTick(); + HAL_SYSTICK_IRQHandler(); } -/******************************************************************************/ -/* STM32F0xx Peripheral Interrupt Handlers */ -/* Add here the Interrupt Handlers for the used peripherals. */ -/* For the available peripheral interrupt handler names, */ -/* please refer to the startup file (startup_stm32f0xx.s). */ -/******************************************************************************/ - -/** -* @brief This function handles DMA1 channel 2 and 3 interrupts. -*/ void DMA1_Channel2_3_IRQHandler(void) { - /* USER CODE BEGIN DMA1_Channel2_3_IRQn 0 */ - - /* USER CODE END DMA1_Channel2_3_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_usart1_tx); - HAL_DMA_IRQHandler(&hdma_usart1_rx); - /* USER CODE BEGIN DMA1_Channel2_3_IRQn 1 */ - - /* USER CODE END DMA1_Channel2_3_IRQn 1 */ + HAL_DMA_IRQHandler(&hdma_usart1_tx); + HAL_DMA_IRQHandler(&hdma_usart1_rx); } -/** -* @brief This function handles USART1 global interrupt / USART1 wake-up interrupt through EXTI line 25. -*/ void USART1_IRQHandler(void) { - /* USER CODE BEGIN USART1_IRQn 0 */ - - /* USER CODE END USART1_IRQn 0 */ - HAL_UART_IRQHandler(&huart1); - /* USER CODE BEGIN USART1_IRQn 1 */ - - /* USER CODE END USART1_IRQn 1 */ + HAL_UART_IRQHandler(&huart1); } -/* USER CODE BEGIN 1 */ - -/* USER CODE END 1 */ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ +void TIM1_BRK_UP_TRG_COM_IRQHandler(void) +{ + proceed = 1; + HAL_TIM_IRQHandler(&htim1); +}