Структуризировано: добавлены комменты и переименованы переменные
This commit is contained in:
@@ -1,190 +0,0 @@
|
||||
#include "flash_general.h"
|
||||
FLASH_EraseInitTypeDef EraseInitStruct;
|
||||
extern HAL_StatusTypeDef res_hal;
|
||||
unsigned CRC_Update;
|
||||
//uint32_t PAGE_OFFSET = ((uint32_t)((4-1) * 0x0400));
|
||||
uint32_t PAGE_NUMB = 127;
|
||||
|
||||
//----------------------------------------------------------
|
||||
/*-----------------BOOTLOADER FUNCTIONS-------------------*/
|
||||
|
||||
/* Записать в память данные, произвольного размера */
|
||||
HAL_StatusTypeDef FLASH_Write_Data(uint32_t* Address, uint8_t* Data, int Data_size)
|
||||
{
|
||||
int data_cnt = 0;
|
||||
uint32_t adr;а
|
||||
uint32_t word_data;
|
||||
|
||||
|
||||
res_hal = HAL_FLASH_Unlock();
|
||||
|
||||
if (res_hal != HAL_OK) return res_hal;
|
||||
|
||||
for (adr = *Address; adr < *Address + Data_size; adr = adr + 4)
|
||||
{
|
||||
|
||||
|
||||
word_data = (
|
||||
Data[data_cnt] |
|
||||
Data[data_cnt + 1] << 8 |
|
||||
Data[data_cnt + 2] << 16 |
|
||||
Data[data_cnt + 3] << 24);
|
||||
|
||||
if (adr == (0x40+USART2_IRQn*4)+MAIN_APP_START_ADDRESS)
|
||||
{
|
||||
// check if uart handler is correct
|
||||
if (word_data == FLASH_Read_Word(MAIN_APP_START_ADDRESS+4) + 0x1A) // if there is no specific address for uart handler
|
||||
{
|
||||
word_data = FLASH_Read_Word(UART_HANDLER_ADD); // write address of bootloader uart handler
|
||||
CRC_Update = 1;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
res_hal = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, adr, word_data);
|
||||
|
||||
if (res_hal != HAL_OK) return res_hal;
|
||||
|
||||
data_cnt += 4;
|
||||
}
|
||||
|
||||
*Address += Data_size;
|
||||
res_hal = HAL_FLASH_Lock();
|
||||
|
||||
return res_hal;
|
||||
}
|
||||
|
||||
/* Очистить приложение */
|
||||
HAL_StatusTypeDef FLASH_Erase_App(void) //
|
||||
{
|
||||
uint32_t PageError = 0x00;
|
||||
|
||||
res_hal = HAL_FLASH_Unlock();
|
||||
|
||||
if (res_hal != HAL_OK)
|
||||
{
|
||||
__ASM("");
|
||||
return res_hal;
|
||||
}
|
||||
|
||||
EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS;// erase pages
|
||||
EraseInitStruct.Banks = FLASH_BANK_1;
|
||||
EraseInitStruct.Sector = KEY_FLASH_SECTOR_X+1; //first sector for erase
|
||||
EraseInitStruct.NbSectors = 8;// num of sector that need to be erased
|
||||
|
||||
res_hal = HAL_FLASHEx_Erase(&EraseInitStruct, &PageError);
|
||||
|
||||
if (res_hal != HAL_OK)
|
||||
{
|
||||
__ASM("");
|
||||
return res_hal;
|
||||
}
|
||||
|
||||
res_hal = HAL_FLASH_Lock();
|
||||
|
||||
return res_hal;
|
||||
}
|
||||
|
||||
/* Записать ключ в память */
|
||||
void SetKey(void)
|
||||
{
|
||||
HAL_FLASH_Unlock();
|
||||
|
||||
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, BOOTLOADER_KEY_SECTOR_ADR, BL_KEY_APP_WRITTEN);
|
||||
|
||||
HAL_FLASH_Lock();
|
||||
}
|
||||
/* Считать ключ из памяти */
|
||||
uint32_t ReadKey(void)
|
||||
{
|
||||
return (*(__IO uint32_t*)BOOTLOADER_KEY_SECTOR_ADR);
|
||||
}
|
||||
/* Очистить настройки бутлоадера для запуска приложения (CRC) */
|
||||
void ResetAppSettings(void)
|
||||
{
|
||||
HAL_FLASH_Unlock();
|
||||
uint32_t PageError = 0x00;
|
||||
|
||||
EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS;// erase pages
|
||||
EraseInitStruct.Banks = APP_SET_FLASH_BANK_X;
|
||||
EraseInitStruct.Sector = APP_SET_FLASH_SECTOR_X; //address
|
||||
EraseInitStruct.NbSectors = 1;// num of erased pages
|
||||
|
||||
HAL_FLASHEx_Erase(&EraseInitStruct, &PageError);
|
||||
HAL_FLASH_Lock();
|
||||
|
||||
}
|
||||
/* Очистить сектор с ключом (ключ, количество перезагрузок из-за WDGT) */
|
||||
void ResetKeySector(void)
|
||||
{
|
||||
HAL_FLASH_Unlock();
|
||||
uint32_t PageError = 0x00;
|
||||
|
||||
EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS;// erase pages
|
||||
EraseInitStruct.Banks = KEY_FLASH_BANK_X;
|
||||
EraseInitStruct.Sector = KEY_FLASH_SECTOR_X; //address
|
||||
EraseInitStruct.NbSectors = 1;// num of erased pages
|
||||
|
||||
HAL_FLASHEx_Erase(&EraseInitStruct, &PageError);
|
||||
HAL_FLASH_Lock();
|
||||
|
||||
}
|
||||
/*-----------------BOOTLOADER FUNCTIONS-------------------*/
|
||||
//----------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
//-----------------ELEMENTARY FUNCTIONS---------------------
|
||||
/* functions for reading bytes/halswords/words */
|
||||
uint8_t FLASH_Read_Byte(uint32_t add)
|
||||
{
|
||||
return (*(__IO uint8_t*)(add));
|
||||
}
|
||||
uint16_t FLASH_Read_HalfWord(uint32_t add)
|
||||
{
|
||||
return (*(__IO uint16_t*)(add));
|
||||
}
|
||||
uint32_t FLASH_Read_Word(uint32_t add)
|
||||
{
|
||||
return (*(__IO uint32_t*)(add));
|
||||
}
|
||||
/* functions for writing bytes/halswords/words */
|
||||
HAL_StatusTypeDef FLASH_Write_Byte(uint32_t Address, uint8_t Data)
|
||||
{
|
||||
res_hal = HAL_FLASH_Unlock();
|
||||
|
||||
if (res_hal != HAL_OK) return res_hal;
|
||||
|
||||
res_hal = HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, Address, (uint8_t)(Data));
|
||||
|
||||
if (res_hal != HAL_OK) return res_hal;
|
||||
|
||||
res_hal = HAL_FLASH_Lock();
|
||||
return res_hal;
|
||||
}
|
||||
HAL_StatusTypeDef FLASH_Write_HalfWord(uint32_t Address, uint16_t Data)
|
||||
{
|
||||
res_hal = HAL_FLASH_Unlock();
|
||||
|
||||
if (res_hal != HAL_OK) return res_hal;
|
||||
|
||||
res_hal = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, Address, (uint16_t)(Data));
|
||||
|
||||
if (res_hal != HAL_OK) return res_hal;
|
||||
|
||||
res_hal = HAL_FLASH_Lock();
|
||||
return res_hal;
|
||||
}
|
||||
HAL_StatusTypeDef FLASH_Write_Word(uint32_t Address, uint32_t Data)
|
||||
{
|
||||
res_hal = HAL_FLASH_Unlock();
|
||||
if (res_hal != HAL_OK) return res_hal;
|
||||
|
||||
res_hal = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, (uint32_t)(Data));
|
||||
if (res_hal != HAL_OK) return res_hal;
|
||||
|
||||
res_hal = HAL_FLASH_Lock();
|
||||
return res_hal;
|
||||
}
|
||||
//----------------------------------------------------------
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
/*********************************UART**************************************
|
||||
Данный файл содержит объявления базовых функции и дефайны для инициализации
|
||||
UART.
|
||||
***************************************************************************/
|
||||
#ifndef __UART_GENERAL_H_
|
||||
#define __UART_GENERAL_H_
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////---USER SETTINGS---/////////////////////////
|
||||
#define HAL_UART_MODULE_ENABLED // need to uncomment these defines in stm32f4xx_hal_conf.h
|
||||
#define HAL_USART_MODULE_ENABLED // also need to add hal_uart.c (source code)
|
||||
|
||||
//#define USE_USART1
|
||||
//#define USE_USART2
|
||||
//#define USE_USART3
|
||||
//#define USE_UART4
|
||||
//#define USE_UART5
|
||||
//#define USE_USART6
|
||||
/* note: used uart defines in modbus.h */
|
||||
|
||||
/////////////////////////---USER SETTINGS---/////////////////////////
|
||||
#include "periph_general.h"
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////---DEFINES---////////////////////////////
|
||||
/**
|
||||
* @brief Analog for HAL define. Remade with pointer to structure.
|
||||
* @note @ref __HAL_LINKDMA.
|
||||
*/
|
||||
#define __USER_LINKDMA(__HANDLE__, __PPP_DMA_FIELD__, __DMA_HANDLE__) \
|
||||
do{ \
|
||||
(__HANDLE__)->__PPP_DMA_FIELD__ = (__DMA_HANDLE__); \
|
||||
(__DMA_HANDLE__)->Parent = (__HANDLE__);} while(0U)
|
||||
|
||||
|
||||
////////////////////////////---DEFINES---////////////////////////////
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
///////////////////////---STRUCTURES & ENUMS---//////////////////////
|
||||
typedef struct // struct with settings for custom function
|
||||
{
|
||||
UART_HandleTypeDef huart;
|
||||
|
||||
GPIO_TypeDef *GPIOx;
|
||||
uint16_t GPIO_PIN_RX;
|
||||
uint16_t GPIO_PIN_TX;
|
||||
|
||||
DMA_Stream_TypeDef *DMAChannel; // DMAChannel = 0 if doesnt need
|
||||
uint32_t DMA_CHANNEL_X; // DMAChannel = 0 if doesnt need
|
||||
|
||||
|
||||
}UART_SettingsTypeDef;
|
||||
///////////////////////---STRUCTURES & ENUMS---//////////////////////
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////---FUNCTIONS---///////////////////////////
|
||||
/**
|
||||
* @brief Initialize UART with UART_SettingsTypeDef structure.
|
||||
* @param suart - указатель на структуру с настройками UART.
|
||||
* @return HAL status.
|
||||
* @note Данная структура содержит хендл ЮАРТ и настройки перефирии (GPIO)
|
||||
*/
|
||||
/* functions for reading bytes/halswords/words */
|
||||
uint8_t FLASH_Read_Byte(uint32_t add);
|
||||
uint16_t FLASH_Read_HalfWord(uint32_t add);
|
||||
uint32_t FLASH_Read_Word(uint32_t add);
|
||||
/* functions for writing bytes/halswords/words */
|
||||
HAL_StatusTypeDef FLASH_Write_Byte(uint32_t Address, uint8_t Data);
|
||||
HAL_StatusTypeDef FLASH_Write_HalfWord(uint32_t Address, uint16_t Data);
|
||||
HAL_StatusTypeDef FLASH_Write_Word(uint32_t Address, uint32_t Data);
|
||||
///////////////////////////---FUNCTIONS---///////////////////////////
|
||||
|
||||
#endif // __UART_GENERAL_H_
|
||||
@@ -1,4 +1,4 @@
|
||||
/**********************************TIM**************************************
|
||||
/*********************************GPIO**************************************
|
||||
Данный файл содержит базовые функции для инициализации портов.
|
||||
//-------------------Функции-------------------//
|
||||
@func users
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/**********************************TIM**************************************
|
||||
/*********************************GPIO**************************************
|
||||
Данный файл содержит объявления базовых функции и дефайны для инициализации
|
||||
портов.
|
||||
***************************************************************************/
|
||||
@@ -7,13 +7,13 @@
|
||||
|
||||
#include "periph_general.h"
|
||||
|
||||
|
||||
/* undone
|
||||
#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: \
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/**********************************TIM**************************************
|
||||
/********************************PERIPH*************************************
|
||||
Данный файл содержит инклюды и дефайны для всех библиотек базовой перефирии.
|
||||
***************************************************************************/
|
||||
#ifndef __PERIPH_GENERAL_H_
|
||||
|
||||
Reference in New Issue
Block a user