реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как обойти совмещение пинов can и usb на stm32f103
SpiritDance
сообщение Jul 22 2010, 05:27
Сообщение #1


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Смотрю на блок/диаграмму даже нового XL density stm32.

Нужны оба интерфейса. Понятно что одновременно заставить работать их не получиться. Хотелось бы понять будут ли они функционировать попеременно:

Подключено USB - значит включен модуль USB, нет - значит включен CAN. Или имеются какие то нюансы?


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jul 22 2010, 05:57
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Есть смысл посмотреть Connectivity Line STM32F105/107

Хотя, можно завести питание с USB на ногу. Если напряжение есть, то активен USB, иначе CAN.
CAN физически подключить на отремапленные ноги.
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Jul 22 2010, 06:02
Сообщение #3


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Цитата(adnega @ Jul 22 2010, 09:54) *
Есть смысл посмотреть Connectivity Line STM32F105/107


96К RAM?

Мне надо у меня много всякого одновременно работает. Переферия будет практически вся работать одновременно.

Цитата(adnega @ Jul 22 2010, 09:57) *
Хотя, можно завести питание с USB на ногу. Если напряжение есть, то активен USB, иначе CAN.


Ногу подключать лучше даже если нету CAN.

Именно так и предполагается действовать. Спрашиваю нет ли нюансов. Не будут ли , скажем, драйвера мешать друг другу.


В смысле не буде ли драйвер CAN мешать USB?


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jul 22 2010, 06:28
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



"В смысле не буде ли драйвер CAN мешать USB?" - конечно будет. Память у них общая... Когда работает USB, CAN будет простаивать. Допустимо ли это для Вашего случая? Судя по вопросу драйвера Вы планируете брать чьи-то. В случае самописных драйверов ситуацию можно разрулить (повторюсь, ценой простоя CAN; с учетом приоритета USB над CAN).
На STM32F103T8 делал и CAN, и USB (но не одновременно) - ничего военного.
Потом мне захотелось мост CAN<>USB (одновременно)... Переписал на 107 и получился мост CAN<>Ethernet ))
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Jul 22 2010, 06:40
Сообщение #5


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Цитата(adnega @ Jul 22 2010, 10:28) *
"В смысле не буде ли драйвер CAN мешать USB?" - конечно будет. Память у них общая...


Имелся ввиду phy-драйвер.

Цитата(adnega @ Jul 22 2010, 10:28) *
На STM32F103T8 делал и CAN, и USB (но не одновременно) - ничего военного.
Потом мне захотелось мост CAN<>USB (одновременно)... Переписал на 107 и получился мост CAN<>Ethernet ))


Понятно, спасибо.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jul 22 2010, 06:56
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



"Имелся ввиду phy-драйвер."

В контексте 103 (и других тоже) серии имеем:

на лапах PA11 и PA12 есть и CAN (CANRX и CANTX соответственно), и USB (USBDM и USBDP соответственно);
Кроме того, есть PB8 и PB9, на которые дополнительно выведены CANRX и CANTX соответственно.
Т.е. подключаем USB к PA11-PA12, CAN к PB8-PB9. в регистре AFIO_MAPR поле CAN_REMAP устанавливаем в 2.
Все: физики не мешают друг другу!

Кста, справедливости ради замечу, что CAN зачем-то можно отремапить на PD0-PD1... на ноги внешнего кварца... т.е. можно запускать системы с CAN на внутреннем генераторе. По-моему, бредовенько )
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Jul 22 2010, 07:47
Сообщение #7


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Цитата(adnega @ Jul 22 2010, 10:56) *
на лапах PA11 и PA12 есть и CAN (CANRX и CANTX соответственно), и USB (USBDM и USBDP соответственно);
Кроме того, есть PB8 и PB9, на которые дополнительно выведены CANRX и CANTX соответственно.


То есть эти интерфейсы просто через одно место используются в самом процессоре, а физически разделить ноги возможность есть. Какая красота.

Я просто документы на семейство изучаю скажем так с этого утра. До тонкостей не дошел.

Спасибо за разъяснения.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jul 22 2010, 10:58
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Когда дойдете до тонкстей реализации... будьте аккуратны с библиотеками, предоставляемыми ST.
Кому-то они нравятся (типа, можно быстро запустить какой-нить узел; тот же USB)... кто-то разочаровался и пишет код сам, заглядавая в них при необходимости.

Можно читать AN, аккуратно.

Я же отношусь к этому так: "можно было сделать лучше" / "демки от ST не истина в последней инстанции".
Go to the top of the page
 
+Quote Post
prgjz
сообщение Jul 23 2010, 08:38
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 3-01-07
Из: Germany
Пользователь №: 24 071



Ноги разделить а в самом прерывании что то на подобии:

void USB_LP_CAN_RX0_IRQHandler(void)
{
if(CAN->RF0R & 0x3F)
{
CAN_Istr();
CAN->RF0R = CAN_RF0R_RFOM0;
} else {
USB_Istr();
}
}
Go to the top of the page
 
+Quote Post
ssergy
сообщение Jul 24 2010, 11:01
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 29-01-06
Пользователь №: 13 730



Поочередная работа CAN/USB в STM32F103 - абсолютно реально. Желательно учесть пару вещей (повторюсь с учетом ранее сказанного):
- USB на ноги PA11-PA12;
- CAN на ноги PB8-PB9;
- кварц/генератор PD0-PD1 (внутренний генератор для CAN или USB не рассматривается);
- вектора прерываний лучше в RAM (подменять/отключать при переключении драйверов CAN/USB);
- "переключатель" делать в SVC с более высоким приоритетом чем CAN/USB;

В моем случае STM32F103RC6(QFP-64) одновремено задействована перефирия:
- USART2(полный)->GSM, USART3->GPS, USART1->DEBUG|ISO7816-3(shared), USART4->RS485(optional);
- SPI1->LCD/MEMS/KBD/InOut, SPI2->SerialFlash(file system);
- SDIO(4-bit)->SD(shared RS485);
- CAN|USB(shared)->application/boot;
- ADC, I/O;
Промахнулся с SDIO. Хотелось запустиь в 1-bit режиме SD и одновременно RS485. Увы - только попеременно, как и в случае с CAN/USB.
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Jul 26 2010, 06:04
Сообщение #11


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Всем признателен. Подкиньте еще материалу.

Сейчас рисую схемку нигде не могу найти пример подключения JTAG по 2-проводам: везде данные контакты притянуты к земле. Это так надо или они не используются? Подскажите что нужно чтоб он заработал. Что за пин boot0?

Пока не привык к документации st, времени ее штудировать построчно сейчас нет, нужно нарисовать первый вариант схемки.



--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
ssergy
сообщение Jul 26 2010, 08:39
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 29-01-06
Пользователь №: 13 730



Цитата(SpiritDance @ Jul 26 2010, 10:04) *
Сейчас рисую схемку нигде не могу найти пример подключения JTAG по 2-проводам: везде данные контакты притянуты к земле. Это так надо или они не используются? Подскажите что нужно чтоб он заработал. Что за пин boot0?


Если нет необходимости использовать внутренний загрузчик от ST, то ногу BOOT0 на землю (иначе - есть BOOT1). А если использовать JTAG в режиме SWD, то целесообразно задействовать 3 сигнала - SWDIO, SWCLK и TRACESW0.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01471 секунд с 7
ELECTRONIX ©2004-2016