|
22 / 22 / 5
Регистрация: 18.03.2010
Сообщений: 331
|
||||||
STM32F103C8T6 HAL UART26.09.2016, 23:13. Показов 14010. Ответов 47
Метки нет (Все метки)
Добрый вечер.
Ситуация такая, не могу понять как правильно реализовать прием данных по UART не использую к примеру прерывания. У меня есть GSM модем m590e, необходимо принимать с него данные и обрабатывать. Это отправка данных в модем
0
|
||||||
| 26.09.2016, 23:13 | |
|
Ответы с готовыми решениями:
47
Сообщения для 2 UART выводятся в 1 UART, STM32F103C8T6 Одновременный прием и передача по uart в stm32f103c8t6 STM32F407 + HAL + UART |
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
||
| 26.09.2016, 23:22 | ||
|
чем так прерывание то не угодило?
1
|
||
|
22 / 22 / 5
Регистрация: 18.03.2010
Сообщений: 331
|
|||||||||||
| 26.09.2016, 23:40 [ТС] | |||||||||||
|
Просто изначально решил сделать без прерываний, потом сделаю с прерыванием! А вот насчет считывания флага приема, тут у меня была каша
0
|
|||||||||||
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|||||||||||
| 27.09.2016, 01:55 | |||||||||||
|
Добавлено через 12 минут
GaFBich,
0
|
|||||||||||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
||||||
| 27.09.2016, 06:55 | ||||||
|
_SayHelli, бит сбрасывается когда происходит чтение
GaFBich, вот кусок реальной проги
0
|
||||||
|
22 / 22 / 5
Регистрация: 18.03.2010
Сообщений: 331
|
|
| 27.09.2016, 09:28 [ТС] | |
|
а точно ли регистр SR, по даташиту вроде как ISR? То есть пока идет последовательность байтов, то данный флаг (RXNE: Read data register not empty) сброшен, как только в эфире "пусто" - флаг устанавливается в 1
0
|
|
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
| 27.09.2016, 09:51 | |
|
GaFBich, а камень у вас какой?
Пардон с утра туплю. Добавлено через 9 минут GaFBich, честно говоря в даташите не нашел ничего про регистр ISR. Зато про регистр SR на странице 823 нашел. ValeryS, Да, спасибо, забыл что при чтении DR флаг очищается. Если не забирать данные то флаг не очищается Добавлено через 3 минуты GaFBich, Как только что-то попадает в регистр DR(Data Register) устанавливается бит RXNE в 1, как только вы считали регистр DR, флаг сбрасывается в 0
1
|
|
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
|||||||||||||
| 27.09.2016, 09:58 | |||||||||||||
![]() сбило с толку HAL для 103 с ним не работал вот кусок для 103
![]() вот его структура
1
|
|||||||||||||
|
22 / 22 / 5
Регистрация: 18.03.2010
Сообщений: 331
|
|
| 27.09.2016, 14:40 [ТС] | |
|
Прошу меня извинить, я сам читал даташит от stm32f051R8T6.
0
|
|
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
|
| 27.09.2016, 15:17 | |
|
GaFBich, на будущее, когда выбираешь камень для программирования, всегда подключаешь заголовочный файл
в данном случае stm32f10x.h так вот в нем описаны все структуры периферии мой кусок кода, с описанием структуры, оттуда
0
|
|
|
22 / 22 / 5
Регистрация: 18.03.2010
Сообщений: 331
|
|
| 29.09.2016, 22:41 [ТС] | |
|
Ночи доброй! Подскажите, как правильно написать обработчик, чтобы отслеживал что данные приняты приемником(модемом), что можно отправлять новые! Или же правильнее отслеживать ответ от модема в виде OK?
0
|
|
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
| 29.09.2016, 22:52 | |
|
GaFBich, Вообще у uart есть флаг, TC(Transfer completed) - передача завершена. Соответственно перед следующей передачей проверяем этот флаг. А так если вы знаете формат пакета который посылает модем при приеме сообщения, вы просто, когда принимаете от него посылки проверяете пакет на наличие ОК, и если ОК то ставите флажок какойнибудь и проверяете его в функции передачи вместе с флагом TC. после передачи соответственно скидываете его
1
|
|
|
22 / 22 / 5
Регистрация: 18.03.2010
Сообщений: 331
|
||||||
| 29.09.2016, 22:57 [ТС] | ||||||
|
Я такую проверку делал
0
|
||||||
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
| 29.09.2016, 23:02 | |
|
GaFBich, ну здесь вы крутитесь в бесконечном цикле пока TC = 0; То есть посылка отправляется. Как только флажок станет 1 выйдите из цикла. Вроде правильно. Но можно и просто if ом проверять, так вы не будете загонять программу в цикл
0
|
|
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
||||||
| 29.09.2016, 23:33 | ||||||
|
GaFBich, почему не хотите прерывание использовать?
Добавлено через 27 минут Не знаете как сделать? 1. В кубике разрешаем прерывание на UART (я использую 1) 2. В файле stm32f1xx_it.c появиться обработчик void USORT1_IRQHandler(void){} 3. Пишем в него
![]() ВНИМАНИЕ КОД НЕ РАБОЧИЙ ДЛЯ HAL!!!!! Завтра поправлю.
2
|
||||||
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
||||||
| 01.10.2016, 01:05 | ||||||
|
В главном цикле написал вот так:
https://www.youtube.com/watch?v=IUie3g_X-rg Вывод: Слушать порт без DMA это полная х***Я Сделал вот так HAL_Delay(10000); 10сек задержка, мдя работает, осталось одна проблема как принимать если длинна пакета может быть разной. Завтра порешаем вопрос, если побежу будет класс, уж больно жалко DMA на эту ерунду.
0
|
||||||
|
|
||||||||||||||||
| 01.10.2016, 10:09 | ||||||||||||||||
|
Авось пригодится
Что было сделано в начале:
0
|
||||||||||||||||
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
| 01.10.2016, 16:03 | |
|
Вообщем разобрался с UART в HAL, прерывания работают, правда есть отличии от SPL, по мне, так как до этого только на SPL писавшему, в худшею сторону, а вот кто сразу начал с HAL наверное так удобнее, но не мне судить.
ТС, мой совет, создайте новую тему, ибо в этой в вперемешку идут советы про HAL и SPL и много всего неверно сказано и от меня в том числе (каюсь). Тему назовите примерно так "Как в HAL сделать обмен данными с (компьютером, прибором итд) далее что и как хотите пересылать" Попробуем помочь. P.S. Сам еще не во всех функциях разобрался, остановился когда смог поговорить с "железкой", а это половина судя по файлу На HAL_UART_IRQHandler встал.
2
|
|
|
22 / 22 / 5
Регистрация: 18.03.2010
Сообщений: 331
|
|
| 01.10.2016, 20:55 [ТС] | |
|
Почитаю затащит еще раз, попробую заново написать обработчик(пока опять же, без прерывания). Огромное спасибо за помощь.
0
|
|
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
| 01.10.2016, 21:20 | |
|
На скриншоте мой стенд.
if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == 1) если нажата кнопка, то отправляю 4 байта в порт и перевожу его в режим приёма. status_UART6 - флаг прерывания. Взводиться в файле с право. В майне крутиться его ожидание, как он пришел збрасываю его и буфер приёма копирую в буфер отправки, проверяю работу повторным нажатием кнопки, то что принял должен отправить. Думаю поможет.
0
|
|
| 01.10.2016, 21:20 | |
|
Помогаю со студенческими работами здесь
20
HAL UART, прошу совет правильное использование HAL и UART stm32 HAL UART - не могу понять Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|