Jump to content

    
Sign in to follow this  
SpiritDance

Как обойти совмещение пинов can и usb на stm32f103

Recommended Posts

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

 

Хотя, можно завести питание с USB на ногу. Если напряжение есть, то активен USB, иначе CAN.

CAN физически подключить на отремапленные ноги.

Share this post


Link to post
Share on other sites
Есть смысл посмотреть Connectivity Line STM32F105/107

 

96К RAM?

 

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

 

Хотя, можно завести питание с USB на ногу. Если напряжение есть, то активен USB, иначе CAN.

 

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

 

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

 

 

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

Share this post


Link to post
Share on other sites

"В смысле не буде ли драйвер CAN мешать USB?" - конечно будет. Память у них общая... Когда работает USB, CAN будет простаивать. Допустимо ли это для Вашего случая? Судя по вопросу драйвера Вы планируете брать чьи-то. В случае самописных драйверов ситуацию можно разрулить (повторюсь, ценой простоя CAN; с учетом приоритета USB над CAN).

На STM32F103T8 делал и CAN, и USB (но не одновременно) - ничего военного.

Потом мне захотелось мост CAN<>USB (одновременно)... Переписал на 107 и получился мост CAN<>Ethernet ))

Share this post


Link to post
Share on other sites
"В смысле не буде ли драйвер CAN мешать USB?" - конечно будет. Память у них общая...

 

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

 

На STM32F103T8 делал и CAN, и USB (но не одновременно) - ничего военного.

Потом мне захотелось мост CAN<>USB (одновременно)... Переписал на 107 и получился мост CAN<>Ethernet ))

 

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

Share this post


Link to post
Share on other sites

"Имелся ввиду 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 на внутреннем генераторе. По-моему, бредовенько )

Share this post


Link to post
Share on other sites
на лапах PA11 и PA12 есть и CAN (CANRX и CANTX соответственно), и USB (USBDM и USBDP соответственно);

Кроме того, есть PB8 и PB9, на которые дополнительно выведены CANRX и CANTX соответственно.

 

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

 

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

 

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

Share this post


Link to post
Share on other sites

Когда дойдете до тонкстей реализации... будьте аккуратны с библиотеками, предоставляемыми ST.

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

 

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

 

Я же отношусь к этому так: "можно было сделать лучше" / "демки от ST не истина в последней инстанции".

Share this post


Link to post
Share on other sites

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

 

void USB_LP_CAN_RX0_IRQHandler(void)

{

if(CAN->RF0R & 0x3F)

{

CAN_Istr();

CAN->RF0R = CAN_RF0R_RFOM0;

} else {

USB_Istr();

}

}

Share this post


Link to post
Share on other sites

Поочередная работа 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.

 

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

 

Share this post


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

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this