From 190a3c652df802c618ad7d5fd8c088ed6b312839 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Mon, 24 Feb 2025 21:16:07 +0800 Subject: [PATCH] good control projector with power on/off/next/first --- Core/Inc/ev1527.h | 20 ++ Core/Inc/main.h | 16 +- Core/Inc/stm32wlxx_hal_conf.h | 2 +- Core/Src/ev1527.c | 253 +++++++++++++++- Core/Src/gpio.c | 42 ++- Core/Src/main.c | 283 +++++++++++++++--- Core/Src/stm32wlxx_hal_msp.c | 77 +++++ Core/Src/stm32wlxx_it.c | 75 ++++- Core/Src/sys_app.c | 83 +++++ STM32CubeIDE/.project | 5 + .../Release/Application/User/Core/subdir.mk | 7 +- STM32CubeIDE/Release/WL55JC_AS923.elf | Bin 75100 -> 68852 bytes STM32CubeIDE/Release/objects.list | 1 + 13 files changed, 798 insertions(+), 66 deletions(-) diff --git a/Core/Inc/ev1527.h b/Core/Inc/ev1527.h index 040f18a..dc52a02 100644 --- a/Core/Inc/ev1527.h +++ b/Core/Inc/ev1527.h @@ -17,6 +17,13 @@ #include #include +#define RF_Read_TIM_RCC RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE) +#define RF_Read_TIM_TIMx TIM3 +#define RF_Read_TIM_IRQn TIM3_IRQn +#define RF_Read_TIM_Priority_1 2 +#define RF_Read_TIM_Priority_2 2 +#define RF_Read_TIM_IRQHandler TIM3_IRQHandler + /*********433 DATA GPIO**********/ // 433数据输入 @@ -25,9 +32,22 @@ #define DATA_433_GPIO_PORT GPIOA #define DATA_433_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE(); #endif + /*******************************/ void EV1527_Init(void); void RF_Signal_Decode(void); +// void Delay_us(uint32_t cnt); + +void STS_RF_write_send_1(void); +void STS_RF_write_send_0(void); +void STS_RF_write_send_leading(void); + +void STS_RF_write_send_ending(void); +void STS_RF_Send_Multi_Times(uint8_t *rf_payload, uint8_t rf_length, uint8_t mt); +void STS_RF_Send_Button_Multi_Times(uint8_t *rf_payload, uint8_t one_button, uint8_t rf_length, uint8_t mt); +void STS_RF_Send_AddressBit_and_CmdBit(uint8_t *rf_payload, uint8_t rf_length); + + #endif diff --git a/Core/Inc/main.h b/Core/Inc/main.h index 160a3c1..7d6dddb 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -90,6 +90,9 @@ void Error_Handler(void); #define USART1_TX_GPIO_Port GPIOB #ifdef RC +#define TIM1_PRESCALER_VALUE 47L // 1 us for stm32wle5xx 48Mhz +#define TIM1_PERIOD_VALUE 79L // 80 us + // REMOTE CONTROL EV1527/HS1527 LORA-WAN RELAY NODE #define RC_K0_Pin GPIO_PIN_5 @@ -159,9 +162,16 @@ void Error_Handler(void); #define RC_SHOW_30S 0x0C // 1100 -#define DATA_433_PIN GPIO_PIN_7 -#define DATA_433_GPIO_PORT GPIOA -#define DATA_433_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE(); +#define DATA_433_PIN GPIO_PIN_9 +#define DATA_433_GPIO_PORT GPIOA +#define DATA_433_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE(); + +#define RF_Send_GPIO_Port GPIOA +#define RF_Send_GPIO_Pin GPIO_PIN_8 + +#define RF_Receive_GPIO_Port GPIOA +#define RF_Receive_GPIO_Pin GPIO_PIN_9 +#define RF_Receive_GPIO_CLK_EN() __HAL_RCC_GPIOA_CLK_ENABLE(); #endif diff --git a/Core/Inc/stm32wlxx_hal_conf.h b/Core/Inc/stm32wlxx_hal_conf.h index bae70e9..660926c 100644 --- a/Core/Inc/stm32wlxx_hal_conf.h +++ b/Core/Inc/stm32wlxx_hal_conf.h @@ -54,7 +54,7 @@ /*#define HAL_SMBUS_MODULE_ENABLED */ /*#define HAL_SPI_MODULE_ENABLED */ #define HAL_SUBGHZ_MODULE_ENABLED -/*#define HAL_TIM_MODULE_ENABLED */ +#define HAL_TIM_MODULE_ENABLED #define HAL_UART_MODULE_ENABLED /*#define HAL_USART_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ diff --git a/Core/Src/ev1527.c b/Core/Src/ev1527.c index 12f5bed..eef0a7d 100644 --- a/Core/Src/ev1527.c +++ b/Core/Src/ev1527.c @@ -7,11 +7,11 @@ * @copyright Copyright (c) 2024 * */ -#include "EV1527.h" - +#include "ev1527.h" +volatile uint32_t TIM1_cnt=0; // 定时周期 #define TIME_CYCLE 80 - +// #define TIME_CYCLE 20 // 定义引导码的最小和最大持续时间(单位:us) #define MIN_LEAD_CODE (5600 / TIME_CYCLE) #define MAX_LEAD_CODE (16000 / TIME_CYCLE) @@ -74,11 +74,10 @@ void EV1527_Init(void) // 配置上拉输入 GPIO_InitStruct.Pin = DATA_433_PIN; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - GPIO_InitStruct.Pull = GPIO_PULLUP; + //GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(DATA_433_GPIO_PORT, &GPIO_InitStruct); } - /**----------------------------------------------------------------------------------------------** **函数名 :RF信号解码函数 **功能说明:解码从433MHz接收到的信号,并根据解码结果执行相应功能 @@ -178,6 +177,106 @@ void RF_Signal_Decode(void) } } +#if 0 +/**----------------------------------------------------------------------------------------------** + **函数名 :RF信号解码函数 + **功能说明:解码从433MHz接收到的信号,并根据解码结果执行相应功能 + **调用说明:80us调用一次 + **----------------------------------------------------------------------------------------------**/ +void RF_Signal_Decode(void) +{ + switch (RF_Decode_State) + { + case LEAD_CODE: // 引导码 + // 判断是否低电平 + if (HAL_GPIO_ReadPin(DATA_433_GPIO_PORT, DATA_433_PIN) == GPIO_PIN_RESET) + { + Lead_Code_Count++; + } + else // 高电平判断范围 + { + // 判断引导码范围是否合法 + if (Lead_Code_Count >= MIN_LEAD_CODE && Lead_Code_Count <= MAX_LEAD_CODE) + { + Lead_Code_Count = 0; + Reset_Decode_Parameters(); // 重置解码参数 + RF_Decode_State = HIGH_BIT; // 进入高位数据位判断状态 + } + else + { + Reset_Decode_Parameters(); // 引导码范围不合法,重置解码参数 + } + } + break; + + case HIGH_BIT: + // 判断是否高电平 + if (HAL_GPIO_ReadPin(DATA_433_GPIO_PORT, DATA_433_PIN) == GPIO_PIN_SET) + { + High_Bit_Count++; + } + else // 低电平判断范围 + { + // 判断高位数据位范围是否合法 + if (High_Bit_Count >= MIN_BIT_DURATION && High_Bit_Count <= MAX_BIT_DURATION) + { + High_Bit_Duration = High_Bit_Count; // 保存计数值,用于区分0和1 + High_Bit_Count = 0; + RF_Decode_State = LOW_BIT; // 进入低位数据位判断状态 + } + else + { + Reset_Decode_Parameters(); // 高位数据位范围不合法,重置解码参数 + } + } + break; + + case LOW_BIT: + // 判断是否低电平 + if (HAL_GPIO_ReadPin(DATA_433_GPIO_PORT, DATA_433_PIN) == GPIO_PIN_RESET) + { + Low_Bit_Count++; + } + else // 高电平判断范围 + { + // 判断低位数据位范围是否合法 + if (Low_Bit_Count >= MIN_BIT_DURATION && Low_Bit_Count <= MAX_BIT_DURATION) + { + Low_Bit_Duration = Low_Bit_Count; // 保存计数值,用于区分0和1 + Low_Bit_Count = 0; + RF_Decode_State = DATA_PROCESS; // 进入数据处理状态 + } + else + { + Reset_Decode_Parameters(); // 低位数据位范围不合法,重置解码参数 + } + } + break; + + case DATA_PROCESS: + Decode_Data(); // 解码数据 + if (Received_Byte_Count == 3) + { + // 接收到全部数据,包括地址和数据 + RF_Decode_State = FUNCTION_PROCESS; + } + else + { // 数据没接收完 + RF_Decode_State = HIGH_BIT; // 继续解码数据 + } + break; + + case FUNCTION_PROCESS: + Execute_Function(); // 执行功能 + Reset_Decode_Parameters(); // 重置解码参数 + break; + + default: + Reset_Decode_Parameters(); // 默认状态,重置解码参数 + break; + } +} +#endif /**----------------------------------------------------------------------------------------------** **函数名 :Reset_Decode_Parameters **功能说明:重置解码参数,用于开始新的解码周期 @@ -274,3 +373,147 @@ void Execute_Function(void) break; } } + + +uint8_t RF; +uint8_t decode_ok; //解码成功 +uint8_t hh_w,ll_w; //高,低电平宽度 +uint8_t ma_x; //接收到第几位编码了 + +uint8_t bma1,bma2,bma3,bma4; //用于接收过程存放遥控编码,编码比较两次,这是第一次 +uint8_t mma1,mma2,mma3,mma4; +uint8_t mmb1,mmb2,mmb3,mmb4; //用于接收过程存放遥控编码,第二次 +//extern uint8_t mmbl,mmb2,mmb3,mmb4; +uint8_t rf_okl,rf_ok2,rf_ok; //解码过程中的临时接收成功标志,接收到一个完整的遥控命令后置1,通知解码程序可以解码了 + +uint8_t old_rc5; //保存上一次查询到的电平状态 +uint8_t tb_ok; //接收到同步的马时置1 +uint8_t D0,D1,D2,D3; +uint16_t s,s1; + +uint8_t bt_auto; //自动设置遥控接收波特率标志 +extern uint8_t rf_data[4]; +#if 0 +#define BIT1_HIGH_US 1000 // duty cycle = +#define BIT1_LOW_US 500 // +#define BIT0_HIGH_US 400 +#define BIT0_LOW_US 1100 +#endif + +#define BIT1_HIGH_US 1000 // duty cycle = +#define BIT1_LOW_US 500 // +#define BIT0_HIGH_US 250 +#define BIT0_LOW_US 1200 +#define ENDING_LOW_US 200 +#define ENDING_HIGH_US 12000 + +//#define CNT_SHORT_US 305 // 305 usec +#define LEADING_MS 12 // 8 msec +void STS_RF_write_send_1(void) +{ + HAL_GPIO_WritePin(RF_Send_GPIO_Port, RF_Send_GPIO_Pin, SET); + + HAL_Delay_Us(BIT1_HIGH_US); + + HAL_GPIO_WritePin(RF_Send_GPIO_Port, RF_Send_GPIO_Pin, RESET); + HAL_Delay_Us(BIT1_LOW_US); +} + +void STS_RF_write_send_0(void) +{ + HAL_GPIO_WritePin(RF_Send_GPIO_Port, RF_Send_GPIO_Pin, SET); + HAL_Delay_Us(BIT0_HIGH_US); + HAL_GPIO_WritePin(RF_Send_GPIO_Port, RF_Send_GPIO_Pin, RESET); + HAL_Delay_Us(BIT0_LOW_US); +} + +void STS_RF_write_send_leading(void) +{ +#if 0 + STS_RF_write_send_1(); + STS_RF_write_send_0(); + STS_RF_write_send_1(); +#endif + + HAL_GPIO_WritePin(RF_Send_GPIO_Port, RF_Send_GPIO_Pin, RESET); + //HAL_Delay(CNT_LONG_MS); // 8 msec long low level + HAL_Delay_Us(LEADING_MS*1000); + HAL_Delay_Us(LEADING_MS*1000); + HAL_Delay_Us(LEADING_MS*1000); +} + +void STS_RF_write_send_ending(void) +{ + HAL_GPIO_WritePin(RF_Send_GPIO_Port, RF_Send_GPIO_Pin, SET); + HAL_Delay_Us(ENDING_HIGH_US); + HAL_GPIO_WritePin(RF_Send_GPIO_Port, RF_Send_GPIO_Pin, RESET); + HAL_Delay_Us(ENDING_LOW_US); +} + +void STS_RF_Send_Button_Multi_Times(uint8_t *rf_payload, uint8_t one_button, uint8_t rf_length, uint8_t mt) +{ + // normally, send 5-8 cycles of same address and cmd code + uint8_t push_button_cmd = one_button; + + for (uint8_t i=0;i< mt;i++) + { + rf_payload[2] |= ((push_button_cmd)); + printf("%d : Address=%02X:%02X:%01x CMD=%01X\r\n",i, + rf_payload[0], rf_payload[1], rf_payload[2]&0xF0, push_button_cmd); + + STS_RF_Send_AddressBit_and_CmdBit(rf_payload, rf_length); + + rf_payload[2] &= 0xF0; // cmd set to 0 + } + +} + +void STS_RF_Send_Multi_Times(uint8_t *rf_payload, uint8_t rf_length, uint8_t mt) +{ + // normally, send 5-8 cycles of same address and cmd code + // uint8_t push_button_cmd = 0x01; + + + + for (uint8_t i=0;i< mt;i++) + { + rf_payload[2] |= ((i+1) <<4); + printf("%d : Address=%02X:%02X:%01x CMD=%01X\r\n",i, rf_payload[0],rf_payload[1],rf_payload[2]&0x0F, (rf_payload[2]>>4)&0x0F); + + STS_RF_Send_AddressBit_and_CmdBit(rf_payload, rf_length); + + rf_payload[2] &= 0x0F; // cmd set to 0 + } + +} + +void STS_RF_Send_AddressBit_and_CmdBit(uint8_t *rf_payload, uint8_t rf_length) +{ + // send the combined address code and cmd code + // 20 bit address + 4 bit cmd code == 24 bits == 3 bytes + + // send leading or sync signal for receiver to sync the RX clock + // printf("leading sync signal ...\r\n"); + STS_RF_write_send_leading(); + + // printf("address bits and cmd bits ...\r\n"); + // send address and cmd code + for (uint8_t i=0; i < rf_length; i++) + { + for (uint8_t j=0; j < 8; j++) + { + // if (0x01&(rf_payload[i]>>j)) // TODO XXXX if (0x80&(rf_payload[i]< TIM1CLK = HCLK = SystemCoreClock + + External Signal Frequency = TIM1 counter clock / TIM1_CCR2 in Hz. + + External Signal DutyCycle = (TIM1_CCR1*100)/(TIM1_CCR2) in %. + + --------------------------------------------------------------------------- */ +#if 0 + /*## Start the Input Capture in interrupt mode ##########################*/ + if (HAL_TIM_IC_Start_IT(&htim1, TIM_CHANNEL_2) != HAL_OK) + { + /* Starting Error */ + Error_Handler(); + } +#endif + /*## Start the Input Capture in interrupt mode ##########################*/ + if (HAL_TIM_IC_Start_IT(&htim1, TIM_CHANNEL_1) != HAL_OK) + { + /* Starting Error */ + Error_Handler(); + } + + + + while(1) + { + switch(capture_Cnt) { + + case 0: + capture_Cnt ++; + printf("cc: %ld ", capture_Cnt); + TIM_SET_CAPTUREPOLARITY(&htim1, TIM_CHANNEL_2, TIM_INPUTCHANNELPOLARITY_RISING); + HAL_TIM_IC_Start_IT(&htim1, TIM_CHANNEL_2); // or _HAL_TIM_ENABLE(&htim1); + break; + + case 3: + high_time = capture_Buf[1] - capture_Buf[0]; // high time + printf("ht: %ld ", high_time); + // HAL_UART_Transmit(&huart2, (uint8_t*)high_time, 1, 0xffff); // print high time + HAL_Delay(1000); //delay 1 s + capture_Cnt = 0; // clear flag + break; + } + + } + + +while(1) +{ + // printf("uwF=%ld Hz\r\n", uwFrequency); + // STS_RF_Send_Multi_Times(payload, 3, 5); +} + + +#if 0 + RF_Read_TIM_init(); + + uint8_t vt=0; uint8_t codex=0; uint32_t k=0; +#endif - +#if 0 EV1527_Init(); while(1) { RF_Signal_Decode(); HAL_Delay(1/20); } +#endif #if 0 // for(i=0; i<16; i++) @@ -165,17 +308,20 @@ int main(void) #if 0 + uint8_t i; while (1) { - for(i=0; i<16; i++) + for(i=0; i<6; i++) { printf("\r\n Remote control Key down =%d \r\n", i); - //sts_rc_key(i); + sts_rc_key(i); + HAL_Delay(3000); - printf("\r\n Remote control decoded: "); - sts_rc_decoder(); + printf("\r\n Remote control decoded: %02x \r\n", codexx); + // sts_rc_decoder(); - HAL_Delay(1000); + HAL_Delay(3000); + codexx=0; } HAL_Delay(2000); @@ -199,8 +345,64 @@ int main(void) /* USER CODE END 3 */ } + +#if 0 +void RF_Read_TIM_init(void) +{ + TIM_Base_InitTypeDef TIM_Base_Init_Struct; + + NVIC_InitTypeDef NVIC_Init_Struct; + RF_Read_TIM_RCC; + TIM_Base_Init_Struct.TIM_ClockDivision = TIM_CKD_DIV1; + TIM_Base_Init_Struct.TIM_CounterMode = TIM_CounterMode_Up; + // every int trigger time = [(Tim_Period+1)*(TIM_Prescaler+1)/(SystemCoreClock)] (s) + TIM_Base_Init_Struct.Tim_Prescalar = 48 -1; + TIM_Base_Init_Struct.Tim_Period = 0xffff -1; + TIM_Base_Init_Struct.TIM_RepetitionCounter = 0; + TIM_TimeBaseInit(RF_Read_TIM_TIMx, &TIM_Init_Struct); + TIM_ITConfig(RF_Read_TIM_TIMx, TIM_IT_Update, ENABLE); +} +#endif + void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { + uint8_t single_button =0; + switch(GPIO_Pin) + { + case BUT1_Pin: + printf("Button 1 pressed, sending cmd #1 \r\n"); + //STS_RF_Send_AddressBit_and_CmdBit(rf_payload, rf_length); + // STS_RF_Send_Multi_Times(rf_payload, 3, 8); + single_button = rf_cmd[BUTTON_ON]; + STS_RF_Send_Button_Multi_Times(rf_payload, single_button, 3, 8); + break; + + case BUT2_Pin: + printf("Button 2 pressed, sending cmd #2 \r\n"); + single_button = rf_cmd[BUTTON_OFF]; + // STS_RF_Send_Multi_Times(rf_payload, 3, 5); + STS_RF_Send_Button_Multi_Times(rf_payload, single_button, 3, 8); + break; + + case BUT3_Pin: + printf("Button 3 pressed, sending cmd #3 \r\n"); + single_button = rf_cmd[BUTTON_NEXT]; + // STS_RF_Send_Multi_Times(rf_payload, 3, 5); + STS_RF_Send_Button_Multi_Times(rf_payload, single_button, 3, 8); + break; + + + case DATA_433_PIN: + + RF_Signal_Decode(); + break; + + default: + break; + } + +#if 0 + codexx =0; switch (GPIO_Pin) { case RC_D0_Pin: @@ -219,7 +421,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) codexx |= (HAL_GPIO_ReadPin(RC_D3_GPIO_Port, RC_D3_Pin)<<3); printf("[3]=%02x ",codexx); break; - +#if 0 case RC_D4_Pin: codexx |= (HAL_GPIO_ReadPin(RC_D4_GPIO_Port, RC_D4_Pin)<<4); printf("[4]=%02x ",codexx); @@ -236,6 +438,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) codexx |= (HAL_GPIO_ReadPin(RC_D7_GPIO_Port, RC_D7_Pin)<<7); printf("[7]=%02x ",codexx); break; +#endif case RC_VT_Pin: code_vt = (HAL_GPIO_ReadPin(RC_VT_GPIO_Port, RC_VT_Pin)); printf("[V]=%02x ",codexx); @@ -244,56 +447,66 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) default: break; } +#endif + } + +#if 0 void sts_rc_key(uint8_t key) { + HAL_GPIO_WritePin(RC_K0_GPIO_Port, RC_K0_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(RC_K1_GPIO_Port, RC_K1_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(RC_K2_GPIO_Port, RC_K2_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(RC_K3_GPIO_Port, RC_K3_Pin, GPIO_PIN_SET); + HAL_Delay(100); + switch (key) { case 0: - HAL_GPIO_WritePin(RC_K0_GPIO_Port, RC_K0_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(RC_K1_GPIO_Port, RC_K1_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(RC_K2_GPIO_Port, RC_K2_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(RC_K3_GPIO_Port, RC_K3_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(RC_K0_GPIO_Port, RC_K0_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(RC_K1_GPIO_Port, RC_K1_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(RC_K2_GPIO_Port, RC_K2_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(RC_K3_GPIO_Port, RC_K3_Pin, GPIO_PIN_SET); break; case 1: - HAL_GPIO_WritePin(RC_K0_GPIO_Port, RC_K0_Pin, GPIO_PIN_SET); - HAL_GPIO_WritePin(RC_K1_GPIO_Port, RC_K1_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(RC_K2_GPIO_Port, RC_K2_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(RC_K3_GPIO_Port, RC_K3_Pin, GPIO_PIN_RESET); - break; - case 2: HAL_GPIO_WritePin(RC_K0_GPIO_Port, RC_K0_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(RC_K1_GPIO_Port, RC_K1_Pin, GPIO_PIN_SET); - HAL_GPIO_WritePin(RC_K2_GPIO_Port, RC_K2_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(RC_K3_GPIO_Port, RC_K3_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(RC_K2_GPIO_Port, RC_K2_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(RC_K3_GPIO_Port, RC_K3_Pin, GPIO_PIN_SET); + break; + case 2: + HAL_GPIO_WritePin(RC_K0_GPIO_Port, RC_K0_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(RC_K1_GPIO_Port, RC_K1_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(RC_K2_GPIO_Port, RC_K2_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(RC_K3_GPIO_Port, RC_K3_Pin, GPIO_PIN_SET); break; case 3: - HAL_GPIO_WritePin(RC_K0_GPIO_Port, RC_K0_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(RC_K0_GPIO_Port, RC_K0_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(RC_K1_GPIO_Port, RC_K1_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(RC_K2_GPIO_Port, RC_K2_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(RC_K3_GPIO_Port, RC_K3_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(RC_K3_GPIO_Port, RC_K3_Pin, GPIO_PIN_SET); break; case 4: - HAL_GPIO_WritePin(RC_K0_GPIO_Port, RC_K0_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(RC_K1_GPIO_Port, RC_K1_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(RC_K2_GPIO_Port, RC_K2_Pin, GPIO_PIN_SET); - HAL_GPIO_WritePin(RC_K3_GPIO_Port, RC_K3_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(RC_K0_GPIO_Port, RC_K0_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(RC_K1_GPIO_Port, RC_K1_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(RC_K2_GPIO_Port, RC_K2_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(RC_K3_GPIO_Port, RC_K3_Pin, GPIO_PIN_SET); break; case 5: - HAL_GPIO_WritePin(RC_K0_GPIO_Port, RC_K0_Pin, GPIO_PIN_SET); - HAL_GPIO_WritePin(RC_K1_GPIO_Port, RC_K1_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(RC_K2_GPIO_Port, RC_K2_Pin, GPIO_PIN_SET); - HAL_GPIO_WritePin(RC_K3_GPIO_Port, RC_K3_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(RC_K0_GPIO_Port, RC_K0_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(RC_K1_GPIO_Port, RC_K1_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(RC_K2_GPIO_Port, RC_K2_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(RC_K3_GPIO_Port, RC_K3_Pin, GPIO_PIN_SET); break; case 6: - HAL_GPIO_WritePin(RC_K0_GPIO_Port, RC_K0_Pin, GPIO_PIN_RESET); - HAL_GPIO_WritePin(RC_K1_GPIO_Port, RC_K1_Pin, GPIO_PIN_SET); - HAL_GPIO_WritePin(RC_K2_GPIO_Port, RC_K2_Pin, GPIO_PIN_SET); - HAL_GPIO_WritePin(RC_K3_GPIO_Port, RC_K3_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(RC_K0_GPIO_Port, RC_K0_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(RC_K1_GPIO_Port, RC_K1_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(RC_K2_GPIO_Port, RC_K2_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(RC_K3_GPIO_Port, RC_K3_Pin, GPIO_PIN_SET); break; case 7: @@ -327,7 +540,7 @@ void sts_rc_decoder(void) printf("decoded x= %02x \r\n", codex); } - +#endif /** * @brief System Clock Configuration * @retval None diff --git a/Core/Src/stm32wlxx_hal_msp.c b/Core/Src/stm32wlxx_hal_msp.c index b476669..7d0ab63 100644 --- a/Core/Src/stm32wlxx_hal_msp.c +++ b/Core/Src/stm32wlxx_hal_msp.c @@ -73,6 +73,83 @@ void HAL_MspInit(void) /* USER CODE END MspInit 1 */ } + +/** +* @brief TIM_Base MSP Initialization +* This function configures the hardware resources used in this example +* @param htim_base: TIM_Base handle pointer +* @retval None +*/ +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(htim_base->Instance==TIM1) + { + /* USER CODE BEGIN TIM1_MspInit 0 */ + + /* USER CODE END TIM1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM1_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**TIM1 GPIO Configuration + PA9 ------> TIM1_CH2 + */ + GPIO_InitStruct.Pin = GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF1_TIM1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* TIM1 interrupt Init */ + HAL_NVIC_SetPriority(TIM1_BRK_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM1_BRK_IRQn); + HAL_NVIC_SetPriority(TIM1_UP_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM1_UP_IRQn); + HAL_NVIC_SetPriority(TIM1_TRG_COM_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM1_TRG_COM_IRQn); + HAL_NVIC_SetPriority(TIM1_CC_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM1_CC_IRQn); + /* USER CODE BEGIN TIM1_MspInit 1 */ + + /* USER CODE END TIM1_MspInit 1 */ + } + +} + +/** +* @brief TIM_Base MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param htim_base: TIM_Base handle pointer +* @retval None +*/ +void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) +{ + if(htim_base->Instance==TIM1) + { + /* USER CODE BEGIN TIM1_MspDeInit 0 */ + + /* USER CODE END TIM1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM1_CLK_DISABLE(); + + /**TIM1 GPIO Configuration + PA9 ------> TIM1_CH2 + */ + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9); + + /* TIM1 interrupt DeInit */ + HAL_NVIC_DisableIRQ(TIM1_BRK_IRQn); + HAL_NVIC_DisableIRQ(TIM1_UP_IRQn); + HAL_NVIC_DisableIRQ(TIM1_TRG_COM_IRQn); + HAL_NVIC_DisableIRQ(TIM1_CC_IRQn); + /* USER CODE BEGIN TIM1_MspDeInit 1 */ + + /* USER CODE END TIM1_MspDeInit 1 */ + } + +} /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ diff --git a/Core/Src/stm32wlxx_it.c b/Core/Src/stm32wlxx_it.c index 9c438b4..8d38229 100644 --- a/Core/Src/stm32wlxx_it.c +++ b/Core/Src/stm32wlxx_it.c @@ -20,6 +20,7 @@ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "stm32wlxx_it.h" +extern volatile uint32_t TIM1_cnt; // #include "app_tof_pin_conf.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ @@ -61,6 +62,9 @@ extern SUBGHZ_HandleTypeDef hsubghz; extern DMA_HandleTypeDef hdma_usart2_tx; extern UART_HandleTypeDef huart2; extern UART_HandleTypeDef huart1; + +extern TIM_HandleTypeDef htim1; + /* USER CODE BEGIN EV */ // extern DMA_HandleTypeDef hdma_i2c2_rx; @@ -220,7 +224,7 @@ void TAMP_STAMP_LSECSS_SSRU_IRQHandler(void) /* USER CODE END TAMP_STAMP_LSECSS_SSRU_IRQn 1 */ } - +#if 1 /** * @brief This function handles EXTI Line 0 Interrupt. */ @@ -243,18 +247,22 @@ void EXTI1_IRQHandler(void) /* USER CODE BEGIN EXTI1_IRQn 0 */ /* USER CODE END EXTI1_IRQn 0 */ - HAL_GPIO_EXTI_IRQHandler(RC_D0_Pin); + HAL_GPIO_EXTI_IRQHandler(BUT2_Pin); + // HAL_GPIO_EXTI_IRQHandler(RC_D0_Pin); + // __HAL_GPIO_EXTI_CLEAR_IT(RC_D0_Pin); /* USER CODE BEGIN EXTI1_IRQn 1 */ /* USER CODE END EXTI1_IRQn 1 */ } - +#endif +#if 0 void EXTI2_IRQHandler(void) { /* USER CODE BEGIN EXTI1_IRQn 0 */ /* USER CODE END EXTI1_IRQn 0 */ HAL_GPIO_EXTI_IRQHandler(RC_D1_Pin); + __HAL_GPIO_EXTI_CLEAR_IT(RC_D1_Pin); /* USER CODE BEGIN EXTI1_IRQn 1 */ /* USER CODE END EXTI1_IRQn 1 */ @@ -266,6 +274,7 @@ void EXTI3_IRQHandler(void) /* USER CODE END EXTI1_IRQn 0 */ HAL_GPIO_EXTI_IRQHandler(RC_D6_Pin); + __HAL_GPIO_EXTI_CLEAR_IT(RC_D6_Pin); /* USER CODE BEGIN EXTI1_IRQn 1 */ /* USER CODE END EXTI1_IRQn 1 */ @@ -281,11 +290,12 @@ void EXTI4_IRQHandler(void) /* USER CODE END EXTI1_IRQn 0 */ //HAL_GPIO_EXTI_IRQHandler(TOF_INT_EXTI_PIN); HAL_GPIO_EXTI_IRQHandler(RC_D2_Pin); + __HAL_GPIO_EXTI_CLEAR_IT(RC_D2_Pin); /* USER CODE BEGIN EXTI1_IRQn 1 */ /* USER CODE END EXTI1_IRQn 1 */ } - +#endif /** * @brief This function handles DMA1 Channel 4 Interrupt. */ @@ -341,7 +351,7 @@ void DMA1_Channel7_IRQHandler(void) /* USER CODE END DMA1_Channel7_IRQn 1 */ } - +#if 1 /** * @brief This function handles EXTI Lines [9:5] Interrupt. */ @@ -350,14 +360,26 @@ void EXTI9_5_IRQHandler(void) /* USER CODE BEGIN EXTI9_5_IRQn 0 */ /* USER CODE END EXTI9_5_IRQn 0 */ +#if 0 HAL_GPIO_EXTI_IRQHandler(RC_D4_Pin); HAL_GPIO_EXTI_IRQHandler(RC_D5_Pin); HAL_GPIO_EXTI_IRQHandler(DATA_433_PIN); + + __HAL_GPIO_EXTI_CLEAR_IT(RC_D4_Pin); + __HAL_GPIO_EXTI_CLEAR_IT(RC_D5_Pin); +#endif + + HAL_GPIO_EXTI_IRQHandler(BUT3_Pin); + + HAL_GPIO_EXTI_IRQHandler(DATA_433_PIN); + __HAL_GPIO_EXTI_CLEAR_IT(DATA_433_PIN); + /* USER CODE BEGIN EXTI9_5_IRQn 1 */ /* USER CODE END EXTI9_5_IRQn 1 */ } - +#endif +#if 0 /** * @brief This function handles EXTI Lines [15:10] Interrupt. */ @@ -369,12 +391,16 @@ void EXTI15_10_IRQHandler(void) HAL_GPIO_EXTI_IRQHandler(RC_D3_Pin); HAL_GPIO_EXTI_IRQHandler(RC_D7_Pin); HAL_GPIO_EXTI_IRQHandler(RC_VT_Pin); + + __HAL_GPIO_EXTI_CLEAR_IT(RC_D3_Pin); + __HAL_GPIO_EXTI_CLEAR_IT(RC_D7_Pin); + // __HAL_GPIO_EXTI_CLEAR_IT(RC_VT_Pin); // HAL_GPIO_EXTI_IRQHandler(TOF_INT_EXTI_PIN); /* USER CODE BEGIN EXTI15_10_IRQn 1 */ /* USER CODE END EXTI15_10_IRQn 1 */ } - +#endif /** * @brief This function handles USART2 Interrupt. */ @@ -434,4 +460,39 @@ void SUBGHZ_Radio_IRQHandler(void) /* USER CODE BEGIN 1 */ +void TIM1_IRQHandler(void) +{ + HAL_TIM_IRQHandler(&htim1); +} +/** + * @brief This function handles TIM1 Capture Compare Interrupt. + */ +void TIM1_CC_IRQHandler(void) +{ + /* USER CODE BEGIN TIM1_CC_IRQn 0 */ + + /* USER CODE END TIM1_CC_IRQn 0 */ + HAL_TIM_IRQHandler(&htim1); + TIM1_cnt++; + /* USER CODE BEGIN TIM1_CC_IRQn 1 */ + + /* USER CODE END TIM1_CC_IRQn 1 */ +} + +/** + * @brief This function handles TIM1 Capture Compare Interrupt. + */ +void TIM1_IC_IRQHandler(void) +{ + /* USER CODE BEGIN TIM1_CC_IRQn 0 */ + + /* USER CODE END TIM1_CC_IRQn 0 */ + HAL_TIM_IRQHandler(&htim1); + TIM1_cnt++; + /* USER CODE BEGIN TIM1_CC_IRQn 1 */ + + /* USER CODE END TIM1_CC_IRQn 1 */ +} + + /* USER CODE END 1 */ diff --git a/Core/Src/sys_app.c b/Core/Src/sys_app.c index 41c09e0..1fc1cd1 100644 --- a/Core/Src/sys_app.c +++ b/Core/Src/sys_app.c @@ -383,5 +383,88 @@ void HAL_Delay(__IO uint32_t Delay) } /* USER CODE BEGIN Overload_HAL_weaks */ +/** + * @note This function overwrites the __weak one from HAL + */ +void HAL_Delay_Us(uint32_t uDelay) +{ +#if 0 + uint32_t startval, tickn, delays, wait; + startval = SysTick->VAL; + tickn = HAL_GetTick(); + delays = uDelay * 48; + if (delays > startval) + { + while (HAL_GetTick() == tickn) {} + wait = 48000 + startval -delays; + while (wait < SysTick->VAL) {}; + + }else { + wait = startval - delays; + while(wait < SysTick->VAL && HAL_GetTick() == tickn) + { + + } + } +#endif +#if 0 + uint32_t g_fac_us=48; + uint32_t ticks; + uint32_t told, tnow, tcnt =0; + uint32_t reload = SysTick->LOAD; + + ticks = uDelay * g_fac_us; + + told = SysTick->VAL; + + while(1) + { + tnow = SysTick->VAL; + if (tnow != told) + { + if (tnow < told) + { + tcnt += told -tnow; + } else { + tcnt += reload - tnow + told; + } + told = tnow; + if (tcnt >= ticks) + { + break; + } + } + } + +#endif + + +#if 1 + __IO uint32_t delay= uDelay*48/8; + do {__NOP();} while(delay --); +#endif +#if 0 + /* TIMER_IF can be based on other counter the SysTick e.g. RTC */ + /* USER CODE BEGIN HAL_Delay_1 */ +uint32_t startval, tickn, delays, wait; +startval = SysTick->VAL; +tickn = HAL_GetTick(); +// sysclock = 48000 +delays = uDelay*48; +if (delays > startval) +{ + while(HAL_GetTick() == tickn) ; + wait = 48000 + startval - delays; + while(wait < SysTick->VAL) ; +} else { + wait = startval - delays; + while (wait < SysTick->VAL && HAL_GetTick() == tickn) ; +} + /* USER CODE END HAL_Delay_1 */ +#endif + /* USER CODE BEGIN HAL_Delay_2 */ + + /* USER CODE END HAL_Delay_2 */ +} /* USER CODE END Overload_HAL_weaks */ diff --git a/STM32CubeIDE/.project b/STM32CubeIDE/.project index 122c4b9..239a058 100644 --- a/STM32CubeIDE/.project +++ b/STM32CubeIDE/.project @@ -502,6 +502,11 @@ 1 copy_PARENT/Core/Src/sys_sensors.c + + Application/User/Core/tim.c + 1 + PARENT-1-PROJECT_LOC/Core/Src/tim.c + Application/User/Core/timer_if.c 1 diff --git a/STM32CubeIDE/Release/Application/User/Core/subdir.mk b/STM32CubeIDE/Release/Application/User/Core/subdir.mk index 05bcc6d..69777cc 100644 --- a/STM32CubeIDE/Release/Application/User/Core/subdir.mk +++ b/STM32CubeIDE/Release/Application/User/Core/subdir.mk @@ -25,6 +25,7 @@ D:/ONEDRIVE/STM32WLV13/Projects/NUCLEO-WL55JC/Applications/LoRaWAN/LoRaWAN_End_N D:/ONEDRIVE/STM32WLV13/Projects/NUCLEO-WL55JC/Applications/LoRaWAN/LoRaWAN_End_Node_55JC_AS923/Core/Src/sys_sensors.c \ ../Application/User/Core/syscalls.c \ ../Application/User/Core/sysmem.c \ +D:/ONEDRIVE/STM32WLV13/Projects/NUCLEO-WL55JC/Applications/LoRaWAN/LoRaWAN_End_Node_55JC_AS923/Core/Src/tim.c \ D:/ONEDRIVE/STM32WLV13/Projects/NUCLEO-WL55JC/Applications/LoRaWAN/LoRaWAN_End_Node_55JC_AS923/Core/Src/timer_if.c \ D:/ONEDRIVE/STM32WLV13/Projects/NUCLEO-WL55JC/Applications/LoRaWAN/LoRaWAN_End_Node_55JC_AS923/Core/Src/usart.c \ D:/ONEDRIVE/STM32WLV13/Projects/NUCLEO-WL55JC/Applications/LoRaWAN/LoRaWAN_End_Node_55JC_AS923/Core/Src/usart_if.c @@ -50,6 +51,7 @@ OBJS += \ ./Application/User/Core/sys_sensors.o \ ./Application/User/Core/syscalls.o \ ./Application/User/Core/sysmem.o \ +./Application/User/Core/tim.o \ ./Application/User/Core/timer_if.o \ ./Application/User/Core/usart.o \ ./Application/User/Core/usart_if.o @@ -75,6 +77,7 @@ C_DEPS += \ ./Application/User/Core/sys_sensors.d \ ./Application/User/Core/syscalls.d \ ./Application/User/Core/sysmem.d \ +./Application/User/Core/tim.d \ ./Application/User/Core/timer_if.d \ ./Application/User/Core/usart.d \ ./Application/User/Core/usart_if.d @@ -119,6 +122,8 @@ Application/User/Core/sys_sensors.o: D:/ONEDRIVE/STM32WLV13/Projects/NUCLEO-WL55 arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -DYUNHORN_STS_RANDOM -DRC -DCORE_CM4 -DUSE_HAL_DRIVER -DSTM32WL55xx -c -I../../Core/Inc -I../../LoRaWAN/App -I../../TOF/Target -I../../TOF/App -I../../LoRaWAN/Target -I../../../../../../../Drivers/STM32WLxx_HAL_Driver/Inc -I../../../../../../../Drivers/STM32WLxx_HAL_Driver/Inc/Legacy -I../../../../../../../Utilities/trace/adv_trace -I../../../../../../../Utilities/misc -I../../../../../../../Utilities/sequencer -I../../../../../../../Utilities/timer -I../../../../../../../Utilities/lpm/tiny_lpm -I../../../../../../../Middlewares/Third_Party/LoRaWAN/LmHandler/Packages -I../../../../../../../Drivers/CMSIS/Device/ST/STM32WLxx/Include -I../../../../../../../Middlewares/Third_Party/LoRaWAN/Crypto -I../../../../../../../Middlewares/Third_Party/LoRaWAN/Mac/Region -I../../../../../../../Middlewares/Third_Party/LoRaWAN/Mac -I../../../../../../../Middlewares/Third_Party/LoRaWAN/LmHandler -I../../../../../../../Middlewares/Third_Party/LoRaWAN/Utilities -I../../../../../../../Middlewares/Third_Party/SubGHz_Phy -I../../../../../../../Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver -I../../../../../../../Drivers/CMSIS/Include -I../../../../../../../Drivers/BSP/STM32WLxx_Nucleo -I../../../../../../../Drivers/BSP/Components/vl53l8cx/porting -I../../../../../../../Drivers/BSP/Components/Common -I../../../../../../../Drivers/BSP/53L8A1 -I../../../../../../../Drivers/BSP/Components/vl53l8cx/modules -I../../../../../../../Drivers/BSP/Components/vl53l8cx -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfloat-abi=soft -mthumb -o "$@" Application/User/Core/%.o Application/User/Core/%.su Application/User/Core/%.cyclo: ../Application/User/Core/%.c Application/User/Core/subdir.mk arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -DYUNHORN_STS_RANDOM -DRC -DCORE_CM4 -DUSE_HAL_DRIVER -DSTM32WL55xx -c -I../../Core/Inc -I../../LoRaWAN/App -I../../TOF/Target -I../../TOF/App -I../../LoRaWAN/Target -I../../../../../../../Drivers/STM32WLxx_HAL_Driver/Inc -I../../../../../../../Drivers/STM32WLxx_HAL_Driver/Inc/Legacy -I../../../../../../../Utilities/trace/adv_trace -I../../../../../../../Utilities/misc -I../../../../../../../Utilities/sequencer -I../../../../../../../Utilities/timer -I../../../../../../../Utilities/lpm/tiny_lpm -I../../../../../../../Middlewares/Third_Party/LoRaWAN/LmHandler/Packages -I../../../../../../../Drivers/CMSIS/Device/ST/STM32WLxx/Include -I../../../../../../../Middlewares/Third_Party/LoRaWAN/Crypto -I../../../../../../../Middlewares/Third_Party/LoRaWAN/Mac/Region -I../../../../../../../Middlewares/Third_Party/LoRaWAN/Mac -I../../../../../../../Middlewares/Third_Party/LoRaWAN/LmHandler -I../../../../../../../Middlewares/Third_Party/LoRaWAN/Utilities -I../../../../../../../Middlewares/Third_Party/SubGHz_Phy -I../../../../../../../Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver -I../../../../../../../Drivers/CMSIS/Include -I../../../../../../../Drivers/BSP/STM32WLxx_Nucleo -I../../../../../../../Drivers/BSP/Components/vl53l8cx/porting -I../../../../../../../Drivers/BSP/Components/Common -I../../../../../../../Drivers/BSP/53L8A1 -I../../../../../../../Drivers/BSP/Components/vl53l8cx/modules -I../../../../../../../Drivers/BSP/Components/vl53l8cx -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfloat-abi=soft -mthumb -o "$@" +Application/User/Core/tim.o: D:/ONEDRIVE/STM32WLV13/Projects/NUCLEO-WL55JC/Applications/LoRaWAN/LoRaWAN_End_Node_55JC_AS923/Core/Src/tim.c Application/User/Core/subdir.mk + arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -DYUNHORN_STS_RANDOM -DRC -DCORE_CM4 -DUSE_HAL_DRIVER -DSTM32WL55xx -c -I../../Core/Inc -I../../LoRaWAN/App -I../../TOF/Target -I../../TOF/App -I../../LoRaWAN/Target -I../../../../../../../Drivers/STM32WLxx_HAL_Driver/Inc -I../../../../../../../Drivers/STM32WLxx_HAL_Driver/Inc/Legacy -I../../../../../../../Utilities/trace/adv_trace -I../../../../../../../Utilities/misc -I../../../../../../../Utilities/sequencer -I../../../../../../../Utilities/timer -I../../../../../../../Utilities/lpm/tiny_lpm -I../../../../../../../Middlewares/Third_Party/LoRaWAN/LmHandler/Packages -I../../../../../../../Drivers/CMSIS/Device/ST/STM32WLxx/Include -I../../../../../../../Middlewares/Third_Party/LoRaWAN/Crypto -I../../../../../../../Middlewares/Third_Party/LoRaWAN/Mac/Region -I../../../../../../../Middlewares/Third_Party/LoRaWAN/Mac -I../../../../../../../Middlewares/Third_Party/LoRaWAN/LmHandler -I../../../../../../../Middlewares/Third_Party/LoRaWAN/Utilities -I../../../../../../../Middlewares/Third_Party/SubGHz_Phy -I../../../../../../../Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver -I../../../../../../../Drivers/CMSIS/Include -I../../../../../../../Drivers/BSP/STM32WLxx_Nucleo -I../../../../../../../Drivers/BSP/Components/vl53l8cx/porting -I../../../../../../../Drivers/BSP/Components/Common -I../../../../../../../Drivers/BSP/53L8A1 -I../../../../../../../Drivers/BSP/Components/vl53l8cx/modules -I../../../../../../../Drivers/BSP/Components/vl53l8cx -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfloat-abi=soft -mthumb -o "$@" Application/User/Core/timer_if.o: D:/ONEDRIVE/STM32WLV13/Projects/NUCLEO-WL55JC/Applications/LoRaWAN/LoRaWAN_End_Node_55JC_AS923/Core/Src/timer_if.c Application/User/Core/subdir.mk arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -DYUNHORN_STS_RANDOM -DRC -DCORE_CM4 -DUSE_HAL_DRIVER -DSTM32WL55xx -c -I../../Core/Inc -I../../LoRaWAN/App -I../../TOF/Target -I../../TOF/App -I../../LoRaWAN/Target -I../../../../../../../Drivers/STM32WLxx_HAL_Driver/Inc -I../../../../../../../Drivers/STM32WLxx_HAL_Driver/Inc/Legacy -I../../../../../../../Utilities/trace/adv_trace -I../../../../../../../Utilities/misc -I../../../../../../../Utilities/sequencer -I../../../../../../../Utilities/timer -I../../../../../../../Utilities/lpm/tiny_lpm -I../../../../../../../Middlewares/Third_Party/LoRaWAN/LmHandler/Packages -I../../../../../../../Drivers/CMSIS/Device/ST/STM32WLxx/Include -I../../../../../../../Middlewares/Third_Party/LoRaWAN/Crypto -I../../../../../../../Middlewares/Third_Party/LoRaWAN/Mac/Region -I../../../../../../../Middlewares/Third_Party/LoRaWAN/Mac -I../../../../../../../Middlewares/Third_Party/LoRaWAN/LmHandler -I../../../../../../../Middlewares/Third_Party/LoRaWAN/Utilities -I../../../../../../../Middlewares/Third_Party/SubGHz_Phy -I../../../../../../../Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver -I../../../../../../../Drivers/CMSIS/Include -I../../../../../../../Drivers/BSP/STM32WLxx_Nucleo -I../../../../../../../Drivers/BSP/Components/vl53l8cx/porting -I../../../../../../../Drivers/BSP/Components/Common -I../../../../../../../Drivers/BSP/53L8A1 -I../../../../../../../Drivers/BSP/Components/vl53l8cx/modules -I../../../../../../../Drivers/BSP/Components/vl53l8cx -Os -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfloat-abi=soft -mthumb -o "$@" Application/User/Core/usart.o: D:/ONEDRIVE/STM32WLV13/Projects/NUCLEO-WL55JC/Applications/LoRaWAN/LoRaWAN_End_Node_55JC_AS923/Core/Src/usart.c Application/User/Core/subdir.mk @@ -129,7 +134,7 @@ Application/User/Core/usart_if.o: D:/ONEDRIVE/STM32WLV13/Projects/NUCLEO-WL55JC/ clean: clean-Application-2f-User-2f-Core clean-Application-2f-User-2f-Core: - -$(RM) ./Application/User/Core/adc.cyclo ./Application/User/Core/adc.d ./Application/User/Core/adc.o ./Application/User/Core/adc.su ./Application/User/Core/adc_if.cyclo ./Application/User/Core/adc_if.d ./Application/User/Core/adc_if.o ./Application/User/Core/adc_if.su ./Application/User/Core/dma.cyclo ./Application/User/Core/dma.d ./Application/User/Core/dma.o ./Application/User/Core/dma.su ./Application/User/Core/ev1527.cyclo ./Application/User/Core/ev1527.d ./Application/User/Core/ev1527.o ./Application/User/Core/ev1527.su ./Application/User/Core/flash_if.cyclo ./Application/User/Core/flash_if.d ./Application/User/Core/flash_if.o ./Application/User/Core/flash_if.su ./Application/User/Core/gpio.cyclo ./Application/User/Core/gpio.d ./Application/User/Core/gpio.o ./Application/User/Core/gpio.su ./Application/User/Core/main.cyclo ./Application/User/Core/main.d ./Application/User/Core/main.o ./Application/User/Core/main.su ./Application/User/Core/rtc.cyclo ./Application/User/Core/rtc.d ./Application/User/Core/rtc.o ./Application/User/Core/rtc.su ./Application/User/Core/sensirion_common.cyclo ./Application/User/Core/sensirion_common.d ./Application/User/Core/sensirion_common.o ./Application/User/Core/sensirion_common.su ./Application/User/Core/sht3x.cyclo ./Application/User/Core/sht3x.d ./Application/User/Core/sht3x.o ./Application/User/Core/sht3x.su ./Application/User/Core/stm32_lpm_if.cyclo ./Application/User/Core/stm32_lpm_if.d ./Application/User/Core/stm32_lpm_if.o ./Application/User/Core/stm32_lpm_if.su ./Application/User/Core/stm32wlxx_hal_msp.cyclo ./Application/User/Core/stm32wlxx_hal_msp.d ./Application/User/Core/stm32wlxx_hal_msp.o ./Application/User/Core/stm32wlxx_hal_msp.su ./Application/User/Core/stm32wlxx_it.cyclo ./Application/User/Core/stm32wlxx_it.d ./Application/User/Core/stm32wlxx_it.o ./Application/User/Core/stm32wlxx_it.su ./Application/User/Core/sts_aq_o3.cyclo ./Application/User/Core/sts_aq_o3.d ./Application/User/Core/sts_aq_o3.o ./Application/User/Core/sts_aq_o3.su ./Application/User/Core/subghz.cyclo ./Application/User/Core/subghz.d ./Application/User/Core/subghz.o ./Application/User/Core/subghz.su ./Application/User/Core/sys_app.cyclo ./Application/User/Core/sys_app.d ./Application/User/Core/sys_app.o ./Application/User/Core/sys_app.su ./Application/User/Core/sys_debug.cyclo ./Application/User/Core/sys_debug.d ./Application/User/Core/sys_debug.o ./Application/User/Core/sys_debug.su ./Application/User/Core/sys_sensors.cyclo ./Application/User/Core/sys_sensors.d ./Application/User/Core/sys_sensors.o ./Application/User/Core/sys_sensors.su ./Application/User/Core/syscalls.cyclo ./Application/User/Core/syscalls.d ./Application/User/Core/syscalls.o ./Application/User/Core/syscalls.su ./Application/User/Core/sysmem.cyclo ./Application/User/Core/sysmem.d ./Application/User/Core/sysmem.o ./Application/User/Core/sysmem.su ./Application/User/Core/timer_if.cyclo ./Application/User/Core/timer_if.d ./Application/User/Core/timer_if.o ./Application/User/Core/timer_if.su ./Application/User/Core/usart.cyclo ./Application/User/Core/usart.d ./Application/User/Core/usart.o ./Application/User/Core/usart.su ./Application/User/Core/usart_if.cyclo ./Application/User/Core/usart_if.d ./Application/User/Core/usart_if.o ./Application/User/Core/usart_if.su + -$(RM) ./Application/User/Core/adc.cyclo ./Application/User/Core/adc.d ./Application/User/Core/adc.o ./Application/User/Core/adc.su ./Application/User/Core/adc_if.cyclo ./Application/User/Core/adc_if.d ./Application/User/Core/adc_if.o ./Application/User/Core/adc_if.su ./Application/User/Core/dma.cyclo ./Application/User/Core/dma.d ./Application/User/Core/dma.o ./Application/User/Core/dma.su ./Application/User/Core/ev1527.cyclo ./Application/User/Core/ev1527.d ./Application/User/Core/ev1527.o ./Application/User/Core/ev1527.su ./Application/User/Core/flash_if.cyclo ./Application/User/Core/flash_if.d ./Application/User/Core/flash_if.o ./Application/User/Core/flash_if.su ./Application/User/Core/gpio.cyclo ./Application/User/Core/gpio.d ./Application/User/Core/gpio.o ./Application/User/Core/gpio.su ./Application/User/Core/main.cyclo ./Application/User/Core/main.d ./Application/User/Core/main.o ./Application/User/Core/main.su ./Application/User/Core/rtc.cyclo ./Application/User/Core/rtc.d ./Application/User/Core/rtc.o ./Application/User/Core/rtc.su ./Application/User/Core/sensirion_common.cyclo ./Application/User/Core/sensirion_common.d ./Application/User/Core/sensirion_common.o ./Application/User/Core/sensirion_common.su ./Application/User/Core/sht3x.cyclo ./Application/User/Core/sht3x.d ./Application/User/Core/sht3x.o ./Application/User/Core/sht3x.su ./Application/User/Core/stm32_lpm_if.cyclo ./Application/User/Core/stm32_lpm_if.d ./Application/User/Core/stm32_lpm_if.o ./Application/User/Core/stm32_lpm_if.su ./Application/User/Core/stm32wlxx_hal_msp.cyclo ./Application/User/Core/stm32wlxx_hal_msp.d ./Application/User/Core/stm32wlxx_hal_msp.o ./Application/User/Core/stm32wlxx_hal_msp.su ./Application/User/Core/stm32wlxx_it.cyclo ./Application/User/Core/stm32wlxx_it.d ./Application/User/Core/stm32wlxx_it.o ./Application/User/Core/stm32wlxx_it.su ./Application/User/Core/sts_aq_o3.cyclo ./Application/User/Core/sts_aq_o3.d ./Application/User/Core/sts_aq_o3.o ./Application/User/Core/sts_aq_o3.su ./Application/User/Core/subghz.cyclo ./Application/User/Core/subghz.d ./Application/User/Core/subghz.o ./Application/User/Core/subghz.su ./Application/User/Core/sys_app.cyclo ./Application/User/Core/sys_app.d ./Application/User/Core/sys_app.o ./Application/User/Core/sys_app.su ./Application/User/Core/sys_debug.cyclo ./Application/User/Core/sys_debug.d ./Application/User/Core/sys_debug.o ./Application/User/Core/sys_debug.su ./Application/User/Core/sys_sensors.cyclo ./Application/User/Core/sys_sensors.d ./Application/User/Core/sys_sensors.o ./Application/User/Core/sys_sensors.su ./Application/User/Core/syscalls.cyclo ./Application/User/Core/syscalls.d ./Application/User/Core/syscalls.o ./Application/User/Core/syscalls.su ./Application/User/Core/sysmem.cyclo ./Application/User/Core/sysmem.d ./Application/User/Core/sysmem.o ./Application/User/Core/sysmem.su ./Application/User/Core/tim.cyclo ./Application/User/Core/tim.d ./Application/User/Core/tim.o ./Application/User/Core/tim.su ./Application/User/Core/timer_if.cyclo ./Application/User/Core/timer_if.d ./Application/User/Core/timer_if.o ./Application/User/Core/timer_if.su ./Application/User/Core/usart.cyclo ./Application/User/Core/usart.d ./Application/User/Core/usart.o ./Application/User/Core/usart.su ./Application/User/Core/usart_if.cyclo ./Application/User/Core/usart_if.d ./Application/User/Core/usart_if.o ./Application/User/Core/usart_if.su .PHONY: clean-Application-2f-User-2f-Core diff --git a/STM32CubeIDE/Release/WL55JC_AS923.elf b/STM32CubeIDE/Release/WL55JC_AS923.elf index c164c910af45e71be8d389bd20231ed170118507..aa7371c0c25112d8cdf52189f08fe0dedfdee6d3 100644 GIT binary patch delta 27735 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 delta 32728 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 Y7h2MZDix@8#_O2jq=2SO5S3 diff --git a/STM32CubeIDE/Release/objects.list b/STM32CubeIDE/Release/objects.list index 0fc1b3a..429760c 100644 --- a/STM32CubeIDE/Release/objects.list +++ b/STM32CubeIDE/Release/objects.list @@ -18,6 +18,7 @@ "./Application/User/Core/sys_sensors.o" "./Application/User/Core/syscalls.o" "./Application/User/Core/sysmem.o" +"./Application/User/Core/tim.o" "./Application/User/Core/timer_if.o" "./Application/User/Core/usart.o" "./Application/User/Core/usart_if.o"