Использование SWD пинов

Перевожу железяку с Mega128 на STM32 в QFP64 и испытываю некоторый недостаток пинов, который частично компенсируется использованием 74HC595, MAX13487 (Кстати через нее отлично работает встроенный бутлоадер через RS-485), но не полностью ибо пришлось срезать три i/o канала из которых все таки один аналоговый понадобиться вернуть. Поэтому ищу всякие другие способы и рыбку съесть и остаться в том же корпусе.
И сегодня обратил взор на SWD пины PA13 и PA14 вроде как они используют подтяжку и могут быть использованы как пины общего назначения… Когда я разбирался с пинами JTAG то сделал полный его ремап на i/o и использовал в программе все его ноги кроме SWCLK и SWDIO их я правда не инициализировал, но отладка и загрузка работала.


//блаблабла

/* Enable Clock and clock For REMAP - RCC_APB2Periph_AFIO                                             */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO, ENABLE); // Alternate Function

        //PB3 BO-3  , PB4- BO2
        /* Enable the JTAG Pins Software Remapping */
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable  , ENABLE);

        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_3|GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;

        GPIO_Init(GPIOB, &GPIO_InitStructure);
        //jtag output needed to be off
        GPIO_WriteBit  ( GPIOB,GPIO_Pin_4,Bit_RESET);

//блаблабла

/* Configure pa13,14 swio, swcl as inputs            */
                GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_13|GPIO_Pin_14;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
                GPIO_Init(GPIOA, &GPIO_InitStructure);

Там был один косяк с тем что на каких то ногах при старте появлялись броски напряжения — но это вылечилось записью нулей сразу после инициализации. Так вот сегодня решил, а дайка проинициализирую и подцеплю SWCLK и SWDIO на дискретные входы… и они заработали и отладка с загрузкой по SWD тоже работают! Так как были подцеплены они в эмуляцию кнопок то при использовании их в режиме загрузки/отладки кнопки думают, что они нажаты и дисплей воспринимает нажатия, но это нестрашно т.к. можно заблокировать на время отладки.
Итого: эксперимент удался и ноги SWD можно использовать как входы и т.к. в реальном изделии отладка нужна не очень сильно, но тем не менее она будет возможна, то хочу PA13 и PA14 подключить на кнопки c подтяжкой к питанию.
Если есть подобный опыт то какие Pro, Contra?
  • +5
  • 26 июня 2012, 22:58
  • GYUR22

Комментарии (19)

RSS свернуть / развернуть
Не забудь защитить программатор и МК от внезапного придавливания кнопкой на землю в то время, как они пытаются выдать на линию единичку. Но это тащемта очевидно.
0
  • avatar
  • Vga
  • 27 июня 2012, 01:34
думаю что там open drain — его не надо защищать
0
Сомневаюсь. Во первых, open drain медленнее (вверх тянет подтяжка, через которую заряжается емкость шины), во вторых там SPI (пусть и двухпроводной), для которого типичны push-pull драйверы. Так что лучше глянуть даташит. А еще лучше — добавить резистор на кнопку.
0
У стм8 open-drain на 800кГц вроде, и работает. I2C FM+ на 1MHz тоже пашет.
0
А SWD обычно на нескольких мегагерцах работает.
0
Рамтроновские чипы I2C памяти работают на 3.4мгц.
0
датщитов я чето не нашел но емнип на jtag и на Swd вроде как подтяжку надо делать,
а зачем ее делать если там PP?, вот и похоже на OD
0
Чтобы входы не болтались при неподключенном отладчике. JTAG — тот 100% пушпул.
Алсо, сколько килоом подтяжка? На таких частотах, ИМХО, менее килоома для работы шины с монтажным или надо. Точнее — считать надо.
0
Точнее, с монтажным «И».
0
И какие там требования по емкости шины и сопротивлению подтяжки на такой частоте?
0
Я не интересовался, у меня не к чему его подключать на такой скорости, а в даташите эти емкости и сопротивления на вскидку я не нашел.
0
есть, кнопки работают нормально
0
Есть еще ноги под часовым кварцем, тампером, и нога под BOOT1.
А если можно обойтись без внешнего кварца, то можно попытаься запользовать и его ноги. Единственная непонятка тут в том — что в даташите на схеме корпуса данные ноги обозначены как порты PD0-PD1, а в таблице об этом ничего не сказано. Так что надо экспериментировать.
0
В даташите на F100 в таблице пинов это все есть:

23 12 5 OSC_IN I OSC_IN PD0 (7)
24 13 6 OSC_OUT O OSC_OUT PD1 (7)

Примечание 7 выглядит так:

7. For the LQFP64 package, the pins number 5 and 6 are configured as OSC_IN/OSC_OUT after reset, 
however the functionality of PD0 and PD1 can be remapped by software on these pins. For the LQFP100 
and LQFP144 packages, PD0 and PD1 are available by default, so there is no need for remapping. For 
more details, refer to Alternate function I/O and debug configuration section in the STM32F100xx 
reference manual.
0
Да, забыл добавить: в даташите на F103 есть аналогичная информация.
0
Есть еще ноги под часовым кварцем, тампером, и нога под BOOT1.
все занято — кроме tamper ноги, но на нее тоже есть планы
0
А что за tamper?
0
по счету вторая нога, PC13 — что то типа запишет по изменению дату в BKP
0
типа встроенного датчика вскрытия. Можно придумывать всякие приблуды для вандалозащищенных и прочих устройств
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.