diff --git a/py_project/Core/Modbus/crc_algs.c b/py_project/Core/Modbus/crc_algs.c index 0abdb97..af5d38c 100644 --- a/py_project/Core/Modbus/crc_algs.c +++ b/py_project/Core/Modbus/crc_algs.c @@ -1,13 +1,6 @@ #include "crc_algs.h" -uint32_t CRC_calc; -uint32_t CRC_ref; - -//uint16_t CRC_calc; -//uint16_t CRC_ref; - - /*Table of CRC values for high order byte*/ const unsigned char auchCRCHi[]= diff --git a/py_project/Core/Modbus/crc_algs.h b/py_project/Core/Modbus/crc_algs.h index 5957880..9982ebd 100644 --- a/py_project/Core/Modbus/crc_algs.h +++ b/py_project/Core/Modbus/crc_algs.h @@ -1,4 +1,4 @@ -#include "mylibs_include.h" +#include "main.h" // extern here to use in bootloader.c extern uint32_t CRC_calc; diff --git a/py_project/Core/Modbus/modbus.c b/py_project/Core/Modbus/modbus.c index 3d9f8a7..eb8e672 100644 --- a/py_project/Core/Modbus/modbus.c +++ b/py_project/Core/Modbus/modbus.c @@ -88,7 +88,7 @@ UART_SettingsTypeDef modbus1_suart; TIM_SettingsTypeDef modbus1_stim; #else extern UART_HandleTypeDef rs_huart; -extern TIM_HandleTypeDef rs_htim; +//extern TIM_HandleTypeDef rs_htim; #endif RS_HandleTypeDef hmodbus1; @@ -136,7 +136,7 @@ void MODBUS_FirstInit(void) #ifdef INCLUDE_GENERAL_PERIPH_LIBS hmodbus1.RS_STATUS = RS_Init(&hmodbus1, &modbus1_suart, &modbus1_stim, 0); #else - hmodbus1.RS_STATUS = RS_Init(&hmodbus1, &rs_huart, &rs_htim, 0); + hmodbus1.RS_STATUS = RS_Init(&hmodbus1, &rs_huart, NULL, 0); #endif RS_EnableReceive(); @@ -738,12 +738,12 @@ RS_StatusTypeDef RS_Response(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_ms if(hmodbus->f.MessageHandled == 0) { - TrackerCnt_Err(hmodbus->rs_err); + modbus_msg->Func_Code += ERR_VALUES_START; } else { - TrackerCnt_Ok(hmodbus->rs_err); + } @@ -798,7 +798,7 @@ RS_StatusTypeDef RS_Collect_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *mo if (modbus_msg->ByteCnt > DATA_SIZE*2) // if ByteCnt less than DATA_SIZE { - TrackerCnt_Err(hmodbus->rs_err); + return RS_COLLECT_MSG_ERR; } @@ -820,7 +820,7 @@ RS_StatusTypeDef RS_Collect_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *mo modbus_uart_buff[ind++] = modbus_msg->ByteCnt; else // otherwise return data_size err { - TrackerCnt_Err(hmodbus->rs_err); + return RS_COLLECT_MSG_ERR; } @@ -908,7 +908,7 @@ RS_StatusTypeDef RS_Parse_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modb //check that data size is correct if (modbus_msg->ByteCnt > DATA_SIZE*2) { - TrackerCnt_Err(hmodbus->rs_err); + modbus_msg->Func_Code += ERR_VALUES_START; return RS_PARSE_MSG_ERR; } @@ -935,7 +935,7 @@ RS_StatusTypeDef RS_Parse_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modb // compare crc if (modbus_msg->MB_CRC != CRC_VALUE) { - TrackerCnt_Err(hmodbus->rs_err); + modbus_msg->Func_Code += ERR_VALUES_START; } // hmodbus->MB_RESPONSE = MB_CRC_ERR; // set func code - error about wrong crc diff --git a/py_project/Core/Modbus/modbus.h b/py_project/Core/Modbus/modbus.h index ce2725d..a5a8cad 100644 --- a/py_project/Core/Modbus/modbus.h +++ b/py_project/Core/Modbus/modbus.h @@ -12,7 +12,7 @@ #ifndef __MODBUS_H_ #define __MODBUS_H_ -#include "mylibs_include.h" +#include "main.h" #include "modbus_data.h" //#include "settings.h" // for modbus settings @@ -330,7 +330,44 @@ uint8_t MB_Write_Miltuple_Regs(RS_MsgTypeDef *modbus_msg); * @} */ /////////////////////////---FUNCTIONS---///////////////////////////// - + /*************************************************************************** +*******************************MATH_DEFINES********************************/ +/** + * @addtogroup MATH_DEFINES Math defines + * @ingroup MYLIBS_DEFINES + * @brief Дефайны для различных математических функций + @{ + */ + +/** + * @brief Calc dividing including remainder + * @param _val_ - делимое. + * @param _div_ - делитель. + * @details Если результат деления без остатка: он возвращается как есть + Если с остатком - округляется вверх + */ +//#define Divide_Up(_val_, _div_) (((_val_)%(_div_))? (_val_)/(_div_)+1 : (_val_)/_div_) /* через тернарный оператор */ +#define Divide_Up(_val_, _div_) ((_val_ - 1) / _div_) + 1 /* через мат выражение */ + +/** + * @brief Swap between Little Endian and Big Endian + * @param v - Переменная для свапа. + * @return v (new) - Свапнутая переменная. + * @details Переключения между двумя типами хранения слова: HI-LO байты и LO-HI байты. + */ +#define ByteSwap16(v) (((v&0xFF00) >> (8)) | ((v&0x00FF) << (8))) + +/** + * @brief Absolute + * @param x - Переменная для модудя. + * @return x (new) - Число по модулю. + * @details Берет число по модулю. Хз как работает библиотечный abs в stdlib.h, мб это быстрее, но вряд ли конечно. + */ +#define ABS(x) ( ((x) > 0)? (x) : -(x))? + +/** MATH_DEFINES + * @} + */ ///////////////////////////////////////////////////////////////////// diff --git a/py_project/Core/Modbus/rs_message.c b/py_project/Core/Modbus/rs_message.c index 9ceb70f..7643b00 100644 --- a/py_project/Core/Modbus/rs_message.c +++ b/py_project/Core/Modbus/rs_message.c @@ -82,13 +82,13 @@ RS_StatusTypeDef RS_Receive_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg) { RS_RES = RS_Abort(hRS, ABORT_RS); printf_rs_err("\n%d: Error RS: Failed to start RS receiving...", uwTick); - TrackerCnt_Err(hRS->rs_err); + } else { RS_RES = RS_OK; printf_rs("\n%d: RS: Start Receiving...", uwTick); - TrackerCnt_Ok(hRS->rs_err); + } hRS->RS_STATUS = RS_RES; @@ -138,13 +138,13 @@ RS_StatusTypeDef RS_Transmit_IT(RS_HandleTypeDef *hRS, RS_MsgTypeDef *RS_msg) { RS_RES = RS_Abort(hRS, ABORT_RS); printf_rs_err("\n%d: Error RS: Failed to start RS transmitting...", uwTick); - TrackerCnt_Err(hRS->rs_err); + } else { RS_RES = RS_OK; printf_rs("\n%d: RS: Start Transmitting...", uwTick); - TrackerCnt_Ok(hRS->rs_err); + } } @@ -345,7 +345,7 @@ RS_StatusTypeDef RS_Handle_Receive_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef *R if(RS_RES != RS_OK) { - TrackerCnt_Err(hRS->rs_err); + } return RS_RES; @@ -369,7 +369,7 @@ RS_StatusTypeDef RS_Handle_Transmit_Start(RS_HandleTypeDef *hRS, RS_MsgTypeDef * } if(RS_RES != RS_OK) { - TrackerCnt_Err(hRS->rs_err); + } return RS_RES; @@ -398,7 +398,7 @@ RS_StatusTypeDef RS_UART_RxCpltCallback(RS_HandleTypeDef *hRS) // if we need to skip this message - restart receive if(RS_RES == RS_SKIP || NuRS_of_Rest_Bytes == 0xFFFF) { - TrackerCnt_Err(hRS->rs_err); + RS_Abort(hRS, ABORT_RX); RS_RES = RS_Handle_Receive_Start(hRS, hRS->pMessagePtr); return RS_RES; @@ -433,7 +433,6 @@ RS_StatusTypeDef RS_UART_RxCpltCallback(RS_HandleTypeDef *hRS) if(uart_res != HAL_OK) {// need uart status, so doesnt write abort to RS_RES - TrackerCnt_Err(hRS->rs_err); RS_RES = RS_Abort(hRS, ABORT_RS); } else @@ -523,7 +522,7 @@ void RS_UART_Handler(RS_HandleTypeDef *hRS) //----------------ERRORS HANDLER---------------- else { - TrackerCnt_Err(hRS->rs_err); + /* de-init uart transfer */ RS_Abort(hRS, ABORT_RS); RS_Handle_Receive_Start(hRS, hRS->pMessagePtr); diff --git a/py_project/Core/Modbus/rs_message.h b/py_project/Core/Modbus/rs_message.h index a3d525d..623c24b 100644 --- a/py_project/Core/Modbus/rs_message.h +++ b/py_project/Core/Modbus/rs_message.h @@ -27,7 +27,6 @@ #include "modbus.h" -#include "mylibs_include.h" #include "crc_algs.h" @@ -187,7 +186,6 @@ typedef struct // RS_HandleTypeDef /* RS STATUS */ RS_StatusTypeDef RS_STATUS; ///< RS status - RS_TrackerTypeDef rs_err; }RS_HandleTypeDef; extern RS_HandleTypeDef hmodbus1; diff --git a/py_project/Core/MyLibs/bit_access.h b/py_project/Core/MyLibs/bit_access.h deleted file mode 100644 index 081983c..0000000 --- a/py_project/Core/MyLibs/bit_access.h +++ /dev/null @@ -1,249 +0,0 @@ -/** -************************************************************************** -* @file mylibs_defs.h -* @brief Заголочный файл для дефайнов библиотеки MyLibsGeneral. -************************************************************************** -* @defgroup BIT_ACCESS_DEFINES Bit access defines -* @ingroup MYLIBS_DEFINES -* @brief Всякое для доступа к битам в unsigned -*************************************************************************/ -#ifndef __BIT_ACCESS_H_ -#define __BIT_ACCESS_H_ -#include "mylibs_defs.h" - -/** - * @addtogroup BIT_ACCESS_TYPEDEF Byte access typedefs - * @ingroup BIT_ACCESS_DEFINES - * @brief Дефайны юнионов для обращения к битам. - @{ - */ -typedef union -{ - uint8_t all; - struct - { - unsigned bit0:1; - unsigned bit1:1; - unsigned bit2:1; - unsigned bit3:1; - unsigned reserved:4; - }bit; -}uint4_BitTypeDef; - -typedef union -{ - uint8_t all; - struct - { - unsigned bit0:1; - unsigned bit1:1; - unsigned bit2:1; - unsigned bit3:1; - unsigned bit4:1; - unsigned reserved:3; - }bit; -}uint5_BitTypeDef; - -typedef union -{ - uint8_t all; - struct - { - unsigned bit0:1; - unsigned bit1:1; - unsigned bit2:1; - unsigned bit3:1; - unsigned bit4:1; - unsigned bit5:1; - unsigned reserved:2; - }bit; -}uint6_BitTypeDef; - -typedef union -{ - uint8_t all; - struct - { - unsigned bit0:1; - unsigned bit1:1; - unsigned bit2:1; - unsigned bit3:1; - unsigned bit4:1; - unsigned bit5:1; - unsigned bit6:1; - unsigned reserved:1; - }bit; -}uint7_BitTypeDef; - -typedef union -{ - uint8_t all; - struct - { - unsigned bit0:1; - unsigned bit1:1; - unsigned bit2:1; - unsigned bit3:1; - unsigned bit4:1; - unsigned bit5:1; - unsigned bit6:1; - unsigned bit7:1; - }bit; -}uint8_BitTypeDef; - -typedef union -{ - uint16_t all; - struct - { - unsigned bit0:1; - unsigned bit1:1; - unsigned bit2:1; - unsigned bit3:1; - unsigned bit4:1; - unsigned bit5:1; - unsigned bit6:1; - unsigned bit7:1; - unsigned bit8:1; - unsigned bit9:1; - unsigned bit10:1; - unsigned bit11:1; - unsigned bit12:1; - unsigned bit13:1; - unsigned bit14:1; - unsigned bit15:1; - }bit; -}uint16_BitTypeDef; - - -typedef union -{ - uint32_t all; - struct - { - unsigned bit0:1; - unsigned bit1:1; - unsigned bit2:1; - unsigned bit3:1; - unsigned bit4:1; - unsigned bit5:1; - unsigned bit6:1; - unsigned bit7:1; - unsigned bit8:1; - unsigned bit9:1; - unsigned bit10:1; - unsigned bit11:1; - unsigned bit12:1; - unsigned bit13:1; - unsigned bit14:1; - unsigned bit15:1; - unsigned bit16:1; - unsigned bit17:1; - unsigned bit18:1; - unsigned bit19:1; - unsigned bit20:1; - unsigned bit21:1; - unsigned bit22:1; - unsigned bit23:1; - unsigned bit24:1; - unsigned bit25:1; - unsigned bit26:1; - unsigned bit27:1; - unsigned bit28:1; - unsigned bit29:1; - unsigned bit30:1; - unsigned bit31:1; - }bit; -}uint32_BitTypeDef; - - -typedef union -{ - uint64_t all; - struct - { - unsigned bit0:1; - unsigned bit1:1; - unsigned bit2:1; - unsigned bit3:1; - unsigned bit4:1; - unsigned bit5:1; - unsigned bit6:1; - unsigned bit7:1; - unsigned bit8:1; - unsigned bit9:1; - unsigned bit10:1; - unsigned bit11:1; - unsigned bit12:1; - unsigned bit13:1; - unsigned bit14:1; - unsigned bit15:1; - unsigned bit16:1; - unsigned bit17:1; - unsigned bit18:1; - unsigned bit19:1; - unsigned bit20:1; - unsigned bit21:1; - unsigned bit22:1; - unsigned bit23:1; - unsigned bit24:1; - unsigned bit25:1; - unsigned bit26:1; - unsigned bit27:1; - unsigned bit28:1; - unsigned bit29:1; - unsigned bit30:1; - unsigned bit31:1; - unsigned bit32:1; - unsigned bit33:1; - unsigned bit34:1; - unsigned bit35:1; - unsigned bit36:1; - unsigned bit37:1; - unsigned bit38:1; - unsigned bit39:1; - unsigned bit40:1; - unsigned bit41:1; - unsigned bit42:1; - unsigned bit43:1; - unsigned bit44:1; - unsigned bit45:1; - unsigned bit46:1; - unsigned bit47:1; - unsigned bit48:1; - unsigned bit49:1; - unsigned bit50:1; - unsigned bit51:1; - unsigned bit52:1; - unsigned bit53:1; - unsigned bit54:1; - unsigned bit55:1; - unsigned bit56:1; - unsigned bit57:1; - unsigned bit58:1; - unsigned bit59:1; - unsigned bit60:1; - unsigned bit61:1; - unsigned bit62:1; - unsigned bit63:1; - }bit; -}uint64_BitTypeDef; -/** BIT_ACCESS_TYPEDEF - * @} - */ - -/** - * @addtogroup BIT_ACCESS_FUNCTIONS Byte access functions - * @ingroup BIT_ACCESS_DEFINES - * @brief Дефайны для обращения к битам в unsigned. - @{ - */ -#define uint8_bit(_uint8_, _bit_) (*(uint8_BitTypeDef *)(&(_uint8_))).bit.bit##_bit_ -#define uint16_bit(_uint8_, _bit_) (*(uint16_BitTypeDef *)(&(_uint8_))).bit.bit##_bit_ -#define uint32_bit(_uint8_, _bit_) (*(uint32_BitTypeDef *)(&(_uint8_))).bit.bit##_bit_ -#define uint64_bit(_uint8_, _bit_) (*(uint64_BitTypeDef *)(&(_uint8_))).bit.bit##_bit_ - -/** BIT_ACCESS_FUNCTIONS - * @} - */ -#endif //__BIT_ACCESS_H_ \ No newline at end of file diff --git a/py_project/Core/MyLibs/general_gpio.c b/py_project/Core/MyLibs/general_gpio.c deleted file mode 100644 index f5799cd..0000000 --- a/py_project/Core/MyLibs/general_gpio.c +++ /dev/null @@ -1,128 +0,0 @@ -/** - ************************************************************************** - * @file general_gpio.c - * @brief Модуль для инициализации портов. - ************************************************************************** - @verbatim - //-------------------Функции-------------------// - Functions: users - - GPIO_Clock_Enable Инициализация тактирования порта - @endverbatim -***************************************************************************/ -#include "general_gpio.h" - -//------------------------------------------------------------------- -//------------------------GPIO INIT FUNCTIONS------------------------ - -HAL_StatusTypeDef GPIO_Clock_Enable(GPIO_TypeDef *GPIOx) -{ - HAL_StatusTypeDef status = HAL_OK; - // choose port for enable clock - if (GPIOx==GPIOA) - __HAL_RCC_GPIOA_CLK_ENABLE(); - else if (GPIOx==GPIOB) - __HAL_RCC_GPIOB_CLK_ENABLE(); - else if (GPIOx==GPIOC) - __HAL_RCC_GPIOC_CLK_ENABLE(); -#ifdef GPIOD - else if (GPIOx==GPIOD) - __HAL_RCC_GPIOD_CLK_ENABLE(); -#endif -#ifdef GPIOE - else if (GPIOx==GPIOE) - __HAL_RCC_GPIOE_CLK_ENABLE(); -#endif - else - status = HAL_ERROR; - - return status; -} - -//------------------------GPIO INIT FUNCTIONS------------------------ -//------------------------------------------------------------------- - - -//------------------------------------------------------------------- -//------------------------GPIO LED FUNCTIONS------------------------- - -/** - * @brief Включить светодиод - */ -void GPIO_LED_On(GPIO_LEDTypeDef *led) -{ - led->state = LED_IS_ON; - HAL_GPIO_WritePin(led->LED_Port, led->LED_Pin, LED_ON); -} -/** - * @brief Выключить светодиод - */ -void GPIO_LED_Off(GPIO_LEDTypeDef *led) -{ - led->state = LED_IS_OFF; - HAL_GPIO_WritePin(led->LED_Port, led->LED_Pin, LED_OFF); -} - -/** - * @brief Активировать моргание светодиодом - */ -void GPIO_LED_Blink_Start(GPIO_LEDTypeDef *led, uint32_t period) -{ - led->state = LED_IS_BLINKING; - led->LED_Period = period; -} - -/** - * @brief Моргание светодиодом - */ -void GPIO_LED_Blink_Handle(GPIO_LEDTypeDef *led) -{ - if(led->state == LED_IS_BLINKING) - { - uint32_t tickcurrent = HAL_GetTick(); - if((tickcurrent - led->tickprev) > led->LED_Period) - { - HAL_GPIO_TogglePin(led->LED_Port, led->LED_Pin); - led->tickprev = tickcurrent; - } - } -} -//------------------------GPIO LED FUNCTIONS------------------------- -//------------------------------------------------------------------- - -//------------------------------------------------------------------- -//------------------------GPIO SW FUNCTIONS------------------------- - -/** - * @brief Считать состоянии кнопки запуска - */ -uint8_t GPIO_Read_Swich(GPIO_SwitchTypeDef *sw) -{ - - if(HAL_GPIO_ReadPin(sw->Sw_Port, sw->Sw_Pin) == SW_ON) - { - sw->Sw_PrevState = 1; - - if(sw->tickprev == 0) - sw->tickprev = HAL_GetTick(); - - if((HAL_GetTick() - sw->tickprev) > sw->Sw_FilterDelay) - { - if(HAL_GPIO_ReadPin(sw->Sw_Port, sw->Sw_Pin) == SW_ON) - { - return 1; - } - else - { - sw->tickprev = 0; - return 0; - } - } - } - else - { - sw->Sw_PrevState = 0; - } - return 0; -} -//------------------------GPIO SW FUNCTIONS------------------------- -//------------------------------------------------------------------- \ No newline at end of file diff --git a/py_project/Core/MyLibs/general_gpio.h b/py_project/Core/MyLibs/general_gpio.h deleted file mode 100644 index f107bf1..0000000 --- a/py_project/Core/MyLibs/general_gpio.h +++ /dev/null @@ -1,88 +0,0 @@ -/** - ************************************************************************** - * @file general_gpio.h - * @brief Заголовочный файл для модуля инициализации портов. - *************************************************************************/ -#ifndef __GPIO_GENERAL_H_ -#define __GPIO_GENERAL_H_ - -#include "mylibs_defs.h" - - -#define SPI_Alternate_Mapping(INSTANCE) ((((INSTANCE) == TIM1) || ((INSTANCE) == TIM2))? GPIO_AF1_TIM1: \ - (((INSTANCE) == TIM3) || ((INSTANCE) == TIM4) || ((INSTANCE) == TIM5))? GPIO_AF2_TIM3: \ - (((INSTANCE) == TIM8) || ((INSTANCE) == TIM9) || ((INSTANCE) == TIM10) || ((INSTANCE) == TIM11))? GPIO_AF3_TIM8: \ - (((INSTANCE) == TIM12) || ((INSTANCE) == TIM13) || ((INSTANCE) == TIM14))? GPIO_AF9_TIM12: \ - (0)) - - -#define TIM_Alternate_Mapping(INSTANCE) ((((INSTANCE) == TIM1) || ((INSTANCE) == TIM2))? GPIO_AF1_TIM1: \ - (((INSTANCE) == TIM3) || ((INSTANCE) == TIM4) || ((INSTANCE) == TIM5))? GPIO_AF2_TIM3: \ - (((INSTANCE) == TIM8) || ((INSTANCE) == TIM9) || ((INSTANCE) == TIM10) || ((INSTANCE) == TIM11))? GPIO_AF3_TIM8: \ - (((INSTANCE) == TIM12) || ((INSTANCE) == TIM13) || ((INSTANCE) == TIM14))? GPIO_AF9_TIM12: \ - (0)) - - -typedef enum -{ - LED_IS_OFF = 0, - LED_IS_ON = 1, - LED_IS_BLINKING = 2, - LED_IS_FADING = 3, -}GPIO_LEDStateTypeDef; - -typedef struct -{ - GPIO_LEDStateTypeDef state; - - GPIO_TypeDef *LED_Port; - uint32_t LED_Pin; - - uint32_t LED_Period; - uint32_t tickprev; -}GPIO_LEDTypeDef; - -typedef struct -{ - GPIO_TypeDef *Sw_Port; - uint32_t Sw_Pin; - - uint32_t Sw_PrevState; - uint32_t Sw_FilterDelay; - uint32_t tickprev; -}GPIO_SwitchTypeDef; - -///////////////////////////////////////////////////////////////////// -///////////////////////////---FUNCTIONS---/////////////////////////// -HAL_StatusTypeDef GPIO_Clock_Enable(GPIO_TypeDef *GPIOx); - -/* Считать состоянии кнопки запуска */ -uint8_t GPIO_Read_Swich(GPIO_SwitchTypeDef *swstart); -/* Включить светодиод */ -void GPIO_LED_On(GPIO_LEDTypeDef *led); -/* Выключить светодиод */ -void GPIO_LED_Off(GPIO_LEDTypeDef *led); -/* Активировать моргание светодиодом */ -void GPIO_LED_Blink_Start(GPIO_LEDTypeDef *led, uint32_t period); -/* Моргание светодиодом */ -void GPIO_LED_Blink_Handle(GPIO_LEDTypeDef *led); -///////////////////////////---FUNCTIONS---/////////////////////////// - - -#ifndef LED_ON -#define LED_ON 0 -#endif - -#ifndef LED_0FF -#define LED_OFF 1 -#endif - -#ifndef SW_ON -#define SW_ON 0 -#endif - -#ifndef SW_0FF -#define SW_OFF 1 -#endif - -#endif // __GPIO_GENERAL_H_ diff --git a/py_project/Core/MyLibs/mylibs_config.h b/py_project/Core/MyLibs/mylibs_config.h deleted file mode 100644 index 982dff0..0000000 --- a/py_project/Core/MyLibs/mylibs_config.h +++ /dev/null @@ -1,35 +0,0 @@ -/** -************************************************************************** -* @file mylibs_config.h -* @brief Конфигурации для библиотек MyLibs -************************************************************************** -* @defgroup MYLIBS_CONFIG Configs My Libs -* @ingroup MYLIBS_ALL -* @brief Конфигурации для библиотек MyLibs -@{ -*************************************************************************/ -#ifndef __MYLIBS_CONFIG_H_ -#define __MYLIBS_CONFIG_H_ - -#include "py32f0xx_hal.h" - -// user includes -#include "interface_config.h" - - -#define RS_USER_VARS_NUMB 0 -#define ADC_USER_VARS_NUMB 0 -#define ADC_CH_USER_VARS_NUMB 0 - - -#define INCLUDE_BIT_ACCESS_LIB -#define INCLUDE_TRACKERS_LIB -#define INCLUDE_TRACE_LIB -//#define INCLUDE_GENERAL_PERIPH_LIBS -//#define FREERTOS_DELAY - - -/** MYLIBS_CONFIG - * @} - */ -#endif //__MYLIBS_CONFIG_H_ \ No newline at end of file diff --git a/py_project/Core/MyLibs/mylibs_defs.h b/py_project/Core/MyLibs/mylibs_defs.h deleted file mode 100644 index fb7f008..0000000 --- a/py_project/Core/MyLibs/mylibs_defs.h +++ /dev/null @@ -1,105 +0,0 @@ -/** -************************************************************************** -* @file mylibs_defs.h -* @brief Заголочный файл для дефайнов библиотеки MyLibsGeneral. -************************************************************************** -* @defgroup MYLIBS_DEFINES My Libs defines -* @brief Базовые дефайны для всего проекта -* -*************************************************************************/ -#ifndef __MYLIBS_DEFINES_H_ -#define __MYLIBS_DEFINES_H_ - -#include "mylibs_config.h" - -/*************************************************************************** -******************************ERROR_HANDLER********************************/ -/** - * @addtogroup ERROR_HANDLER_DEFINES Error Handler defines - * @ingroup MYLIBS_DEFINES - * @brief Дефайны для определения функции обработки ошибок - @{ - */ - -/* extern Error_Handler from main.h */ -extern void Error_Handler(void); - -/* Define error handler for MyLibs */ -#define MyLibs_Error_Handler(_params_) Error_Handler(_params_) -/* If error handler not defined - set void */ -#ifndef MyLibs_Error_Handler -#define ((void)0U) -#endif // MyLibs_Error_Handler - -/** ERROR_HANDLER_DEFINES - * @} - */ - - -/*************************************************************************** -********************************ACCESS_DEFINES*****************************/ - -#define ClearStruct(_struct_) memset(&(_struct_), 0, sizeof(_struct_)) - - - -/*************************************************************************** -******************************DELAYS_DEFINES*******************************/ -/** - * @addtogroup DELAYS_DEFINES Delays defines - * @ingroup MYLIBS_DEFINES - * @brief Дефайны для реализации задержек - @{ - */ - -#ifdef FREERTOS_DELAY - #define msDelay(_ms_) osDelay(_ms_) -#else - #define msDelay(_ms_) if(_ms_ != 0) HAL_Delay(_ms_-1) -#endif - -/** DELAYS_DEFINES - * @} - */ - - -/*************************************************************************** -*******************************MATH_DEFINES********************************/ -/** - * @addtogroup MATH_DEFINES Math defines - * @ingroup MYLIBS_DEFINES - * @brief Дефайны для различных математических функций - @{ - */ - -/** - * @brief Calc dividing including remainder - * @param _val_ - делимое. - * @param _div_ - делитель. - * @details Если результат деления без остатка: он возвращается как есть - Если с остатком - округляется вверх - */ -//#define Divide_Up(_val_, _div_) (((_val_)%(_div_))? (_val_)/(_div_)+1 : (_val_)/_div_) /* через тернарный оператор */ -#define Divide_Up(_val_, _div_) ((_val_ - 1) / _div_) + 1 /* через мат выражение */ - -/** - * @brief Swap between Little Endian and Big Endian - * @param v - Переменная для свапа. - * @return v (new) - Свапнутая переменная. - * @details Переключения между двумя типами хранения слова: HI-LO байты и LO-HI байты. - */ -#define ByteSwap16(v) (((v&0xFF00) >> (8)) | ((v&0x00FF) << (8))) - -/** - * @brief Absolute - * @param x - Переменная для модудя. - * @return x (new) - Число по модулю. - * @details Берет число по модулю. Хз как работает библиотечный abs в stdlib.h, мб это быстрее, но вряд ли конечно. - */ -#define ABS(x) ( ((x) > 0)? (x) : -(x))? - -/** MATH_DEFINES - * @} - */ - -#endif //__MYLIBS_DEFINES_H_ \ No newline at end of file diff --git a/py_project/Core/MyLibs/mylibs_include.h b/py_project/Core/MyLibs/mylibs_include.h deleted file mode 100644 index 4785078..0000000 --- a/py_project/Core/MyLibs/mylibs_include.h +++ /dev/null @@ -1,80 +0,0 @@ -/** -************************************************************************** -* @file mylibs_include.h -* @brief Заголочный файл для всех библиотек -************************************************************************** -@details -Здесь нужно собрать библиотеки и дефайны, которые должны быть видны во всем проекте, -чтобы не подключать 100 инклюдов в каждом ".c" файле -************************************************************************** -* @defgroup MYLIBS_ALL My Libs -* @brief Все используемые MyLibs библиотеки -* -*************************************************************************/ -#ifndef __MYLIBS_INCLUDE_H_ -#define __MYLIBS_INCLUDE_H_ - -#include "mylibs_defs.h" - - -#ifdef ARM_MATH_CM4 - #include "arm_math.h" -#endif - - -#ifdef INCLUDE_BIT_ACCESS_LIB -#include "bit_access.h" -#endif - -#ifdef INCLUDE_TRACKERS_LIB -#include "trackers.h" -#endif - -#ifdef INCLUDE_TRACE_LIB -#include "trace.h" -#endif - - - -#ifdef INCLUDE_GENERAL_PERIPH_LIBS - -#include "general_flash.h" -#include "general_gpio.h" -#ifdef HAL_SPI_MODULE_ENABLED -#include "general_spi.h" -#endif -#ifdef HAL_UART_MODULE_ENABLED -#include "general_uart.h" -#endif -#ifdef HAL_TIM_MODULE_ENABLED -#include "general_tim.h" -#endif - -#endif //INCLUDE_GENERAL_PERIPH_LIBS - - - - -/////////////////////////---USER SETTINGS---///////////////////////// -// user includes -#include "stdlib.h" -#include "string.h" -#include "stdio.h" -#include "math.h" - -#include "main.h" -#include "modbus_data.h" -#include "general_gpio.h" - -/** @brief Struct for trackers for Measure */ -/** @brief Struct for trackers for RS */ -typedef TrackerTypeDef(RS_USER_VARS_NUMB) RS_TrackerTypeDef; -/** @brief Struct for trackers for ADC */ -typedef TrackerTypeDef(ADC_USER_VARS_NUMB) ADC_TrackerTypeDef; -/** @brief Struct for trackers for ADC Channel */ -typedef TrackerTypeDef(ADC_CH_USER_VARS_NUMB) ADCChannel_TrackerTypeDef; -/////////////////////////---USER SETTINGS---///////////////////////// - - -#endif // __MYLIBS_INCLUDE_H_ - diff --git a/py_project/Core/MyLibs/trace.h b/py_project/Core/MyLibs/trace.h deleted file mode 100644 index 0b4a87e..0000000 --- a/py_project/Core/MyLibs/trace.h +++ /dev/null @@ -1,80 +0,0 @@ -/** -************************************************************************** -* @file trace.h -* @brief Заголочный файл для работы с трассировкой. -************************************************************************** -* @addtogroup TRACE Trace defines -* @ingroup MYLIBS_DEFINES -* @brief Дефайны для работы с трассировкой -*************************************************************************/ -#ifndef __TRACE_H_ -#define __TRACE_H_ -#include "mylibs_defs.h" - -/** - * @addtogroup TRACE_SERIAL Serial trace defines - * @ingroup TRACE - * @brief Дефайны для работы с serial трассировкой - * @details Определяется дефайн my_printf() для работы с serial трассировкой: - - для RTT это будет вызов функции SEGGER_RTT_printf(), с подключением библиотеки SEGGER_RTT.h - - для SWO это будет просто printf(), но библиотеку STDOUT надо подключить самостоятельно: - - @verbatim - Manage Run-Time Environment -> Compiler -> I/O -> STDOUT - @endverbatim - - - Если трассировка отключена, то все дефайны определяются как 'ничего' и на производительность кода не влияют - @{ - */ -/* Выбор какой serial trace использовать */ -#ifdef SERIAL_TRACE_ENABLE - - #if defined(RTT_TRACE_ENABLE) - #undef SWO_TRACE_ENABLE - #include "SEGGER_RTT.h" - #define my_printf(...) SEGGER_RTT_printf(0, __VA_ARGS__) - #elif defined(SWO_TRACE_ENABLE) - #undef RTT_TRACE_ENABLE - #define my_printf(...) printf(__VA_ARGS__) - #else // NO_TRACE - #define my_printf(...) - #warning No trace is selected. Serial debug wont work. - #endif // RTT_TRACE_ENABLE/SWO_TRACE_ENABLE/NO_TRACE -#else //SERIAL_TRACE_ENABLE - #define my_printf(...) - #undef RTT_TRACE_ENABLE - #undef SWO_TRACE_ENABLE - -#endif //SERIAL_TRACE_ENABLE - -/** TRACE_SERIAL - * @} - */ - - -/** - * @addtogroup TRACE_GPIO GPIO trace defines - * @ingroup TRACE - * @brief Дефайны для работы с GPIO трассировкой - * @details Определяется дефайны для работы с GPIO трассировкой: - - TRACE_GPIO_RESET() - для сброса ножки GPIO (через BSRR) - - TRACE_GPIO_SET() - для выставления ножки GPIO (через BSRR) - - - Если трассировка отключена, то все дефайны определяются как 'ничего' и на производительность кода не влияют - @{ - */ -#ifndef GPIO_TRACE_ENABLE - #define TRACE_GPIO_RESET(_gpio_,_pin_) - #define TRACE_GPIO_SET(_gpio_,_pin_) -#else - #define TRACE_GPIO_RESET(_gpio_,_pin_) (_gpio_)->BSRR = ((_pin_)<<16) - #define TRACE_GPIO_SET(_gpio_,_pin_) (_gpio_)->BSRR = (((_pin_))) -#endif //GPIO_TRACE_ENABLE - - -/** TRACE_GPIO - * @} - */ - - -#endif //__TRACE_H_ \ No newline at end of file diff --git a/py_project/Core/MyLibs/trackers.h b/py_project/Core/MyLibs/trackers.h deleted file mode 100644 index 641d606..0000000 --- a/py_project/Core/MyLibs/trackers.h +++ /dev/null @@ -1,141 +0,0 @@ -/** -************************************************************************** -* @file mylibs_defs.h -* @brief Заголочный файл для дефайнов библиотеки MyLibsGeneral. -************************************************************************** -* @defgroup MYLIBS_DEFINES My Libs defines -* @brief Базовые дефайны для всего проекта -* -*************************************************************************/ -#ifndef __TRACKERS_H_ -#define __TRACKERS_H_ -#include "mylibs_defs.h" - -/** - * @addtogroup TRACKERS Trackers defines - * @ingroup MYLIBS_DEFINES - * @brief Дефайны для работы с трекерами - * @details Есть дефайн для объявления структуры трекера: TrackerTypeDef(num_user_vars). - Структура состоит из следующих элементов: - - cnt_ok - - cnt_err - - cnt_warn - - user[num_user_vars] - Также есть ряд функций (дефайнов) для обращения к элементам этой структуры. - - - Если трассировка отключена, то все дефайны определяются как ничего и на производительность кода не влияют - - @par Пример: - Определяем typedef трекера измерений @ref Measure_TrackerTypeDef - - @verbatim - typedef TrackerTypeDef(MEASURE_USER_VARS_NUMB) Measure_TrackerTypeDef; - @endverbatim - - И через @ref Measure_TrackerTypeDef структура подключается в @ref TESTER_MeasureHandleTypeDef, а также - если необхожимо в другие структуру, например в структуру всех ошибок через указатель @ref TESTER_TrackerTypeDef - - @{ - */ - -#ifdef TRACKERS_ENABLE - /** - * @brief Структура для счетчиков отладки - * @param num_user_vars - количество пользовательских счетчиков - * @details Содержит счетчик для успешных событый (cnt_ok), - * счетчик для ошибок (cnt_err), счетчик для предупреждений (cnt_warn). - * - * Также есть возможность объявить пользовательские счетчики в - * количестве штук. - * - * Для работы с структурой можно использовать функции: - * - TrackerCnt_Ok() - * - TrackerCnt_Err() - * - TrackerCnt_Warn() - * - TrackerCnt_User() - * - TrackerWrite_User() - * - TrackerClear_All() - * - TrackerClear_Ok() - * - TrackerClear_Err() - * - TrackerClear_Warn() - * - TrackerClear_User() - * - TrackerClear_UserAll() - */ - #define TrackerTypeDef(num_user_vars) \ - struct \ - { \ - uint32_t cnt_ok; \ - uint32_t cnt_err; \ - uint32_t cnt_warn; \ - uint32_t user[num_user_vars]; \ - } - - /** @brief Получить количетство пользовательских переменных */ - #define num_of_usercnts(_user_) (sizeof(_user_) / sizeof(_user_[0])) - /** @brief Проверка существует ли указанная пользовательская переменная */ - #define assert_usertracker(_cntstruct_, _uservarnumb_) ((_uservarnumb_) < num_of_usercnts((_cntstruct_).user)) - /** @brief Условие для проверки существует ли указанная пользовательская переменная */ - #define if_assert_usertracker(_cntstruct_, _uservarnumb_) if(assert_usertracker(_cntstruct_, _uservarnumb_)) - /** @brief Тернарный оператор для проверки существует ли указанная пользовательская переменная */ - #define tern_assert_usertracker(_cntstruct_, _uservarnumb_) (assert_usertracker(_cntstruct_, _uservarnumb_)) ? _uservarnumb_ : 0 - - - - /** - * @brief Запись числа в пользовательскую переменную - * @note Здесь нет проверки - существует ли пользовательская переменная! - * Есть возможность выйти за границы структуры!!! - * Чтобы этого избежать используете дефайн #ref assert_usertracker() - */ - #define TrackerGet_User(_cntstruct_, _uservarnumb_) (_cntstruct_).user[tern_assert_usertracker(_cntstruct_, _uservarnumb_)] - - - - /** @brief Инкрементирование счетчика успешных событий */ - #define TrackerCnt_Ok(_cntstruct_) (_cntstruct_).cnt_ok++ - /** @brief Инкрементирование счетчика ошибок */ - #define TrackerCnt_Err(_cntstruct_) (_cntstruct_).cnt_err++ - /** @brief Инкрементирование счетчика предупреждений */ - #define TrackerCnt_Warn(_cntstruct_) (_cntstruct_).cnt_warn++ - /** @brief Инкрементирование пользовательской переменной */ - #define TrackerCnt_User(_cntstruct_, _uservarnumb_) if_assert_usertracker(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_]++; - /** @brief Запись числа в пользовательскую переменную */ - #define TrackerWrite_User(_cntstruct_, _uservarnumb_, _val_) if_assert_usertracker(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_] = (_val_) - - /** @brief Очистка всей структуры */ - #define TrackerClear_All(_cntstruct_) memset(&(_cntstruct_), 0, sizeof(_cntstruct_)) - /** @brief Очистка счетчика успешных событий */ - #define TrackerClear_Ok(_cntstruct_) (_cntstruct_).cnt_ok = 0 - /** @brief Очистка счетчика ошибок */ - #define TrackerClear_Err(_cntstruct_) (_cntstruct_).cnt_err = 0 - /** @brief Очистка счетчика предупреждений */ - #define TrackerClear_Warn(_cntstruct_) (_cntstruct_).cnt_warn = 0 - /** @brief Очистка пользовательской переменной */ - #define TrackerClear_User(_cntstruct_, _uservarnumb_) if_assert_usertracker(_cntstruct_, _uservarnumb_) (_cntstruct_).user[_uservarnumb_] = 0; - /** @brief Очистка всех пользовательских переменных */ - #define TrackerClear_UserAll(_cntstruct_) memset(&(_cntstruct_).user, 0, sizeof((_cntstruct_).user)) - -#else //TRACKERS_ENABLE - #define TrackerTypeDef(num_user_vars) void * - - #define num_of_usercnts(_user_) - #define assert_tracecnt(_cntstruct_, _uservarnumb_) - - #define TrackerCnt_Ok(_cntstruct_) - #define TrackerCnt_Err(_cntstruct_) - #define TrackerCnt_Warn(_cntstruct_) - #define TrackerCnt_User(_cntstruct_, _uservarnumb_) - #define TrackerWrite_User(_cntstruct_, _uservarnumb_, _val_) - - /** @brief Очистка всей структуры */ - #define TrackerClear_All(_cntstruct_) - #define TrackerClear_Ok(_cntstruct_) - #define TrackerClear_Err(_cntstruct_) - #define TrackerClear_Warn(_cntstruct_) - #define TrackerClear_User(_cntstruct_) - #define TrackerClear_UserAll(_cntstruct_) - -#endif //TRACKERS_ENABLE - -#endif //__TRACKERS_H_ \ No newline at end of file diff --git a/py_project/Core/Src/gpio.c b/py_project/Core/Src/gpio.c index fbac07e..88245f1 100644 --- a/py_project/Core/Src/gpio.c +++ b/py_project/Core/Src/gpio.c @@ -46,19 +46,28 @@ void MX_GPIO_Init(void) __HAL_RCC_GPIOC_CLK_ENABLE(); - /*Configure LED GPIO pin : PB0 (OneWire) */ - GPIO_InitStruct.Pin = DS_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - HAL_GPIO_Init(DS_GPIO_Port, &GPIO_InitStruct); + /* PB0 (OneWire) */ + DS_GPIO_Port->MODER &= ~(GPIO_MODER_MODE0); + DS_GPIO_Port->MODER |= (GPIO_MODE_OUTPUT_PP << GPIO_MODER_MODE0_Pos); + DS_GPIO_Port->PUPDR &= ~(GPIO_PUPDR_PUPD0); + DS_GPIO_Port->PUPDR |= (GPIO_NOPULL << GPIO_PUPDR_PUPD0_Pos); + DS_GPIO_Port->OSPEEDR |= (GPIO_SPEED_FREQ_VERY_HIGH << GPIO_OSPEEDR_OSPEED0_Pos); + + /* PA1, PA4, PA5 */ + GPIOA->BSRR = GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5; /*Configure LED GPIO pin : PA1 PA4 PA5 */ - HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5, GPIO_PIN_SET); - GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + /* PA1, PA4, PA5 */ + GPIOA->MODER &= ~(GPIO_MODER_MODE1 | GPIO_MODER_MODE4 | GPIO_MODER_MODE5); + GPIOA->MODER |= (GPIO_MODE_OUTPUT_PP << GPIO_MODER_MODE1_Pos) | + (GPIO_MODE_OUTPUT_PP << GPIO_MODER_MODE4_Pos) | + (GPIO_MODE_OUTPUT_PP << GPIO_MODER_MODE5_Pos); + GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPD1 | GPIO_PUPDR_PUPD4 | GPIO_PUPDR_PUPD5); + GPIOA->PUPDR |= (GPIO_NOPULL << GPIO_PUPDR_PUPD1_Pos) | + (GPIO_NOPULL << GPIO_PUPDR_PUPD4_Pos) | + (GPIO_NOPULL << GPIO_PUPDR_PUPD5_Pos); + GPIOA->OSPEEDR |= (GPIO_SPEED_FREQ_LOW << GPIO_OSPEEDR_OSPEED1_Pos) | + (GPIO_SPEED_FREQ_LOW << GPIO_OSPEEDR_OSPEED4_Pos) | + (GPIO_SPEED_FREQ_LOW << GPIO_OSPEEDR_OSPEED5_Pos); } /************************ (C) COPYRIGHT Puya *****END OF FILE******************/ diff --git a/py_project/Core/Src/main.c b/py_project/Core/Src/main.c index 10edc9e..2c403bd 100644 --- a/py_project/Core/Src/main.c +++ b/py_project/Core/Src/main.c @@ -73,35 +73,72 @@ int main(void) */ static void APP_SystemClockConfig(void) { - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; +// RCC_OscInitTypeDef RCC_OscInitStruct = {0}; +// RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - /* Oscillator configuration */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE; /* Select oscillator HSE, HSI, LSI, LSE */ - RCC_OscInitStruct.HSIState = RCC_HSI_ON; /* Enable HSI */ - RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1; /* HSI 1 frequency division */ - RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_24MHz; /* Configure HSI clock 24MHz */ - RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS_DISABLE; /* Close HSE bypass */ - RCC_OscInitStruct.LSIState = RCC_LSI_OFF; /* Close LSI */ - /*RCC_OscInitStruct.LSICalibrationValue = RCC_LSICALIBRATION_32768Hz;*/ - RCC_OscInitStruct.LSEState = RCC_LSE_OFF; /* Close LSE */ - /*RCC_OscInitStruct.LSEDriver = RCC_LSEDRIVE_MEDIUM;*/ - /* Configure oscillator */ - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } +// /* Oscillator configuration */ +// RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE; /* Select oscillator HSE, HSI, LSI, LSE */ +// RCC_OscInitStruct.HSIState = RCC_HSI_ON; /* Enable HSI */ +// RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1; /* HSI 1 frequency division */ +// RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_24MHz; /* Configure HSI clock 24MHz */ +// RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS_DISABLE; /* Close HSE bypass */ +// RCC_OscInitStruct.LSIState = RCC_LSI_OFF; /* Close LSI */ +// /*RCC_OscInitStruct.LSICalibrationValue = RCC_LSICALIBRATION_32768Hz;*/ +// RCC_OscInitStruct.LSEState = RCC_LSE_OFF; /* Close LSE */ +// /*RCC_OscInitStruct.LSEDriver = RCC_LSEDRIVE_MEDIUM;*/ +// /* Configure oscillator */ +// if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) +// { +// Error_Handler(); +// } - /* Clock source configuration */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1; /* Choose to configure clock HCLK, SYSCLK, PCLK1 */ - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSISYS; /* Select HSISYS as the system clock */ - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; /* AHB clock 1 division */ - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; /* APB clock 1 division */ - /* Configure clock source */ - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) - { - Error_Handler(); - } +// /* Clock source configuration */ +// RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1; /* Choose to configure clock HCLK, SYSCLK, PCLK1 */ +// RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSISYS; /* Select HSISYS as the system clock */ +// RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; /* AHB clock 1 division */ +// RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; /* APB clock 1 division */ +// /* Configure clock source */ +// if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) +// { +// Error_Handler(); +// } + /* HSI */ + RCC->CR |= RCC_CR_HSION; + while (!(RCC->CR & RCC_CR_HSIRDY)); + + /* HSI */ + RCC->CR &= ~RCC_CR_HSIDIV; + RCC->CR |= RCC_HSI_DIV1; + + /* HSI */ + RCC->ICSCR &= ~RCC_ICSCR_HSI_TRIM; + RCC->ICSCR |= (RCC_HSICALIBRATION_24MHz << RCC_ICSCR_HSI_TRIM_Pos); + + /* LSI LSE */ + RCC->CSR &= ~RCC_CSR_LSION; + RCC->BDCR &= ~RCC_BDCR_LSEON; + + /* HSE */ + RCC->CR &= ~RCC_HSE_BYPASS_DISABLE; + + /* */ + RCC->CFGR &= ~RCC_CFGR_SW; + RCC->CFGR |= RCC_SYSCLKSOURCE_HSISYS; + while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_SYSCLKSOURCE_HSISYS); + + /* */ + RCC->CFGR &= ~(RCC_CFGR_HPRE | RCC_CFGR_PPRE_1); + RCC->CFGR |= RCC_SYSCLK_DIV1 | RCC_HCLK_DIV1; + + /* - */ + FLASH->ACR &= ~FLASH_ACR_LATENCY; + FLASH->ACR |= FLASH_LATENCY_0; +} + +uint32_t HAL_RCC_GetPCLK1Freq(void) +{ + /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/ + return (uint32_t)((SystemCoreClock) >> (APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE) >> RCC_CFGR_PPRE_Pos] & 0x1FU)); } /** diff --git a/py_project/Core/Src/tim.c b/py_project/Core/Src/tim.c index d2ef654..09290ca 100644 --- a/py_project/Core/Src/tim.c +++ b/py_project/Core/Src/tim.c @@ -25,7 +25,7 @@ /* USER CODE END 0 */ //TIM_HandleTypeDef htim1; -TIM_HandleTypeDef htim14; +//TIM_HandleTypeDef htim14; /* TIM3 init function */ void MX_TIM1_Init(void) @@ -33,13 +33,13 @@ void MX_TIM1_Init(void) // Включение тактирования TIM1 __HAL_RCC_TIM1_CLK_ENABLE(); - // Установка предделителя (Prescaler) + // Установка предделителя (Prescaler) на 1/24 МГц TIM1->PSC = 0; // Установка режима счета вверх TIM1->CR1 &= ~TIM_CR1_DIR; - // Установка периода (ARR - Auto-reload register) + // Установка периода (ARR - Auto-reload register) на максимальное число TIM1->ARR = 0xFFFFFFFF; // Установка делителя частоты (Clock Division) @@ -100,41 +100,68 @@ void MX_TIM1_Init(void) /* TIM2 init function */ void MX_TIM14_Init(void) { + + // Включение тактирования TIM1 + __HAL_RCC_TIM14_CLK_ENABLE(); + + // Установка предделителя (Prescaler) + TIM14->PSC = 24-1; + + // Установка режима счета вверх + TIM14->CR1 &= ~TIM_CR1_DIR; + + // Установка периода (ARR - Auto-reload register) на 50 миллисекунд + TIM14->ARR = 50000; + + // Установка делителя частоты (Clock Division) + TIM14->CR1 &= ~TIM_CR1_CKD; + + // Отключение режима предзагрузки + TIM14->CR1 &= ~TIM_CR1_ARPE; + + // Выбор внутреннего источника тактирования + TIM14->SMCR &= ~TIM_SMCR_SMS; + + // Настройка триггерного выхода (TRGO) + TIM14->CR2 &= ~TIM_CR2_MMS; + + // Отключение режима Master/Slave + TIM14->SMCR &= ~TIM_SMCR_MSM; - /* USER CODE BEGIN TIM2_Init 0 */ +// /* USER CODE BEGIN TIM2_Init 0 */ - /* USER CODE END TIM2_Init 0 */ +// /* USER CODE END TIM2_Init 0 */ - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; +// TIM_ClockConfigTypeDef sClockSourceConfig = {0}; +// TIM_MasterConfigTypeDef sMasterConfig = {0}; - /* USER CODE BEGIN TIM2_Init 1 */ +// /* USER CODE BEGIN TIM2_Init 1 */ - /* USER CODE END TIM2_Init 1 */ - htim14.Instance = TIM14; - htim14.Init.Prescaler = (HAL_RCC_GetPCLK1Freq()/1000000) - 1; - htim14.Init.CounterMode = TIM_COUNTERMODE_UP; - htim14.Init.Period = 50000; - htim14.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim14.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim14) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim14, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim14, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM2_Init 2 */ +// /* USER CODE END TIM2_Init 1 */ +// htim14.Instance = TIM14; +// htim14.Init.Prescaler = (24) - 1; +// htim14.Init.CounterMode = TIM_COUNTERMODE_UP; +// htim14.Init.Period = 50000; +// htim14.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; +// htim14.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; +// if (HAL_TIM_Base_Init(&htim14) != HAL_OK) +// { +// Error_Handler(); +// } +// sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; +// if (HAL_TIM_ConfigClockSource(&htim14, &sClockSourceConfig) != HAL_OK) +// { +// Error_Handler(); +// } +// sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; +// sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; +// if (HAL_TIMEx_MasterConfigSynchronization(&htim14, &sMasterConfig) != HAL_OK) +// { +// Error_Handler(); +// } +// /* USER CODE BEGIN TIM2_Init 2 */ - /* USER CODE END TIM2_Init 2 */ +// /* USER CODE END TIM2_Init 2 */ } void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) diff --git a/py_project/Core/Src/usart.c b/py_project/Core/Src/usart.c index a517a02..fde94bc 100644 --- a/py_project/Core/Src/usart.c +++ b/py_project/Core/Src/usart.c @@ -72,16 +72,23 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) PB04:TX, PB05:RX */ - GPIO_InitStruct.Pin = GPIO_PIN_4; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF1_USART1; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = GPIO_PIN_5; - GPIO_InitStruct.Alternate = GPIO_AF1_USART1; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + /* GPIO_PIN_4 */ + GPIOB->MODER &= ~(GPIO_MODER_MODE4); + GPIOB->MODER |= (GPIO_MODE_AF_PP << GPIO_MODER_MODE4_Pos); + GPIOB->PUPDR &= ~(GPIO_PUPDR_PUPD4); + GPIOB->PUPDR |= (GPIO_PULLUP << GPIO_PUPDR_PUPD4_Pos); + GPIOB->OSPEEDR |= (GPIO_SPEED_FREQ_HIGH << GPIO_OSPEEDR_OSPEED4_Pos); + GPIOB->AFR[0] &= ~(0xF << GPIO_AFRL_AFSEL4_Pos); + GPIOB->AFR[0] |= (GPIO_AF1_USART1 << GPIO_AFRL_AFSEL4_Pos); + + /* GPIO_PIN_5 */ + GPIOB->MODER &= ~(GPIO_MODER_MODE5); + GPIOB->MODER |= (GPIO_MODE_AF_PP << GPIO_MODER_MODE5_Pos); + GPIOB->PUPDR &= ~(GPIO_PUPDR_PUPD5); + GPIOB->PUPDR |= (GPIO_PULLUP << GPIO_PUPDR_PUPD5_Pos); + GPIOB->OSPEEDR |= (GPIO_SPEED_FREQ_HIGH << GPIO_OSPEEDR_OSPEED5_Pos); + GPIOB->AFR[0] &= ~(0xF << GPIO_AFRL_AFSEL5_Pos); + GPIOB->AFR[0] |= (GPIO_AF1_USART1 << GPIO_AFRL_AFSEL5_Pos); /* USART1 interrupt Init */ HAL_NVIC_SetPriority(USART1_IRQn, 0, 0); diff --git a/py_project/MDK-ARM/PY32Dallas.uvoptx b/py_project/MDK-ARM/PY32Dallas.uvoptx index 6183e9b..46786e0 100644 --- a/py_project/MDK-ARM/PY32Dallas.uvoptx +++ b/py_project/MDK-ARM/PY32Dallas.uvoptx @@ -709,113 +709,17 @@ 0 0 0 - - 6 - 31 - 5 - 0 - 0 - 0 - ..\Core\MyLibs\bit_access.h - bit_access.h - 0 - 0 - - - 6 - 32 - 1 - 0 - 0 - 0 - ..\Core\MyLibs\general_gpio.c - general_gpio.c - 0 - 0 - - - 6 - 33 - 5 - 0 - 0 - 0 - ..\Core\MyLibs\general_gpio.h - general_gpio.h - 0 - 0 - - - 6 - 34 - 5 - 0 - 0 - 0 - ..\Core\MyLibs\mylibs_config.h - mylibs_config.h - 0 - 0 - - - 6 - 35 - 5 - 0 - 0 - 0 - ..\Core\MyLibs\mylibs_defs.h - mylibs_defs.h - 0 - 0 - - - 6 - 36 - 5 - 0 - 0 - 0 - ..\Core\MyLibs\mylibs_include.h - mylibs_include.h - 0 - 0 - - - 6 - 37 - 5 - 0 - 0 - 0 - ..\Core\MyLibs\trace.h - trace.h - 0 - 0 - - - 6 - 38 - 5 - 0 - 0 - 0 - ..\Core\MyLibs\trackers.h - trackers.h - 0 - 0 - Drivers/PY32F002B_HAL_Driver - 0 + 1 0 0 0 7 - 39 + 31 1 0 0 @@ -827,7 +731,7 @@ 7 - 40 + 32 1 0 0 @@ -839,7 +743,7 @@ 7 - 41 + 33 1 0 0 @@ -851,7 +755,7 @@ 7 - 42 + 34 1 0 0 @@ -863,7 +767,7 @@ 7 - 43 + 35 1 0 0 @@ -875,7 +779,7 @@ 7 - 44 + 36 1 0 0 @@ -887,7 +791,7 @@ 7 - 45 + 37 1 0 0 @@ -899,7 +803,7 @@ 7 - 46 + 38 1 0 0 @@ -911,7 +815,7 @@ 7 - 47 + 39 1 0 0 @@ -923,7 +827,7 @@ 7 - 48 + 40 1 0 0 @@ -935,7 +839,7 @@ 7 - 49 + 41 1 0 0 diff --git a/py_project/MDK-ARM/PY32Dallas.uvprojx b/py_project/MDK-ARM/PY32Dallas.uvprojx index a1cf606..8bb99cf 100644 --- a/py_project/MDK-ARM/PY32Dallas.uvprojx +++ b/py_project/MDK-ARM/PY32Dallas.uvprojx @@ -559,48 +559,6 @@ MyLibs - - - bit_access.h - 5 - ..\Core\MyLibs\bit_access.h - - - general_gpio.c - 1 - ..\Core\MyLibs\general_gpio.c - - - general_gpio.h - 5 - ..\Core\MyLibs\general_gpio.h - - - mylibs_config.h - 5 - ..\Core\MyLibs\mylibs_config.h - - - mylibs_defs.h - 5 - ..\Core\MyLibs\mylibs_defs.h - - - mylibs_include.h - 5 - ..\Core\MyLibs\mylibs_include.h - - - trace.h - 5 - ..\Core\MyLibs\trace.h - - - trackers.h - 5 - ..\Core\MyLibs\trackers.h - - Drivers/PY32F002B_HAL_Driver @@ -614,11 +572,113 @@ py32f002b_hal_rcc.c 1 ..\Drivers\PY32F002B_HAL_Driver\Src\py32f002b_hal_rcc.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + py32f002b_hal_rcc_ex.c 1 ..\Drivers\PY32F002B_HAL_Driver\Src\py32f002b_hal_rcc_ex.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + py32f002b_hal_cortex.c @@ -629,6 +689,57 @@ py32f002b_hal_gpio.c 1 ..\Drivers\PY32F002B_HAL_Driver\Src\py32f002b_hal_gpio.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + py32f002b_hal_pwr.c @@ -644,11 +755,113 @@ py32f002b_hal_tim.c 1 ..\Drivers\PY32F002B_HAL_Driver\Src\py32f002b_hal_tim.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + py32f002b_hal_tim_ex.c 1 ..\Drivers\PY32F002B_HAL_Driver\Src\py32f002b_hal_tim_ex.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + py32f002b_hal_uart.c