Прием данных по UART и их отображение на дисплее

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
kotarnold
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

Прием данных по UART и их отображение на дисплее

Сообщение kotarnold »

Разбираю урок с народстрима и не догоняю: а как он данные, пришедшие в UART, выводит на дисплей? Где sprintf того, что пришло в UART?

код:

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

int main(void)
{

  /* USER CODE BEGIN 1 */
	char str[9]={0};
  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART2_UART_Init();

  /* USER CODE BEGIN 2 */
	LCD_ini();
	LCD_Clear();
	sprintf(str,"Stm32F407VG");
	LCD_String(str);
	LCD_SetPos(10, 2);
	sprintf(str,"ARM mc");
	LCD_String(str);
	HAL_UART_Receive_IT(&huart2, (uint8_t*) str, 8);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	if(huart2.RxXferCount==0)
	{
		HAL_Delay(100);
		LCD_SetPos(0, 3);
		str[8]=0;
		LCD_String(str);
		HAL_UART_Receive_IT(&huart2, (uint8_t*) str, 8);
	}
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

}
Реклама
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Re: Прием данных по UART и их отображение на дисплее

Сообщение Myp3ik »

Вот так выводит

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

while (1)
  {
   if(huart2.RxXferCount==0)
   {
      HAL_Delay(100);
      LCD_SetPos(0, 3);
      str[8]=0;
      LCD_String(str);
      HAL_UART_Receive_IT(&huart2, (uint8_t*) str, 8);
   }
Иван Сусанин - первый полупроводник :solder:
Реклама
Аватара пользователя
kotarnold
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

Re: Прием данных по UART и их отображение на дисплее

Сообщение kotarnold »

Ну это он пишет так. В реале, если разобрать построково, то вывода на дисплей в этом вайле не происходит.
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Re: Прием данных по UART и их отображение на дисплее

Сообщение Myp3ik »

LCD_String(str); - как раз отправляет строку в дисплей
Иван Сусанин - первый полупроводник :solder:
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
kotarnold
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

Re: Прием данных по UART и их отображение на дисплее

Сообщение kotarnold »

Во блин. А у меня не работает почему-то.
Реклама
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Re: Прием данных по UART и их отображение на дисплее

Сообщение Myp3ik »

Я конечно не знаток куба, но может здесь имелось в виду

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

if (huart2.RxXferCount != 0)
вместо

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

if (huart2.RxXferCount == 0)
Иван Сусанин - первый полупроводник :solder:
Реклама
Аватара пользователя
kotarnold
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

Re: Прием данных по UART и их отображение на дисплее

Сообщение kotarnold »

Попробовал. В итоге там, где должны отображаться цифры, принятые по UART, отображается лишний раз "ARM mc". Полагаю, это повтор от

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

sprintf(str,"ARM mc");
Т.е. для адекватного отображения данных, пришедших по UART в sprintf нужно передать str и данные, которые мы получили в прерывании. Не понимаю - за какую переменную их обозначать?
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Прием данных по UART и их отображение на дисплее

Сообщение VladislavS »

Для начала откладываем плату в сторону и наслаждаемся занимательным чтивом
СпойлерИзображение
Аватара пользователя
kotarnold
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

Re: Прием данных по UART и их отображение на дисплее

Сообщение kotarnold »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3636555#p3636555"]Для начала откладываем плату в сторону и наслаждаемся занимательным чтивом
СпойлерИзображение
[/uquote]

Да, это никогда не бывает лишним, но сейчас я пытаюсь найти информацию о том, как данные, полученные по USART в прерывании, обличить в чаровую переменную.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Прием данных по UART и их отображение на дисплее

Сообщение VladislavS »

[uquote="kotarnold",url="/forum/viewtopic.php?p=3636560#p3636560"]но сейчас я пытаюсь найти информацию о том, как данные, полученные по USART в прерывании, обличить в чаровую переменную.[/uquote]Начинать надо с начала! Чтобы хотя бы знать значение слов, которые ты пытаешься в случайном порядке употреблять.
Аватара пользователя
kotarnold
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

Re: Прием данных по UART и их отображение на дисплее

Сообщение kotarnold »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3636579#p3636579"][uquote="kotarnold",url="/forum/viewtopic.php?p=3636560#p3636560"]но сейчас я пытаюсь найти информацию о том, как данные, полученные по USART в прерывании, обличить в чаровую переменную.[/uquote]Начинать надо с начала! Чтобы хотя бы знать значение слов, которые ты пытаешься в случайном порядке употреблять.[/uquote]

Спасибо, но мне удобнее разбираться по ходу пьесы, привязавшись к конкретным примерам, чем изучать сухую теорию.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Прием данных по UART и их отображение на дисплее

Сообщение VladislavS »

Ну вот смотри. У тебя в примере есть код

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

char str[9]={0};
и

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

LCD_String(str);
Что из него тебе не понятно?
Аватара пользователя
kotarnold
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

Re: Прием данных по UART и их отображение на дисплее

Сообщение kotarnold »

Непонятно то, почему, несмотря на это, данные с UARTa не отображаются. Переходник USB-UART исправен, данные доходят до нужного пина контроллера (Проверял осцилом), общий провод не оборван, Baud rate в программе и в терминале совпадают. Видимо, что-то в программе.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Прием данных по UART и их отображение на дисплее

Сообщение VladislavS »

[uquote="kotarnold",url="/forum/viewtopic.php?p=3636597#p3636597"]Видимо, что-то в программе.[/uquote]Трудно поспорить.

Отладчик есть? Найди обработчик прерываний UART и посмотри срабатывают ли они при приёме данных.
Аватара пользователя
kotarnold
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

Re: Прием данных по UART и их отображение на дисплее

Сообщение kotarnold »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3636605#p3636605"][uquote="kotarnold",url="/forum/viewtopic.php?p=3636597#p3636597"]Видимо, что-то в программе.[/uquote]Трудно поспорить.

Отладчик есть? Найди обработчик прерываний UART и посмотри срабатывают ли они при приёме данных.[/uquote]

Так, а вот это уже интересно. Я в режиме "Debug" прохожу по программе. Да, те надписи, которые появлялись ранее, теперь появляются в соответствии с шагами. А как мне попасть в обработчик прерываний? Я стою на коде

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

			HAL_UART_Receive_IT(&huart4, (uint8_t*)&str, 8);
и отсылаю с компа в UART цифры, но в Атоллике ничего не происходит.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Прием данных по UART и их отображение на дисплее

Сообщение VladislavS »

[uquote="kotarnold",url="/forum/viewtopic.php?p=3636617#p3636617"]и отсылаю с компа в UART цифры,[/uquote]Что в твоём понимании "цифры" ?

[uquote="kotarnold",url="/forum/viewtopic.php?p=3636617#p3636617"]но в Атоллике ничего не происходит.[/uquote]А что должно произойти?

Может всё же с азов начать? Ну там "Hello world!" типа...
Аватара пользователя
kotarnold
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

Re: Прием данных по UART и их отображение на дисплее

Сообщение kotarnold »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3636622#p3636622"][uquote="kotarnold",url="/forum/viewtopic.php?p=3636617#p3636617"]и отсылаю с компа в UART цифры,[/uquote]Что в твоём понимании "цифры" ?

[uquote="kotarnold",url="/forum/viewtopic.php?p=3636617#p3636617"]но в Атоллике ничего не происходит.[/uquote]А что должно произойти?

Может всё же с азов начать? Ну там "Hello world!" типа...[/uquote]

Цифры - это цифры. Я отправляю 8-мизначные цифры, как делает автор народстрима.

Считаете, что написание хелловорда однозначно даст мне достаточные навыки для работы с дебаггером, чтобы отслеживать прерывания по поступлению данных в уарт?
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Re: Прием данных по UART и их отображение на дисплее

Сообщение Myp3ik »

Нужно отправлять не восьмизначные цифры, а 8 байт, то есть 8 цифр в диапазоне от 32 до 127 (ASCII таблица).
Иван Сусанин - первый полупроводник :solder:
Аватара пользователя
kotarnold
Нашел транзистор. Понюхал.
Сообщения: 157
Зарегистрирован: Пн мар 14, 2016 15:38:50
Откуда: Питер

Re: Прием данных по UART и их отображение на дисплее

Сообщение kotarnold »

[uquote="Myp3ik",url="/forum/viewtopic.php?p=3636632#p3636632"]Нужно отправлять не восьмизначные цифры, а 8 байт, то есть 8 цифр в диапазоне от 32 до 127 (ASCII таблица).[/uquote]


А как же тогда у автора происходит следующее: https://youtu.be/J0Rgh1Ndi-4?t=981 ???
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Re: Прием данных по UART и их отображение на дисплее

Сообщение Myp3ik »

Очень просто. Программа берет это число как строку, как набор ASCII символов. Строка "12345678" по уарту уйдет как набор байт 49 - 50 - 51 - 52 - 53 - 54 - 55 - 56
http://www.asciitable.com/
Иван Сусанин - первый полупроводник :solder:
Ответить

Вернуться в «ARM»