stm32f051 (или другой) запись получение файла и запись
stm32f051 (или другой) запись получение файла и запись
привет
подскажите может есть где примерчик как получать по USART файл и записывать его во Flash (получается я хочу получать файл и прошивать часть АРМа).
с USART'ом я работать умею (точнее отправляю текст и получаю его обратно), но никак не могу смекнуть как поступать в случае передачи файла (динамически надо переменную под передачу делать?).
и потом еще не могу уразуметь как записывать получаемый файл во Flash
пока вот такой набросок по записи:
void WriteToFlash(unsigned char data){
HAL_FLASH_Unlock();
HAL_FLASH_Program_IT(FLASH_TYPEERASE_PAGES TYPEERASEDATA_WORD, 0x800A000, 0xffff);
HAL_FLASH_Program_IT(TYPEPROGRAMDATA_WORD, &data, ControllerConfig.powerBias);
HAL_FLASH_Lock();
}
подскажите может есть где примерчик как получать по USART файл и записывать его во Flash (получается я хочу получать файл и прошивать часть АРМа).
с USART'ом я работать умею (точнее отправляю текст и получаю его обратно), но никак не могу смекнуть как поступать в случае передачи файла (динамически надо переменную под передачу делать?).
и потом еще не могу уразуметь как записывать получаемый файл во Flash
пока вот такой набросок по записи:
void WriteToFlash(unsigned char data){
HAL_FLASH_Unlock();
HAL_FLASH_Program_IT(FLASH_TYPEERASE_PAGES TYPEERASEDATA_WORD, 0x800A000, 0xffff);
HAL_FLASH_Program_IT(TYPEPROGRAMDATA_WORD, &data, ControllerConfig.powerBias);
HAL_FLASH_Lock();
}
- Реклама
Re: stm32f051 (или другой) запись получение файла и запись
и с UART, как оказалось, я не умею
данные получаю и потом отправляю
но на комп приходит не все
да еще и с отставанием в одну отсылку
данные получаю и потом отправляю
но на комп приходит не все
да еще и с отставанием в одну отсылку
Re: stm32f051 (или другой) запись получение файла и запись
где я тут напортачил?
на картинке во вложении розовым - отправленная последовательность на АРМ
черным - принятая от АРМа
куда теряются и почему сразу все не передается?
Спойлер
Код: Выделить всё
#define USART_BUFFER_SIZE 16
unsigned char usartBuf[USART_BUFFER_SIZE];
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
uint16_t len = huart->RxXferSize;
uint8_t *d = huart->pRxBuffPtr;
if((uint32_t)huart->Instance == (uint32_t)USART1){
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_SET);
// ЕСЛИ счетчик получателя обнулился, то данные получены все и
if(huart->RxXferCount == 0){
// передаем данные обратно отправителю
HAL_UART_Transmit_IT(&huart1, &usartBuf[0], USART_BUFFER_SIZE);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_SET);
}
}
// инициализируем получатель для получения новой порции данных
HAL_UART_Receive_IT(huart, &usartBuf[0], USART_BUFFER_SIZE);
}
void UartReceive(void){
static uint8_t * pRxBuffPtr;
static int UartInit=0;
if (!UartInit) {
pRxBuffPtr = &usartBuf[0]; // получаем указатель на данные
// передаем в получатель указатель на данные и допустимый размер для данных
HAL_UART_Receive_IT(&huart1, pRxBuffPtr, USART_BUFFER_SIZE);
UartInit = 1;
}
// проверяем, если у нас адрес на данные изменился, то
while (pRxBuffPtr != huart1.pRxBuffPtr) {
// инкрементим адрес
pRxBuffPtr++;
// И ЕСЛИ адрес сохраненный ранее РАВЕН адресу последней ячейки массива, то
if (pRxBuffPtr == &usartBuf[0] + USART_BUFFER_SIZE) {
// заменяем адрес на начальную ячейку
pRxBuffPtr = &usartBuf[0];
}
}
}
черным - принятая от АРМа
куда теряются и почему сразу все не передается?
- Вложения
-
- Безымянный.png
- (22.96 КБ) 329 скачиваний
Re: stm32f051 (или другой) запись получение файла и запись
Ключевое слово -hal.
Re: stm32f051 (или другой) запись получение файла и запись
но hal ведь сам производитель делает
и полагаю наиболее актуальное, чем spl
и полагаю наиболее актуальное, чем spl
- Реклама
Re: stm32f051 (или другой) запись получение файла и запись
И кал и спл в топку, скачайте сниппетсы и смотрите примеры кода в конце RM ...
Re: stm32f051 (или другой) запись получение файла и запись
не вижу, они точно на сайте st ?dosikus писал(а):, скачайте сниппетсы и смотрите примеры кода в конце RM ...
Re: stm32f051 (или другой) запись получение файла и запись
решена задача
под виндами буфер мешал
реализовал свой протокол и все взлетело
всем спасибо
под виндами буфер мешал
реализовал свой протокол и все взлетело
всем спасибо



