Добавлен таргет проект для PY32F002A

This commit is contained in:
2025-03-06 13:26:17 +03:00
parent 15134a549a
commit 4c987be8e7
106 changed files with 88903 additions and 450 deletions

View File

@@ -38,6 +38,22 @@ extern "C" {
#define GPIO_LED_3 GPIO_PIN_5
#define GPIO_LED_4 GPIO_PIN_4
#ifdef PY32F002Bx5
#define TIM_MB TIM14
#define __HAL_DBGMCU_FREEZE_TIM_MB __HAL_DBGMCU_FREEZE_TIM14
#define __HAL_RCC_TIM_MB_CLK_ENABLE __HAL_RCC_TIM14_CLK_ENABLE
#define TIM_MB_IRQn TIM14_IRQn
#define TIM_MB_IRQHandler TIM14_IRQHandler
#endif
#ifdef PY32F002Ax5
#define TIM_MB TIM16
#define __HAL_DBGMCU_FREEZE_TIM_MB __HAL_DBGMCU_FREEZE_TIM16
#define __HAL_RCC_TIM_MB_CLK_ENABLE __HAL_RCC_TIM16_CLK_ENABLE
#define TIM_MB_IRQn TIM16_IRQn
#define TIM_MB_IRQHandler TIM16_IRQHandler
#endif
/* Exported variables prototypes ---------------------------------------------*/
/* Exported functions prototypes ---------------------------------------------*/
void Error_Handler(void);

View File

@@ -0,0 +1,222 @@
/**
******************************************************************************
* @file py32f0xx_hal_conf.h
* @author MCU Application Team
* @Version V1.0.0
* @Date
* @brief HAL configuration file.
******************************************************************************
**/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __PY32F0xx_HAL_CONF_H
#define __PY32F0xx_HAL_CONF_H
#ifdef __cplusplus
extern "C" {
#endif
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* ########################## Module Selection ############################## */
/**
* @brief This is the list of modules to be used in the HAL driver
*/
#define HAL_MODULE_ENABLED
#define HAL_RCC_MODULE_ENABLED
//#define HAL_ADC_MODULE_ENABLED
//#define HAL_CRC_MODULE_ENABLED
//#define HAL_COMP_MODULE_ENABLED
#define HAL_FLASH_MODULE_ENABLED
#define HAL_GPIO_MODULE_ENABLED
#define HAL_IWDG_MODULE_ENABLED
#define HAL_TIM_MODULE_ENABLED
//#define HAL_LPTIM_MODULE_ENABLED
#define HAL_PWR_MODULE_ENABLED
//#define HAL_I2C_MODULE_ENABLED
#define HAL_UART_MODULE_ENABLED
#define HAL_USART_MODULE_ENABLED
//#define HAL_SPI_MODULE_ENABLED
//#define HAL_EXTI_MODULE_ENABLED
#define HAL_CORTEX_MODULE_ENABLED
/* ########################## Oscillator Values adaptation ####################*/
#if !defined (HSI_VALUE)
#define HSI_VALUE ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz */
#endif /* HSI_VALUE */
/**
* @brief Adjust the value of External High Speed oscillator (HXT) used in your application.
* This value is used by the RCC HAL module to compute the system frequency
*/
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)24000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
#if !defined (HSE_STARTUP_TIMEOUT)
#define HSE_STARTUP_TIMEOUT ((uint32_t)200) /*!< Time out for HXT start up, in ms */
#endif /* HSE_STARTUP_TIMEOUT */
/**
* @brief Internal Low Speed Internal oscillator (LIRC) value.
*/
#if !defined (LSI_VALUE)
#define LSI_VALUE 32768U /*!< LIRC Typical Value in Hz */
#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
The real value may vary depending on the variations
in voltage and temperature. */
/**
* @brief Adjust the value of External Low Speed oscillator (LXT) used in your application.
* This value is used by the RCC HAL module to compute the system frequency
*/
#if !defined (LSE_VALUE)
#define LSE_VALUE ((uint32_t)32768) /*!< Value of the External oscillator in Hz*/
#endif /* LSE_VALUE */
#if !defined (LSE_STARTUP_TIMEOUT)
#define LSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for LXT start up, in ms */
#endif /* LSE_STARTUP_TIMEOUT */
/* Tip: To avoid modifying this file each time you need to use different HSE,
=== you can define the HSE value in your toolchain compiler preprocessor. */
/* ########################### System Configuration ######################### */
/**
* @brief This is the HAL system configuration section
*/
#define VDD_VALUE ((uint32_t)3300) /*!< Value of VDD in mv */
#define PRIORITY_HIGHEST 0
#define PRIORITY_HIGH 1
#define PRIORITY_LOW 2
#define PRIORITY_LOWEST 3
#define TICK_INT_PRIORITY ((uint32_t)PRIORITY_LOWEST) /*!< tick interrupt priority (lowest by default) */
#define USE_RTOS 0
#define PREFETCH_ENABLE 1
/* ########################## Assert Selection ############################## */
/**
* @brief Uncomment the line below to expanse the "assert_param" macro in the
* HAL drivers code
*/
/* #define USE_FULL_ASSERT 1U */
/* Includes ------------------------------------------------------------------*/
/**
* @brief Include module's header file
*/
#ifdef HAL_MODULE_ENABLED
#include "py32f0xx_hal.h"
#endif /* HAL_MODULE_ENABLED */
#ifdef HAL_RCC_MODULE_ENABLED
#include "py32f0xx_hal_rcc.h"
#endif /* HAL_RCC_MODULE_ENABLED */
#ifdef HAL_EXTI_MODULE_ENABLED
#include "py32f0xx_hal_exti.h"
#endif /* HAL_EXTI_MODULE_ENABLED */
#ifdef HAL_GPIO_MODULE_ENABLED
#include "py32f0xx_hal_gpio.h"
#endif /* HAL_GPIO_MODULE_ENABLED */
#ifdef HAL_CORTEX_MODULE_ENABLED
#include "py32f0xx_hal_cortex.h"
#endif /* HAL_CORTEX_MODULE_ENABLED */
#ifdef HAL_DMA_MODULE_ENABLED
#include "py32f0xx_hal_dma.h"
#endif /* HAL_DMA_MODULE_ENABLED */
#ifdef HAL_ADC_MODULE_ENABLED
#include "py32f0xx_hal_adc.h"
#endif /* HAL_ADC_MODULE_ENABLED */
#ifdef HAL_CRC_MODULE_ENABLED
#include "py32f0xx_hal_crc.h"
#endif /* HAL_CRC_MODULE_ENABLED */
#ifdef HAL_COMP_MODULE_ENABLED
#include "py32f0xx_hal_comp.h"
#endif /* HAL_COMP_MODULE_ENABLED */
#ifdef HAL_FLASH_MODULE_ENABLED
#include "py32f0xx_hal_flash.h"
#endif /* HAL_FLASH_MODULE_ENABLED */
#ifdef HAL_I2C_MODULE_ENABLED
#include "py32f0xx_hal_i2c.h"
#endif /* HAL_I2C_MODULE_ENABLED */
#ifdef HAL_IWDG_MODULE_ENABLED
#include "py32f0xx_hal_iwdg.h"
#endif /* HAL_IWDG_MODULE_ENABLED */
#ifdef HAL_PWR_MODULE_ENABLED
#include "py32f0xx_hal_pwr.h"
#endif /* HAL_PWR_MODULE_ENABLED */
#ifdef HAL_RTC_MODULE_ENABLED
#include "py32f0xx_hal_rtc.h"
#endif /* HAL_RTC_MODULE_ENABLED */
#ifdef HAL_SPI_MODULE_ENABLED
#include "py32f0xx_hal_spi.h"
#endif /* HAL_SPI_MODULE_ENABLED */
#ifdef HAL_TIM_MODULE_ENABLED
#include "py32f0xx_hal_tim.h"
#endif /* HAL_TIM_MODULE_ENABLED */
#ifdef HAL_LPTIM_MODULE_ENABLED
#include "py32f0xx_hal_lptim.h"
#endif /* HAL_LPTIM_MODULE_ENABLED */
#ifdef HAL_UART_MODULE_ENABLED
#include "py32f0xx_hal_uart.h"
#endif /* HAL_UART_MODULE_ENABLED */
#ifdef HAL_WWDG_MODULE_ENABLED
#include "py32f0xx_hal_wwdg.h"
#endif /* HAL_WWDG_MODULE_ENABLED */
#ifdef HAL_LED_MODULE_ENABLED
#include "py32f0xx_hal_led.h"
#endif /* HAL_LED_MODULE_ENABLED */
#ifdef HAL_USART_MODULE_ENABLED
#include "py32f0xx_hal_usart.h"
#endif /* HAL_USART_MODULE_ENABLED */
/* Exported macro ------------------------------------------------------------*/
#ifdef USE_FULL_ASSERT
/**
* @brief The assert_param macro is used for function's parameters check.
* @param expr: If expr is false, it calls assert_failed function
* which reports the name of the source file and the source
* line number of the call that failed.
* If expr is true, it returns no value.
* @retval None
*/
#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
void assert_failed(uint8_t* file, uint32_t line);
#else
#define assert_param(expr) ((void)0U)
#endif /* USE_FULL_ASSERT */
#ifdef __cplusplus
}
#endif
#endif /* __PY32F0xx_HAL_CONF_H */

