stm32f051 (или другой) запись получение файла и запись

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
briareus
Родился
Сообщения: 12
Зарегистрирован: Вт июл 05, 2016 15:02:03

stm32f051 (или другой) запись получение файла и запись

Сообщение briareus »

привет
подскажите может есть где примерчик как получать по 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();
}
Реклама
briareus
Родился
Сообщения: 12
Зарегистрирован: Вт июл 05, 2016 15:02:03

Re: stm32f051 (или другой) запись получение файла и запись

Сообщение briareus »

и с UART, как оказалось, я не умею
данные получаю и потом отправляю
но на комп приходит не все
да еще и с отставанием в одну отсылку
Реклама
briareus
Родился
Сообщения: 12
Зарегистрирован: Вт июл 05, 2016 15:02:03

Re: stm32f051 (или другой) запись получение файла и запись

Сообщение briareus »

где я тут напортачил?
Спойлер

Код: Выделить всё

#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 скачиваний
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: stm32f051 (или другой) запись получение файла и запись

Сообщение dosikus »

Ключевое слово -hal.
Реклама
Эиком - электронные компоненты и радиодетали
briareus
Родился
Сообщения: 12
Зарегистрирован: Вт июл 05, 2016 15:02:03

Re: stm32f051 (или другой) запись получение файла и запись

Сообщение briareus »

но hal ведь сам производитель делает
и полагаю наиболее актуальное, чем spl
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: stm32f051 (или другой) запись получение файла и запись

Сообщение dosikus »

И кал и спл в топку, скачайте сниппетсы и смотрите примеры кода в конце RM ...
Реклама
briareus
Родился
Сообщения: 12
Зарегистрирован: Вт июл 05, 2016 15:02:03

Re: stm32f051 (или другой) запись получение файла и запись

Сообщение briareus »

dosikus писал(а):, скачайте сниппетсы и смотрите примеры кода в конце RM ...
не вижу, они точно на сайте st ?
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: stm32f051 (или другой) запись получение файла и запись

Сообщение dosikus »

Хоть и поздно, но ...

http://www.st.com/content/st_com/en/pro ... tId=LN1898

Изображение
briareus
Родился
Сообщения: 12
Зарегистрирован: Вт июл 05, 2016 15:02:03

Re: stm32f051 (или другой) запись получение файла и запись

Сообщение briareus »

решена задача
под виндами буфер мешал
реализовал свой протокол и все взлетело

всем спасибо
Ответить

Вернуться в «Разные вопросы по МК»