04.02.2016, 06:01
|
#1
|
Почётный гражданин KAZUS.RU
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,565
Сказал спасибо: 5,041
Сказали Спасибо 10,615 раз(а) в 3,604 сообщении(ях)
|
STM32F103 - нужно три USART с разными скоростями
В общем, понадобилось мне сваять устройство, которое сможет общаться по USART с тремя совершенно разными устройствами, у которых скорости отличаются друг от друга. То есть, у одного скорость 38400, у второго 9600, а у третьего 921600. До этого подобные задачи решать не приходилось, обычно скорости были одинаковые.
Я выбрал STM32F103RB, рассчитывая на их мощь. И все было хорошо, пока не дошел до настройки скорости. Получается, что регистр управления скоростью только один? И в этом процессоре настроить USARTы на разные скорости невозможно? Или я плохо искал?
|
|
|
|
04.02.2016, 09:06
|
#2
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: STM32F103 - нужно три USART с разными скоростями
Alex9797, Да ты че? ![Прикольно](images/smilies/icon_wink3.gif) А мы и не знаем...
Что читаем вместо RM?
Каждый UART имеет свои регистры конфигурации , кои настраиваются совершенно отдельно и некоторые можно менять на лету.
Кстати чисто из любопытства - обязательно именно три UARTA? Два с ремапом пинов не прокатит?
Сообщение от Alex9797
|
Я выбрал STM32F103RB, рассчитывая на их мощь.
|
У F1 старая периферия ...
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 04.02.2016 в 09:33.
|
|
|
Сказали "Спасибо" dosikus
|
|
|
04.02.2016, 12:24
|
#3
|
Почётный гражданин KAZUS.RU
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,565
Сказал спасибо: 5,041
Сказали Спасибо 10,615 раз(а) в 3,604 сообщении(ях)
|
Re: STM32F103 - нужно три USART с разными скоростями
Сообщение от dosikus
|
А мы и не знаем...
|
Сам тащусь!
Сообщение от dosikus
|
Что читаем вместо RM?
|
STM32F103xB и RM0008
Сообщение от dosikus
|
Каждый UART имеет свои регистры конфигурации
|
Да, из прочитанного это было видно явно. А вот насчет регистров делителей частоты получалось не так удачно. Выходило, что этот регистр - один на всех. Не хотелось верить в такое. Ведь даже у STM8S208 - каждый USART настраивается на свою скорость. Но их там только два, а то бы я не парился, давно бы уже применил.
Да что там STM8, даже у PICов независимая установка скорости.
Но проблема в том, что у PICов так и написано, в самом начале, что есть два independens EUSART. Это сразу вселяет уверенность. У STM8 это хорошо видно в описании регистров, где вместо номера USART они подставляют "х".
А у STM32F103 описание размазано, и формулировки нечеткие, нет однозначного понимания. Это уже потом, когда ткнулся носом, и когда убедился на практике, то становишься умным, и приходит четкое понимание. Правда, понимание не всего в целом, а лишь того, чего искал.
Сообщение от dosikus
|
обязательно именно три UARTA?
|
Да, обязательно. Дело в том, что те три устройства не моего изготовления, и повлиять на их скорость нет возможности. С двумя первыми я веду диалог, обрабатываю полученные от них данные, и управляю третьим в зависимости от результатов обработки.
В давние времена, когда возможности процев были скромнее, и даже один UART был далеко не в каждом, а о двух можно было только мечтать, я выходил из положения простым мультиплексированием одного UARTа на любое количество линий. Правда, во всех тех случаях мой проц был мастером, поэтому я мог когда угодно переключаться на любую линию, не боясь, что по другой пропущу посылку.
А сейчас ситуация сложнее. Два первых устройства - мастера, а я для них слейв. Поэтому нужны реальные три USARTа.
Сообщение от dosikus
|
Два с ремапом пинов не прокатит?
|
Может я и с этим чего-то недочитал? Но, насколько я знал до этого момента, ремап не добавит третьего, он лишь переназначает выводы с одних на другие.
dosikus, спасибо! Именно такого ответа я и ждал. Главное, что Вы дали уверенность в том, что то, что я ищу - оно существует. Это даже полезнее, чем явно ткнуть в него носом. Я уже нашел это место, и тихонько удивляюсь - как я мог это пропустить? Правда, у меня есть отмазка: время было позднее, сидел до половины пятого утра. Это и повлияло, наверное.
|
|
|
|
04.02.2016, 12:59
|
#4
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: STM32F103 - нужно три USART с разными скоростями
Сообщение от Alex9797
|
Может я и с этим чего-то недочитал? Но, насколько я знал до этого момента, ремап не добавит третьего, он лишь переназначает выводы с одних на другие.
|
Ну можно же ремапить с переключением скорости. Не, если конечно нужно одновременно работать с 3мя , тогда да .
Инит UART на F1
Код:
|
#define USARTCLK 72000000UL
#define BAUDRATE 115200UL |
Код:
|
void UsartInit(void)
{
RCC-›APB2ENR |=RCC_APB2ENR_USART1EN | RCC_APB2ENR_IOPAEN;
GPIOA-›CRH &=~ (GPIO_CRH_CNF10 |GPIO_CRH_CNF9|GPIO_CRH_MODE10);
GPIOA-›CRH |= GPIO_CRH_CNF10_0 |GPIO_CRH_CNF9_1 | GPIO_CRH_MODE9;
USART1-›CR1 |= USART_CR1_TE |USART_CR1_RE |USART_CR1_RXNEIE;
USART1-›BRR =(USARTCLK+BAUDRATE/2)/BAUDRATE;
USART1-›CR1 |=USART_CR1_UE;
NVIC_SetPriority(USART1_IRQn,15);
NVIC_EnableIRQ(USART1_IRQn);
} |
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 04.02.2016 в 13:02.
|
|
|
Сказали "Спасибо" dosikus
|
|
|
04.02.2016, 13:07
|
#5
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: STM32F103 - нужно три USART с разными скоростями
Например слушаем мастера одним UART. Приняли что надо, ремапим на слейв , переключаем скорость, работаем с слейвом. Закончили со слейвом - снова конфигурим на мастер.
Чревато тем что можем проспать посылки от мастера...
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 04.02.2016 в 13:11.
|
|
|
|
04.02.2016, 13:54
|
#6
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,581
Сказал спасибо: 181
Сказали Спасибо 3,161 раз(а) в 2,047 сообщении(ях)
|
Re: STM32F103 - нужно три USART с разными скоростями
взять второй дешевый камень типа ф0, передавать ему через спи или через ногодрыг, вот тебе уже 4 уарта
__________________
кагмаподэ магмаподэ
|
|
|
|
04.02.2016, 13:59
|
#7
|
Почётный гражданин KAZUS.RU
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,565
Сказал спасибо: 5,041
Сказали Спасибо 10,615 раз(а) в 3,604 сообщении(ях)
|
Re: STM32F103 - нужно три USART с разными скоростями
Сообщение от dosikus
|
Чревато тем что можем проспать посылки от мастера...
|
Да, так и будет. Обмен довольно интенсивный, и одновременный приход посылок - явление нередкое. Конечно, если я не подтвердил успешное получение, то мастер повторит посылку. Два раза. После этого он плюнет, и решит, что меня вообще нет, и станет посылать тупые запросы "есть кто-нибудь на линии?". Один мастер шлет длинные пакеты, паровозики длиной 20...35 байт. Второй шлет покороче, 8...12 байт. И пока идет паровозик по одной линии, часто появляется такой же по другой линии.
|
|
|
|
04.02.2016, 14:04
|
#8
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: STM32F103 - нужно три USART с разными скоростями
имхо лучше взять STM32F091CB, 48 ног 6 USART
|
|
|
Сказали "Спасибо" oleg110592
|
|
|
04.02.2016, 14:09
|
#9
|
Почётный гражданин KAZUS.RU
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,565
Сказал спасибо: 5,041
Сказали Спасибо 10,615 раз(а) в 3,604 сообщении(ях)
|
Re: STM32F103 - нужно три USART с разными скоростями
Сообщение от индюк
|
взять второй дешевый камень типа ф0, передавать ему через спи или через ногодрыг, вот тебе уже 4 уарта
|
Да, я уже готов был и к такому варианту. Я во многих случаях предпочитал поставить на плату два процессора попроще, чем один супер. Особенно если время жмет. И в программировании проще, и в наладке, и модернизировать проще. Иногда комплексовал по этому поводу, задавал себе вопрос: а не дурак ли я, что так делаю?
Но каждый раз давал на этот вопрос отрицательный ответ. ![Улыбка](images/smilies/icon_smile.gif)
А после того, как увидел, что знаменитый SIEMENS запихнул аж четыре процессора внутрь простенького реле, мои комплексы сразу испарились.
|
|
|
Сказали "Спасибо" Alex9797
|
|
|
04.02.2016, 14:12
|
#10
|
Почётный гражданин KAZUS.RU
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,565
Сказал спасибо: 5,041
Сказали Спасибо 10,615 раз(а) в 3,604 сообщении(ях)
|
Re: STM32F103 - нужно три USART с разными скоростями
Сообщение от oleg110592
|
имхо лучше взять STM32F091CB, 48 ног 6 USART
|
Прошу прощения у всех откликнувшихся, за то, что не упомянул главного: кроме трех USART, на борту требовалось наличие еще и CAN. Поэтому выбор не очень богатый: 103, 105, 107...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:22.
|
|