View File

@@ -40,7 +40,7 @@ extern TIM_HandleTypeDef htim14;
/* USER CODE END Private defines */
void MX_TIM1_Init(void);
void MX_TIM14_Init(void);
void MX_TIMMB_Init(void);
/* USER CODE BEGIN Prototypes */

View File

@@ -288,9 +288,9 @@ RS_StatusTypeDef RS_Abort(RS_HandleTypeDef *hRS, RS_AbortTypeDef AbortMode)
if(hRS->sRS_Timeout) // if timeout setted
{
TIM14->DIER &= ~(TIM_IT_UPDATE);
TIM_MB->DIER &= ~(TIM_IT_UPDATE);
/* Disable the Peripheral */
TIM14->CR1 &= ~(TIM_CR1_CEN);
TIM_MB->CR1 &= ~(TIM_CR1_CEN);
}
if((AbortMode&ABORT_RS) == 0x00)
@@ -414,9 +414,9 @@ RS_StatusTypeDef RS_UART_RxCpltCallback(RS_HandleTypeDef *hRS)
if(hRS->sRS_Timeout) // if timeout setted
{
TIM14->DIER &= ~(TIM_IT_UPDATE);
TIM_MB->DIER &= ~(TIM_IT_UPDATE);
/* Disable the Peripheral */
TIM14->CR1 &= ~(TIM_CR1_CEN);
TIM_MB->CR1 &= ~(TIM_CR1_CEN);
}
// parse received data
@@ -447,9 +447,9 @@ RS_StatusTypeDef RS_UART_RxCpltCallback(RS_HandleTypeDef *hRS)
if(hRS->sRS_Timeout) // if timeout setted
{
TIM14->DIER &= ~(TIM_IT_UPDATE);
TIM_MB->DIER &= ~(TIM_IT_UPDATE);
/* Disable the Peripheral */
TIM14->CR1 &= ~(TIM_CR1_CEN);
TIM_MB->CR1 &= ~(TIM_CR1_CEN);
}
// parse received data
@@ -503,9 +503,9 @@ void RS_UART_Handler(RS_HandleTypeDef *hRS)
if(hRS->sRS_Timeout) // if timeout setted
if((hRS->huart->RxXferCount+1 == hRS->huart->RxXferSize) && RS_Is_RX_Busy(hRS)) // if first byte is received and receive is active
{
TIM14->DIER |= (TIM_IT_UPDATE);
TIM_MB->DIER |= (TIM_IT_UPDATE);
/* Disable the Peripheral */
TIM14->CR1 |= (TIM_CR1_CEN);
TIM_MB->CR1 |= (TIM_CR1_CEN);
RS_Set_RX_Active_Flags(hRS);
}
@@ -540,11 +540,11 @@ void RS_UART_Handler(RS_HandleTypeDef *hRS)
*/
void RS_TIM_Handler(RS_HandleTypeDef *hRS)
{
TIM14->SR = ~(TIM_IT_UPDATE);
TIM_MB->SR = ~(TIM_IT_UPDATE);
/* Disable the TIM Update interrupt */
TIM14->DIER &= ~(TIM_IT_UPDATE);
TIM_MB->DIER &= ~(TIM_IT_UPDATE);
/* Disable the Peripheral */
TIM14->CR1 &= ~(TIM_CR1_CEN);
TIM_MB->CR1 &= ~(TIM_CR1_CEN);
RS_Abort(hRS, ABORT_RS);

View File

@@ -43,7 +43,6 @@ void MX_GPIO_Init(void)
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
/* Íàñòðîéêà ïèíà PB0 (OneWire) */

View File

@@ -43,7 +43,7 @@ int main(void)
{
__HAL_DBGMCU_FREEZE_IWDG();
__HAL_DBGMCU_FREEZE_TIM1();
__HAL_DBGMCU_FREEZE_TIM14();
__HAL_DBGMCU_FREEZE_TIM_MB();
/* Reset of all peripherals, Initializes the Systick. */
HAL_Init();
@@ -53,7 +53,7 @@ int main(void)
// MX_IWDG_Init();
MX_GPIO_Init();
MX_TIM1_Init();
MX_TIM14_Init();
MX_TIMMB_Init();
MX_USART1_UART_Init();
@@ -115,16 +115,23 @@ static void APP_SystemClockConfig(void)
RCC->ICSCR |= (RCC_HSICALIBRATION_24MHz << RCC_ICSCR_HSI_TRIM_Pos);
/* Îòêëþ÷åíèå LSI è LSE */
#ifdef RCC_LSE_SUPPORT
RCC->CSR &= ~RCC_CSR_LSION;
RCC->BDCR &= ~RCC_BDCR_LSEON;
#endif
/* Îòêëþ÷åíèå áàéïàñà HSE */
RCC->CR &= ~RCC_HSE_BYPASS_DISABLE;
RCC->CR &= ~0x00000000U;
/* Óñòàíîâêà èñòî÷íèêà ñèñòåìíîé òàêòîâîé ÷àñòîòû */
RCC->CFGR &= ~RCC_CFGR_SW;
#ifdef PY32F002Bx5
RCC->CFGR |= RCC_SYSCLKSOURCE_HSISYS;
while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_SYSCLKSOURCE_HSISYS);
#endif
#ifdef PY32F002Ax5
RCC->CFGR |= RCC_SYSCLKSOURCE_HSI;
while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_SYSCLKSOURCE_HSI);
#endif
/* Óñòàíîâêà äåëèòåëåé */
RCC->CFGR &= ~(RCC_CFGR_HPRE | RCC_CFGR_PPRE_1);

