Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/74: Рейтинг темы: голосов - 74, средняя оценка - 4.68
 Аватар для GaFBich
22 / 22 / 5
Регистрация: 18.03.2010
Сообщений: 331

STM32F103C8T6 HAL UART

26.09.2016, 23:13. Показов 14425. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.
Ситуация такая, не могу понять как правильно реализовать прием данных по UART не использую к примеру прерывания.
У меня есть GSM модем m590e, необходимо принимать с него данные и обрабатывать.

Это отправка данных в модем
C++
1
2
3
4
5
6
7
8
9
10
11
unsigned char CR=0x0D;
unsigned char LF=0x0A;
void UART_Write(unsigned char *pack)
{
    int a = strlen((unsigned char *)pack);
    HAL_UART_Transmit(&huart1,(unsigned char *)pack,a,10000);
    HAL_UART_Transmit(&huart1,&CR,1,10000);
    HAL_UART_Transmit(&huart1,&LF,1,10000);
}
...
UART_Write("AT+CGSN");
Проблема с приемом, точнее как правильно принимать не используя прерывания!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.09.2016, 23:13
Ответы с готовыми решениями:

Сообщения для 2 UART выводятся в 1 UART, STM32F103C8T6
Почему может неправильно работать uart? Подключил 1 uart к пк через usb/uart переходник, а второй к gsm модему. В первый уарт вывожу инфу...

Одновременный прием и передача по uart в stm32f103c8t6
Вообщем есть задача создать устройство которое будет опрашивать счётчики (по 485-му интерфейсу) и передавать данные. Модем по простому....

STM32F407 + HAL + UART
Доброго времени суток! Изучаю основы работы UART. Отладочная плата STM32F407 Discovery. Библиотека HAL. Подключаю через UART...

47
Эксперт по электронике
7212 / 3391 / 347
Регистрация: 28.10.2011
Сообщений: 13,331
Записей в блоге: 7
02.10.2016, 00:01
Студворк — интернет-сервис помощи студентам
Может я чего-то не понимаю но какой смысл копировать в цикле из массива приема и по индексу, если функция приема всегда помещает данные в первый элемент массива (предполагаю что он типа uint32_t)?
Логичнее было бы копировать данные из элемента массива с нулевым индексом.
0
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
02.10.2016, 00:16
Для наглядности.
По сути это эхо.
Мне вот, что больше в хал не понятно, после вызова "HAL_UART_Receive_IT(&huart6, receiveBuffer, 4);" перестаёт вызываться обработчик прерывания на отправку данных, но при этом данные уходят.
0
Тутошний я
 Аватар для Grey
2147 / 1202 / 225
Регистрация: 03.11.2009
Сообщений: 4,424
Записей в блоге: 2
02.10.2016, 01:31

Не по теме:

Цитата Сообщение от GaFBich Посмотреть сообщение
а точно ли регистр SR, по даташиту вроде как ISR?
видимо имелось в виду Interrupt Service Routine(процедура обработки прерывания)



Добавлено через 23 минуты
Витальич, я не уверен, но посмотри состояние регистров BASEPRI, PRIMASK, FAULTMASK.
0
 Аватар для GaFBich
22 / 22 / 5
Регистрация: 18.03.2010
Сообщений: 331
02.10.2016, 22:42  [ТС]
Подскажите, почему при обработке принятых данных, условие не отрабатывается?

C++
1
2
3
4
5
6
7
8
9
int UART_Read(char *txt)
{
    while(h!=50)
    {
    if((strstr(txt,d)!=NULL)&&(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_RXNE)==RESET)) {h=0; startup =1; return 1;}
    while(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_RXNE)==RESET){};
    HAL_UART_Receive(&huart1,&dummy,sizeof(dummy),10);
    d[h++]=dummy;
}
C++
1
2
3
4
5
6
int main(void)
{
...
UART_Read("MODEM:STARTUP");
...
}
В отладке вижу что принял данные, а вхождение не находит в txt
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
02.10.2016, 22:47
Цитата Сообщение от GaFBich Посмотреть сообщение
strstr(txt,d)
сравнивает строки
а у тебя судя по
Цитата Сообщение от GaFBich Посмотреть сообщение
d[h++]=dummy;
массив символов
добавь вот так
C
1
2
d[h++]=dummy;
d[h]=0;
чтобы превратить в строку
0
 Аватар для GaFBich
22 / 22 / 5
Регистрация: 18.03.2010
Сообщений: 331
02.10.2016, 23:20  [ТС]
Я не очень понял зачем нулевой элемент массива перетирать при каждой итерации?

