Added new led mode for telling GPS fix.

cw-aprs
sq2ips 2025-03-08 21:17:58 +01:00
rodzic 86185723a8
commit acd9e06f4d
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: C383A71588BA55F5
7 zmienionych plików z 115 dodań i 8 usunięć

Wyświetl plik

@ -21,6 +21,10 @@
#define ADF_FREQ_CORRECTION 19 // correction of frequency from crystal inaccuracy in 270Hz steps. To be individually set for each sonde.
#define LED_MODE 2 // 0 - disabled, 1 - flashes when prepairing tx data before transmit, 2 - GPS fix indication
#define LED_PERIOD 5 // time between LED lighting
#define LED_DISABLE_ALT 1000 // disable led when certain altitude is reached, 0 for always enable
/*-----------------------------------------------------------------*/
// the rest of parameters should not be changed normally

Wyświetl plik

@ -74,6 +74,7 @@ void Error_Handler(void);
/* USER CODE BEGIN EFP */
void GPS_Handler(void);
void LED_Handler(void);
void main_loop(void);
/* USER CODE END EFP */

Wyświetl plik

@ -51,6 +51,7 @@ void SVC_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
void TIM2_IRQHandler(void);
void TIM6_DAC_IRQHandler(void);
void TIM22_IRQHandler(void);
void LPUART1_IRQHandler(void);
/* USER CODE BEGIN EFP */

Wyświetl plik

@ -74,8 +74,10 @@ static void MX_TIM2_Init(void);
static void MX_TIM22_Init(void);
static void MX_ADC_Init(void);
static void MX_IWDG_Init(void);
static void MX_TIM6_Init(void);
/* USER CODE BEGIN PFP */
void GPS_Handler(void);
void LED_Handler(void);
void main_loop(void);
#ifdef DEBUG
@ -110,7 +112,9 @@ PUTCHAR_PROTOTYPE
void main_loop(void)
{
// LED
#if LED_MODE == 1
LL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
#endif
#ifdef DEBUG
printf("\r\nFrame: %d\r\n", HorusPacket.PacketCount);
#endif
@ -203,7 +207,9 @@ void main_loop(void)
HorusPacket.PacketCount++;
// LED
#if LED_MODE == 1
LL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
#endif
}
void GPS_Handler(void)
{
@ -225,6 +231,33 @@ void GPS_Handler(void)
#endif
}
}
void LED_Handler(void){
#if LED_MODE == 2
#if GPS_TYPE == 1
uint8_t fix = NmeaData.Fix;
if(LED_DISABLE_ALT != 0){
if(NmeaData.Alt >= LED_DISABLE_ALT){
LL_TIM_DisableCounter(TIM6);
LL_TIM_DisableIT_UPDATE(TIM6);
}
}
#elif GPS_TYPE == 2
uint8_t fix = GpsData.Fix;
if(LED_DISABLE_ALT != 0){
if(GpsData.Alt >= LED_DISABLE_ALT){
LL_TIM_DisableCounter(TIM6);
LL_TIM_DisableIT_UPDATE(TIM6);
}
}
#endif
for(; fix>0; fix--){
LL_GPIO_SetOutputPin(LED_GPIO_Port, LED_Pin);
LL_mDelay(50);
LL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin);
LL_mDelay(100);
}
#endif
}
/* USER CODE END 0 */
/**
@ -267,6 +300,7 @@ int main(void)
MX_TIM22_Init();
MX_ADC_Init();
MX_IWDG_Init();
MX_TIM6_Init();
/* USER CODE BEGIN 2 */
LL_GPIO_SetOutputPin(POWER_ON_GPIO_Port, POWER_ON_Pin);
LL_GPIO_SetOutputPin(GPS_ON_GPIO_Port, GPS_ON_Pin);
@ -307,8 +341,13 @@ int main(void)
while (!LL_LPUART_IsActiveFlag_TC(LPUART1)){}
#endif
// main loop timer
LL_TIM_EnableCounter(TIM22);
LL_TIM_EnableIT_UPDATE(TIM22);
// LED timer
LL_TIM_EnableCounter(TIM6);
LL_TIM_EnableIT_UPDATE(TIM6);
/* USER CODE END 2 */
/* Infinite loop */
@ -327,7 +366,9 @@ int main(void)
parseXMframe(&GpsData, GpsRxBuffer);
#endif
#ifdef DEBUG
#if GPS_TYPE == 1
printf("Correct gps frames: %d\r\n", NmeaData.Corr);
#endif
#endif
GpsBufferReady = false;
}
@ -740,6 +781,43 @@ static void MX_TIM2_Init(void)
}
/**
* @brief TIM6 Initialization Function
* @param None
* @retval None
*/
static void MX_TIM6_Init(void)
{
/* USER CODE BEGIN TIM6_Init 0 */
/* USER CODE END TIM6_Init 0 */
LL_TIM_InitTypeDef TIM_InitStruct = {0};
/* Peripheral clock enable */
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM6);
/* TIM6 interrupt Init */
NVIC_SetPriority(TIM6_DAC_IRQn, 2);
NVIC_EnableIRQ(TIM6_DAC_IRQn);
/* USER CODE BEGIN TIM6_Init 1 */
TIM_InitStruct.Autoreload = ((LED_PERIOD * 1000) / 5) - 1;
/* USER CODE END TIM6_Init 1 */
TIM_InitStruct.Prescaler = 60000;
TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
//TIM_InitStruct.Autoreload = 65535;
LL_TIM_Init(TIM6, &TIM_InitStruct);
LL_TIM_DisableARRPreload(TIM6);
LL_TIM_SetTriggerOutput(TIM6, LL_TIM_TRGO_RESET);
LL_TIM_DisableMasterSlaveMode(TIM6);
/* USER CODE BEGIN TIM6_Init 2 */
/* USER CODE END TIM6_Init 2 */
}
/**
* @brief TIM22 Initialization Function
* @param None
@ -761,7 +839,7 @@ static void MX_TIM22_Init(void)
NVIC_EnableIRQ(TIM22_IRQn);
/* USER CODE BEGIN TIM22_Init 1 */
TIM_InitStruct.Autoreload = (TIME_PERIOD * 1000) / 5;
TIM_InitStruct.Autoreload = ((TIME_PERIOD * 1000) / 5) - 1;
/* USER CODE END TIM22_Init 1 */
TIM_InitStruct.Prescaler = 60000;
TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;

