Перейти к содержанию
    

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

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

96К RAM?

 

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

 

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

 

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

 

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

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на лапах PA11 и PA12 есть и CAN (CANRX и CANTX соответственно), и USB (USBDM и USBDP соответственно);

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

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

void USB_LP_CAN_RX0_IRQHandler(void)

{

if(CAN->RF0R & 0x3F)

{

CAN_Istr();

CAN->RF0R = CAN_RF0R_RFOM0;

} else {

USB_Istr();

}

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...