Добавлено через 28 минут
Возможно Вы имели ввиду
C++
1
d[h]='\0'
?
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
03.10.2016, 06:12
Цитата Сообщение от GaFBich Посмотреть сообщение
Я не очень понял зачем нулевой элемент массива перетирать
какой нулевой?
C
1
d[h++]=dummy;
записали в массив символ, увеличили счетчик массива
C
1
d[h]=0;
записали 0 т.е 0 всегда будет после последнего символа
Цитата Сообщение от GaFBich Посмотреть сообщение
Возможно Вы имели ввиду
в данном случае это одно и тоже
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
03.10.2016, 08:37
Цитата Сообщение от ValeryS Посмотреть сообщение
записали в массив символ, увеличили счетчик массива
на самом деле из-за копипастов кода без понимания у ТС могут быть и проблемы при приеме данных UART:
Цитата Сообщение от GaFBich Посмотреть сообщение
HAL_UART_Receive(&huart1,&dummy,sizeof(d ummy),10);
* * d[h++]=dummy;
...тут неясен тип dummy. Да и прием данных реализован весьма странно и неоднозначно.
1
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
03.10.2016, 14:08
Цитата Сообщение от Voland_ Посмотреть сообщение
Да и прием данных реализован весьма странно и неоднозначно.
++++
я тоже не врублюсь как должно работать.
Цитата Сообщение от GaFBich Посмотреть сообщение
HAL_UART_Receive(&huart1,&dummy,sizeof(d ummy),10);
HAL_UART_Receive - блокирующия функция.
Перевожу с французского что Вы написали.
Слушаем порт RX в течении 10 мS если данных нет, да по барабану идем молотить код дальше
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
03.10.2016, 15:34
Цитата Сообщение от Витальич Посмотреть сообщение
если данных нет
Я только уточню - "если нет данных размером с dummy". похоже, второй аргумент - есть количество байт данных для приема (или макс. размер буфера). Но эта функция должна что-то возвращать, особенно, если она блокирующая. Возвращать что-то типа реального количества полученных символов.
0
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
03.10.2016, 15:55
Количество принятых байт она не возвращает только статусы. Вот реализация в хале
Миниатюры
STM32F103C8T6 HAL UART  
1
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
03.10.2016, 16:13
Посмотрел весь файл, так и не нашел количество принятых байт как можно посмотреть. ИМХО обнулять входной массив и с ним пытаться что то делать, либо лесть в внутрь хал, но зачем тогда хал? HAL_UART_Receive_TI работает без блокировки и формирует прерывания по каждому байту, sizeof(dummy) только выключает приём. Документацию как и ТС не читал, просто попробовал в отладчике посмотреть
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
03.10.2016, 16:27
Витальич, прием HAL'ом данных в буфер - это вселенское зло, которого надо бояться как огня. Вместо того, чтобы организовать грамотный Ring FIFO, они попытались впихнуть какое-теоретическое понимание приема пакета данных. И ни одного толкового обработчика ошибки я тут не увидел, возможно, они находятся чуть ниже уровнем. Мало того, даже в этом коде припрятано несколько потенциальных мест ошибки, которые не видны невооруженным взглядом. Например, каст указателя на 8ми-битную переменную в указатель на 16ти-битную - дорогого стоит. Зато "0U" кагбы означает, что чуваки знают что такое системы статического анализа.
При всем этом код каким-то чудесным образом должен по идее существовать с ОСью, чего я (слепой наверное), не увидел.

ЗЫ: вывод такой - данный код плохо подходит под имплементацию с ОСью. И чтобы его допилить - лучше уже писать заново. Проблем будет не меньше, но так хотя бы будет шанс, что придется копаться только в своих ошибках.
0
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
03.10.2016, 16:45
Я с Вами полностью согласен, но сейчас делаю первый проект на HAL ибо господа из ST под F7 только его и оставили, поэтому и пытаюсь смотреть все вопросы по HAL, у меня в проекте UART нет (верней есть, дебаг терминал отправки данных) Из всей периферии в моём проекте только два SPI и таймер в режиме 3 канального шима. Со SPI пришлось повозиться, но сейчас имею два потока по 16 к. сэмплов с двух ADS131.
Цитата Сообщение от Voland_ Посмотреть сообщение
Вместо того, чтобы организовать грамотный Ring FIFO
На прерываниях его можно получить, по крайней мере я проблем не вижу.
.
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
03.10.2016, 16:59
Цитата Сообщение от Витальич Посмотреть сообщение
На прерываниях его можно получить, по крайней мере я проблем не вижу
можно...
Цитата Сообщение от Витальич Посмотреть сообщение
но зачем тогда хал?

Цитата Сообщение от Витальич Посмотреть сообщение
проект на HAL ибо господа из ST под F7 только его и оставили
печально. По-видимому, идет "склонение" юзеров к двум направленностям - либо пиши низкоуровнево, либо пиши на HAL, как сказали. В принципе, логика понятна - надо ж куда-то девать процессорную мощь .
0
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
04.10.2016, 01:27
Цитата Сообщение от Voland_ Посмотреть сообщение
надо ж куда-то девать процессорную мощь
Вот мне сейчас 6 каналов на спектр разложить плюс фильтры и так по мелочи, боюсь, что F7 не хватит. У конкурентов DSP от TI стоит, правда старенький. Стендик собирал, реально встроенный в F7 dsp ускоряет вычисления, но все равно стрёмно

Добавлено через 8 часов 9 минут