Wyświetl plik

@ -158,6 +158,22 @@ void TIM2_IRQHandler(void)
/* USER CODE END TIM2_IRQn 1 */
}
/**
* @brief This function handles TIM6 global interrupt and DAC1/DAC2 underrun error interrupts.
*/
void TIM6_DAC_IRQHandler(void)
{
/* USER CODE BEGIN TIM6_DAC_IRQn 0 */
if(LL_TIM_IsActiveFlag_UPDATE(TIM6) == 1){
LL_TIM_ClearFlag_UPDATE(TIM6);
LED_Handler();
}
/* USER CODE END TIM6_DAC_IRQn 0 */
/* USER CODE BEGIN TIM6_DAC_IRQn 1 */
/* USER CODE END TIM6_DAC_IRQn 1 */
}
/**
* @brief This function handles TIM22 global interrupt.
*/

Wyświetl plik

@ -1,5 +1,5 @@
##########################################################################################################################
# File automatically-generated by tool: [projectgenerator] version: [4.5.0-RC5] date: [Fri Mar 07 09:40:24 CET 2025]
# File automatically-generated by tool: [projectgenerator] version: [4.5.0-RC5] date: [Sat Mar 08 20:02:46 CET 2025]
##########################################################################################################################
# ------------------------------------------------

Wyświetl plik