View File

@@ -88,7 +88,7 @@ void USART1_IRQHandler(void)
/**
* @brief This function handles TIM2 global interrupt.
*/
void TIM14_IRQHandler(void)
void TIM_MB_IRQHandler(void)
{
/* USER CODE BEGIN TIM2_IRQn 0 */
RS_TIM_Handler(&hmodbus1);

View File

@@ -98,36 +98,38 @@ void MX_TIM1_Init(void)
}
/* TIM2 init function */
void MX_TIM14_Init(void)
void MX_TIMMB_Init(void)
{
// Включение тактирования TIM1
__HAL_RCC_TIM14_CLK_ENABLE();
__HAL_RCC_TIM_MB_CLK_ENABLE();
// Установка предделителя (Prescaler)
TIM14->PSC = 24-1;
TIM_MB->PSC = 24-1;
// Установка режима счета вверх
TIM14->CR1 &= ~TIM_CR1_DIR;
TIM_MB->CR1 &= ~TIM_CR1_DIR;
// Установка периода (ARR - Auto-reload register) на 50 миллисекунд
TIM14->ARR = 50000;
TIM_MB->ARR = 50000;
// Установка делителя частоты (Clock Division)
TIM14->CR1 &= ~TIM_CR1_CKD;
TIM_MB->CR1 &= ~TIM_CR1_CKD;
// Отключение режима предзагрузки
TIM14->CR1 &= ~TIM_CR1_ARPE;
TIM_MB->CR1 &= ~TIM_CR1_ARPE;
// Выбор внутреннего источника тактирования
TIM14->SMCR &= ~TIM_SMCR_SMS;
TIM_MB->SMCR &= ~TIM_SMCR_SMS;
// Настройка триггерного выхода (TRGO)
TIM14->CR2 &= ~TIM_CR2_MMS;
TIM_MB->CR2 &= ~TIM_CR2_MMS;
// Отключение режима Master/Slave
TIM14->SMCR &= ~TIM_SMCR_MSM;
TIM_MB->SMCR &= ~TIM_SMCR_MSM;
HAL_NVIC_SetPriority(TIM_MB_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM_MB_IRQn);
// /* USER CODE BEGIN TIM2_Init 0 */
// /* USER CODE END TIM2_Init 0 */
@@ -138,7 +140,7 @@ void MX_TIM14_Init(void)
// /* USER CODE BEGIN TIM2_Init 1 */
// /* USER CODE END TIM2_Init 1 */
// htim14.Instance = TIM14;
// htim14.Instance = TIM_MB;
// htim14.Init.Prescaler = (24) - 1;
// htim14.Init.CounterMode = TIM_COUNTERMODE_UP;
// htim14.Init.Period = 50000;
@@ -164,69 +166,6 @@ void MX_TIM14_Init(void)
// /* USER CODE END TIM2_Init 2 */
}
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{
if(tim_baseHandle->Instance==TIM1)
{
/* USER CODE BEGIN TIM1_MspInit 0 */
/* USER CODE END TIM1_MspInit 0 */
/* TIM1 clock enable */
__HAL_RCC_TIM1_CLK_ENABLE();
/* USER CODE BEGIN TIM1_MspInit 1 */
/* USER CODE END TIM1_MspInit 1 */
}
else if(tim_baseHandle->Instance==TIM14)
{
/* USER CODE BEGIN TIM14_MspInit 0 */
/* USER CODE END TIM14_MspInit 0 */
/* TIM14 clock enable */
__HAL_RCC_TIM14_CLK_ENABLE();
/* TIM14 interrupt Init */
HAL_NVIC_SetPriority(TIM14_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM14_IRQn);
/* USER CODE BEGIN TIM14_MspInit 1 */
/* USER CODE END TIM14_MspInit 1 */
}
}
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
{
if(tim_baseHandle->Instance==TIM1)
{
/* USER CODE BEGIN TIM1_MspDeInit 0 */
/* USER CODE END TIM1_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM1_CLK_DISABLE();
/* TIM1 interrupt Deinit */
HAL_NVIC_DisableIRQ(TIM1_BRK_UP_TRG_COM_IRQn);
/* USER CODE BEGIN TIM1_MspDeInit 1 */
/* USER CODE END TIM1_MspDeInit 1 */
}
else if(tim_baseHandle->Instance==TIM14)
{
/* USER CODE BEGIN TIM14_MspDeInit 0 */
/* USER CODE END TIM14_MspDeInit 0 */
/* TIM14 clock disable */
__HAL_RCC_TIM14_CLK_DISABLE();
/* TIM14 interrupt Deinit */
HAL_NVIC_DisableIRQ(TIM14_IRQn);
/* USER CODE BEGIN TIM14_MspDeInit 1 */
/* USER CODE END TIM14_MspDeInit 1 */
}
}
/* USER CODE BEGIN 1 */