diff --git a/.cproject b/.cproject
--- a/.cproject
+++ b/.cproject
@@ -97,6 +97,168 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
--- a/.settings/language.settings.xml
+++ b/.settings/language.settings.xml
@@ -4,12 +4,17 @@
-
-
+
+
+
+
+
+
+
+
-
diff --git a/openocd.cfg b/openocd.cfg
--- a/openocd.cfg
+++ b/openocd.cfg
@@ -1,7 +1,7 @@
source [find interface/stlink-v2.cfg]
transport select hla_swd
-set WORKAREASIZE 0x400
+set WORKAREASIZE 0x200
source [find target/stm32f0x.cfg]
diff --git a/src/main.c b/src/main.c
--- a/src/main.c
+++ b/src/main.c
@@ -44,8 +44,8 @@ int main(void)
HAL_Delay(1000); // startup delay before infinisleep
sysclk_init();
+ gpio_init();
rtc_init();
- gpio_init();
adc_init();
wspr_init();
@@ -54,7 +54,9 @@ int main(void)
led_blink(4);
uint16_t blink_rate = BLINK_FAST;
- uint8_t state = SYSTEM_GPSACQ;
+// uint8_t state = SYSTEM_GPSACQ;
+//DEBUG:
+ uint8_t state = SYSTEM_IDLE;
uint32_t gps_polltimer = 0;
uint32_t fix_acq_starttime = 0;
@@ -75,10 +77,10 @@ int main(void)
// TODO: Disable GPIO port clocking when not needed!
// Every 10 minutes, wake up and try to wspr
-// if(state == SYSTEM_IDLE && (HAL_GetTick() - last_wspr_tx_time > 60000 * 10))
-// {
-// state = SYSTEM_GPSACQ;
-// }
+ if(state == SYSTEM_IDLE && (HAL_GetTick() - last_wspr_tx_time > 60000 * 10))
+ {
+ state = SYSTEM_GPSACQ;
+ }
// Update fix status every 2 seconds, only if the GPS is powered on
if(HAL_GetTick() - gps_polltimer > 2000)
@@ -120,7 +122,8 @@ int main(void)
// HAL_SuspendTick();
// Enter sleep mode: wait for interrupt
- HAL_PWR_EnterSLEEPMode(0, PWR_SLEEPENTRY_WFI);
+ //HAL_PWR_EnterSLEEPMode(0, PWR_SLEEPENTRY_WFI);
+ HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
// We have woken up!
diff --git a/src/rtc.c b/src/rtc.c
--- a/src/rtc.c
+++ b/src/rtc.c
@@ -4,6 +4,7 @@
#include "stm32f0xx_hal.h"
#include "rtc.h"
+#include "gpio.h"
RTC_HandleTypeDef hrtc;
@@ -11,6 +12,12 @@ RTC_HandleTypeDef hrtc;
static void Error_Handler(void)
{
volatile uint8_t crap = 1;
+
+ for(uint16_t i=0; i<300; i++)
+ {
+ HAL_GPIO_TogglePin(LED_BLUE);
+ HAL_Delay(100);
+ }
}
// Initialize RTC
@@ -23,12 +30,14 @@ void rtc_init(void)
RTC_DateTypeDef sDate;
RTC_AlarmTypeDef sAlarm;
+ HAL_PWR_EnableBkUpAccess();
+
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 124;
hrtc.Init.SynchPrediv = 322; // if this has enough bits should be 1.0018Hz based on 40kHz LSI
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
- hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
+ hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
if (HAL_RTC_Init(&hrtc) != HAL_OK)
@@ -48,8 +57,8 @@ void rtc_init(void)
sDate.WeekDay = RTC_WEEKDAY_MONDAY;
sDate.Month = RTC_MONTH_JANUARY;
- sDate.Date = 0x1;
- sDate.Year = 0x0;
+ sDate.Date = 0x01;
+ sDate.Year = 0x19;
if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
{
@@ -67,18 +76,22 @@ void rtc_init(void)
sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
// Alarm will trigger on the Xth second of every minute
- sAlarm.AlarmMask = RTC_ALARMMASK_DATEWEEKDAY | RTC_ALARMMASK_HOURS | RTC_ALARMMASK_MINUTES;
+ sAlarm.AlarmMask = RTC_ALARMMASK_ALL; // Trigger every second for now
sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;
sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
- sAlarm.AlarmDateWeekDay = 0x1;
+ sAlarm.AlarmDateWeekDay = RTC_WEEKDAY_MONDAY;
sAlarm.Alarm = RTC_ALARM_A;
- if (HAL_RTC_SetAlarm(&hrtc, &sAlarm, RTC_FORMAT_BCD) != HAL_OK)
+ if (HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BCD) != HAL_OK)
{
Error_Handler();
}
HAL_NVIC_SetPriority(RTC_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(RTC_IRQn);
+
+ HAL_RTC_WaitForSynchro(&hrtc);
+
+
}
void rtc_cal(void)
diff --git a/src/system.c b/src/system.c
--- a/src/system.c
+++ b/src/system.c
@@ -49,7 +49,7 @@ void sysclk_init(void)
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);
- PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_I2C1;
+ PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_I2C1|RCC_PERIPHCLK_RTC;
PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_SYSCLK; //RCC_USART1CLKSOURCE_PCLK1;
PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_SYSCLK;
PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
diff --git a/wsprhab.ioc b/wsprhab.ioc
--- a/wsprhab.ioc
+++ b/wsprhab.ioc
@@ -26,8 +26,6 @@ Dma.USART1_TX.1.PeriphInc=DMA_PINC_DISAB
Dma.USART1_TX.1.Priority=DMA_PRIORITY_LOW
Dma.USART1_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
File.Version=6
-I2C1.IPParameters=Timing
-I2C1.Timing=0x2000090E
KeepUserPlacement=false
Mcu.Family=STM32F0
Mcu.IP0=ADC
@@ -45,8 +43,10 @@ Mcu.Pin0=PF0-OSC_IN
Mcu.Pin1=PF1-OSC_OUT
Mcu.Pin10=PB6
Mcu.Pin11=PB7
-Mcu.Pin12=VP_RTC_VS_RTC_Alarm_A_Intern
-Mcu.Pin13=VP_SYS_VS_Systick
+Mcu.Pin12=VP_RTC_VS_RTC_Activate
+Mcu.Pin13=VP_RTC_VS_RTC_Calendar
+Mcu.Pin14=VP_RTC_VS_RTC_Alarm_A_Intern
+Mcu.Pin15=VP_SYS_VS_Systick
Mcu.Pin2=PA1
Mcu.Pin3=PA6
Mcu.Pin4=PB0
@@ -55,18 +55,20 @@ Mcu.Pin6=PA9
Mcu.Pin7=PA10
Mcu.Pin8=PA13
Mcu.Pin9=PA14
-Mcu.PinsNb=14
+Mcu.PinsNb=16
+Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F031G6Ux
-MxCube.Version=4.16.0
-MxDb.Version=DB.4.0.160
-NVIC.DMA1_Channel2_3_IRQn=true\:0\:0\:false\:false\:true
-NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:false
-NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:false
-NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:false
-NVIC.SVC_IRQn=true\:0\:0\:false\:false\:false
-NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true
-NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true
+MxCube.Version=5.2.0
+MxDb.Version=DB.5.0.20
+NVIC.DMA1_Channel2_3_IRQn=true\:0\:0\:false\:false\:true\:true\:true
+NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:false\:true\:false
+NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:false\:true\:false
+NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:false\:true\:false
+NVIC.RTC_IRQn=true\:0\:0\:false\:false\:true\:true\:true
+NVIC.SVC_IRQn=true\:0\:0\:false\:false\:false\:true\:false
+NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:true\:true
+NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true
PA1.GPIOParameters=GPIO_ModeDefaultEXTI
PA1.GPIO_ModeDefaultEXTI=GPIO_MODE_EVT_RISING
PA1.Locked=true
@@ -109,19 +111,9 @@ PB6.Signal=USART1_TX
PB7.Locked=true
PB7.Mode=Asynchronous
PB7.Signal=USART1_RX
-PCC.Battery=Li-MnO2(CR2477)
-PCC.Battery.Capacity=850.0
-PCC.Battery.Compatibility=Yes
-PCC.Battery.InParallel=1
-PCC.Battery.InSeries=1
-PCC.Battery.MaxContinuous=2.0
-PCC.Battery.MaxPulseCurrent=10.0
-PCC.Battery.NominalVoltage=3.0
-PCC.Battery.SelfDischarge=0.12
PCC.Checker=false
PCC.Line=STM32F0x1
PCC.MCU=STM32F031G(4-6)Ux
-PCC.MXVersion=4.16.0
PCC.PartNumber=STM32F031G6Ux
PCC.Seq0=0
PCC.Series=STM32F0
@@ -141,20 +133,25 @@ PF1-OSC_OUT.GPIO_PuPd=GPIO_NOPULL
PF1-OSC_OUT.GPIO_Speed=GPIO_SPEED_FREQ_LOW
PF1-OSC_OUT.Locked=true
PF1-OSC_OUT.Signal=GPIO_Output
+PinOutPanel.RotationAngle=0
ProjectManager.AskForMigrate=true
ProjectManager.BackupPrevious=false
ProjectManager.CompilerOptimize=2
ProjectManager.ComputerToolchain=false
ProjectManager.CoupleFile=true
+ProjectManager.CustomerFirmwarePackage=
+ProjectManager.DefaultFWLocation=true
ProjectManager.DeletePrevious=true
ProjectManager.DeviceId=STM32F031G6Ux
-ProjectManager.FirmwarePackage=STM32Cube FW_F0 V1.6.0
+ProjectManager.FirmwarePackage=STM32Cube FW_F0 V1.10.1
ProjectManager.FreePins=true
ProjectManager.HalAssertFull=false
ProjectManager.HeapSize=0x200
ProjectManager.KeepUserCode=true
ProjectManager.LastFirmware=true
ProjectManager.LibraryCopy=0
+ProjectManager.MainLocation=Src
+ProjectManager.NoMain=false
ProjectManager.PreviousToolchain=
ProjectManager.ProjectBuild=false
ProjectManager.ProjectFileName=wsprhab.ioc
@@ -163,25 +160,34 @@ ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=TrueSTUDIO
ProjectManager.ToolChainLocation=
ProjectManager.UnderRoot=false
-ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false,2-MX_DMA_Init-DMA-false,3-MX_ADC_Init-ADC-false,4-MX_I2C1_Init-I2C1-false,5-MX_USART1_UART_Init-USART1-false,6-MX_RTC_Init-RTC-false
-RCC.DATA_CACHE_ENABLE=1
+ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-MX_ADC_Init-ADC-false-HAL-true,4-MX_I2C1_Init-I2C1-false-HAL-true,5-MX_USART1_UART_Init-USART1-false-HAL-true,6-MX_RTC_Init-RTC-false-HAL-true
RCC.FamilyName=M
RCC.I2c1ClockSelection=RCC_I2C1CLKSOURCE_SYSCLK
-RCC.INSTRUCTION_CACHE_ENABLE=1
-RCC.IPParameters=DATA_CACHE_ENABLE,FamilyName,I2c1ClockSelection,INSTRUCTION_CACHE_ENABLE,PLLCLKFreq_Value,PLLMCOFreq_Value,TimSysFreq_Value,Usart1ClockSelection,VDD_VALUE
+RCC.IPParameters=FamilyName,I2c1ClockSelection,PLLCLKFreq_Value,PLLMCOFreq_Value,TimSysFreq_Value,Usart1ClockSelection,VDD_VALUE
RCC.PLLCLKFreq_Value=8000000
RCC.PLLMCOFreq_Value=8000000
RCC.TimSysFreq_Value=8000000
RCC.Usart1ClockSelection=RCC_USART1CLKSOURCE_HSI
RCC.VDD_VALUE=3.3
+RTC.Alarm=RTC_ALARM_A
+RTC.AlarmMaskDateWeekDay=RTC_ALARMMASK_DATEWEEKDAY
+RTC.AlarmMaskHours=RTC_ALARMMASK_HOURS
+RTC.AlarmMaskMinutes=RTC_ALARMMASK_MINUTES
+RTC.AlarmMaskSeconds=RTC_ALARMMASK_SECONDS
+RTC.IPParameters=Alarm,AlarmMaskDateWeekDay,AlarmMaskHours,AlarmMaskMinutes,AlarmMaskSeconds
SH.GPXTI1.0=GPIO_EXTI1
SH.GPXTI1.ConfNb=1
USART1.BaudRate=9600
-USART1.DMADisableonRxErrorParam=UART_ADVFEATURE_DMA_DISABLEONRXERROR
-USART1.IPParameters=BaudRate,OverrunDisableParam,DMADisableonRxErrorParam
-USART1.OverrunDisableParam=UART_ADVFEATURE_OVERRUN_DISABLE
+USART1.DMADisableonRxErrorParam=ADVFEATURE_DMA_DISABLEONRXERROR
+USART1.IPParameters=BaudRate,OverrunDisableParam,DMADisableonRxErrorParam,VirtualMode-Asynchronous
+USART1.OverrunDisableParam=ADVFEATURE_OVERRUN_DISABLE
+USART1.VirtualMode-Asynchronous=VM_ASYNC
+VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled
+VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate
VP_RTC_VS_RTC_Alarm_A_Intern.Mode=Alarm A
VP_RTC_VS_RTC_Alarm_A_Intern.Signal=RTC_VS_RTC_Alarm_A_Intern
+VP_RTC_VS_RTC_Calendar.Mode=RTC_Calendar
+VP_RTC_VS_RTC_Calendar.Signal=RTC_VS_RTC_Calendar
VP_SYS_VS_Systick.Mode=SysTick
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
board=wsprhab