@ -22,15 +22,16 @@ Mcu.CPN=STM32L051R6T6
Mcu.Family=STM32L0
Mcu.IP0=ADC
Mcu.IP1=IWDG
Mcu.IP10=USART1
Mcu.IP2=LPUART1
Mcu.IP3=NVIC
Mcu.IP4=RCC
Mcu.IP5=SPI1
Mcu.IP6=SYS
Mcu.IP7=TIM2
Mcu.IP8=TIM22
Mcu.IP9=USART1
Mcu.IPNb=10
Mcu.IP8=TIM6
Mcu.IP9=TIM22
Mcu.IPNb=11
Mcu.Name=STM32L051R(6-8)Tx
Mcu.Package=LQFP64
Mcu.Pin0=PC13
@ -58,14 +59,15 @@ Mcu.Pin28=VP_IWDG_VS_IWDG
Mcu.Pin29=VP_SYS_VS_Systick
Mcu.Pin3=PH1-OSC_OUT
Mcu.Pin30=VP_TIM2_VS_ClockSourceINT
Mcu.Pin31=VP_TIM22_VS_ClockSourceINT
Mcu.Pin31=VP_TIM6_VS_ClockSourceINT
Mcu.Pin32=VP_TIM22_VS_ClockSourceINT
Mcu.Pin4=PA4
Mcu.Pin5=PA5
Mcu.Pin6=PA6
Mcu.Pin7=PA7
Mcu.Pin8=PC4
Mcu.Pin9=PB0
Mcu.PinsNb=32
Mcu.PinsNb=33
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32L051R6Tx
@ -80,6 +82,7 @@ NVIC.SVC_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
NVIC.SysTick_IRQn=true\:3\:0\:false\:false\:true\:false\:true\:false
NVIC.TIM22_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.TIM2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.TIM6_DAC_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
PA10.Locked=true
PA10.Mode=Asynchronous
PA10.Signal=USART1_RX
@ -225,7 +228,7 @@ ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-LL-false,2-MX_GPIO_Init-GPIO-false-LL-true,3-MX_LPUART1_UART_Init-LPUART1-false-LL-true,4-MX_USART1_UART_Init-USART1-false-LL-true,5-MX_SPI1_Init-SPI1-false-LL-true,6-MX_TIM2_Init-TIM2-false-LL-true,7-MX_TIM22_Init-TIM22-false-LL-true,8-MX_ADC_Init-ADC-false-LL-true,9-MX_IWDG_Init-IWDG-false-LL-true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-LL-false,2-MX_GPIO_Init-GPIO-false-LL-true,3-MX_LPUART1_UART_Init-LPUART1-false-LL-true,4-MX_USART1_UART_Init-USART1-false-LL-true,5-MX_SPI1_Init-SPI1-false-LL-true,6-MX_TIM2_Init-TIM2-false-LL-true,7-MX_TIM22_Init-TIM22-false-LL-true,8-MX_ADC_Init-ADC-false-LL-true,9-MX_IWDG_Init-IWDG-false-LL-true,10-MX_TIM6_Init-TIM6-false-LL-true
RCC.AHBFreq_Value=12000000
RCC.APB1Freq_Value=12000000
RCC.APB1TimFreq_Value=12000000
@ -277,6 +280,8 @@ TIM2.Prescaler=119
TIM22.IPParameters=Prescaler,Period
TIM22.Period=2400
TIM22.Prescaler=60000
TIM6.IPParameters=Prescaler
TIM6.Prescaler=60000
USART1.IPParameters=VirtualMode-Asynchronous,Mode
USART1.Mode=MODE_TX
USART1.VirtualMode-Asynchronous=VM_ASYNC
@ -288,4 +293,6 @@ VP_TIM22_VS_ClockSourceINT.Mode=Internal
VP_TIM22_VS_ClockSourceINT.Signal=TIM22_VS_ClockSourceINT
VP_TIM2_VS_ClockSourceINT.Mode=Internal
VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT
VP_TIM6_VS_ClockSourceINT.Mode=Enable_Timer
VP_TIM6_VS_ClockSourceINT.Signal=TIM6_VS_ClockSourceINT
board=custom