kopia lustrzana https://github.com/sq2ips/m20-custom-firmware
Added new led mode for telling GPS fix.
rodzic
86185723a8
commit
acd9e06f4d
|
@ -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
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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]
|
||||
##########################################################################################################################
|
||||
|
||||
# ------------------------------------------------
|
||||
|
|
19
m20/m20.ioc
19
m20/m20.ioc
|
@ -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
|
||||
|
|
Ładowanie…
Reference in New Issue