Не по теме:

Ученье свет, а не ученых тьма.

Таки решил еще почитать о UART в хале и набрёл вот на такую функцию HAL_UART_RxCpltCallback работает однако, проверено на плате. , но пока через глобальные переменные, завтра весь уарт попробую вытащить в отдельный модуль трансляции если получиться, то если без DMA на этом и остановлюсь.
1
04.10.2016, 10:38

Не по теме:

Цитата Сообщение от Витальич Посмотреть сообщение
реально встроенный в F7 dsp ускоряет вычисления
иногда надо сидеть и думать - как написать код, чтобы dsp дал максимальный профит. Оно-то понятно - компилятор многое умеет. Но вставки на асме, подборы типов переменных, и правильная расстановка кода рулят. Иногда бывает, что поменяв тип цикла получается профит в два раза по ассемблерным командам. Но на ARM, это (для меня) не так-то просто.

0
04.10.2016, 18:24

Не по теме:

Цитата Сообщение от Voland_ Посмотреть сообщение
печально. По-видимому, идет "склонение" юзеров к двум направленностям - либо пиши низкоуровнево, либо пиши на HAL, как сказали.
или не могут создать нормальную библиотеку с поддержкой всех чипов.
кажется Витальич писал, что STM стемяться к популярности ардуино.
а много профи на ардуино пишут? а ведь он поддерживает STM32.
в общем, появятся новые библиотеки. может более узконаправленные, но и менее абстрактные.

0
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
04.10.2016, 19:04
Цитата Сообщение от Grey Посмотреть сообщение
или не могут создать нормальную библиотеку с поддержкой всех чипов.
ИМХО: HAL - библиотека для популяризации продукта, цены на чипы и так до безобразия низкие и хоть ST по стоимости ниже всех по рынку, конкуренты тоже их снижают, исходя из этого и создаются БЕСПЛАТНЫЕ бонусы, интересно как этот отдел в ST финансируется В итоге в хале мы имеем код больше, медленней, но при этом работает же и при том увеличивает количество "молодых" специалистов изучивших STM. Отрицательные коменты от нежелания читать документацию (сам такой) и то что убрали SPL. На ней я до сих пор проекты делаю, которые не на F7 и большего желания их переводить на хал нет, многие вещи на них я перевожу на прямое регистровое управление.
Цитата Сообщение от Grey Посмотреть сообщение
кажется Витальич писал, что STM стемяться к популярности ардуино.
Такое у меня впечатление складывается
Цитата Сообщение от Grey Посмотреть сообщение
а много профи на ардуино пишут?
Смотря что Вы вкладываете в это слова, для серийного проекта нет смысла на ардуино делать, ибо в серии себестоимость плат будет такое же, а вот цена на МК на своей плате будет ниже, Мега дорогой МК (стоимость мег на али и ебеи не надо приводить в качестве контраргумента смотрите цену на официальном сайте, а те поделки, что предлагают Китайцы, ну только самоубийца пустит в серию)
Цитата Сообщение от Grey Посмотреть сообщение
в общем, появятся новые библиотеки
Они есть на гитхабе, но пока еще стремней их юзать чем хал.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
04.10.2016, 19:40
Цитата Сообщение от Voland_ Посмотреть сообщение
подборы типов переменных, и правильная расстановка кода рулят. Иногда бывает, что поменяв тип цикла получается профит в два раза по ассемблерным командам.
лет так несколько назад я бы с тобой согласился на 100%
а сейчас несколько не то
вот например интернетовские камни ( пентиумы), смотришь на дизасемблерный листинг
и видишь такую конструкцию
Assembler
1
mov ebx,ebx
какой глупый компилятор , а оказывается совсем не глупый, он вставил эту бесполезную команду чтобы уравнять конвейеры, проиграли в памяти выиграли в быстродействии
Ну а насчет ARM и говорить нечего, у них изначальна львиная доля расчетов приходилось на компилятор
а сейчас
чтобы сейчас писать на ассемблере мало прочитать книгу "Ассемблер за пять минут"
нужно брать даташиты и погружаться в них, вплоть до растактовки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.10.2016, 19:40

UART, HAL, stm32
Здравствуйте, только недавно узнал о существовании библиотеки HAL. Решил попробовать отправлять по блютуз модулю данные. Получается что-то...

STM32 HAL UART прерывания
Здравствуйте. Пытаюсь осуществить контакт с устройством по UART. Логика такая: c STM32 по UART в режиме прерываний посылаю определенную...

HAL UART, прошу совет
Добрый вечер. Помогите новичку. Пытаюсь соединить два контроллера по uart (второй - авр). STM32f10* по прерыванию таймера раз в 1 секунду...

правильное использование HAL и UART
в структуре инициализации для UART (UART_HomdleTypeDef) есть такие поля uint8_t *pRxBuffPtr; /*!< Pointer...

stm32 HAL UART - не могу понять
Здравствуйте, в STM32 я начинающий, приходится просить помощи. Суть вот в чём. Надо принимать из последовательного порта строки. Строки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru