ПИН -функции на доске.CPP

C_D
Пн, 6 июля 2015 г. 22:56
Я просто возится с несколькими досками F103C8T6 F103C8T6 и рассказываю, как работает STM32Duino Thing. Вспыхнул загрузчик STM32Duino и загрузил несколько простых эскизов Arduino, очень впечатленные до сих пор 8-)

Во время игры с Analogwrite я заметил, что некоторые из булавок ШИМ, которые я ожидал, не доступны, и мне просто интересно, в чем причина. Из техническая спецификация Я ожидал, что смогу получить вывод ШИМ на PA0, PA1, PA2, PA3, PA6, PA7, PA8, PA9, PA10, PB0, PB1 и, возможно, даже PB6, PB7, PB8, PB9.

Это, кажется, согласен с PIN_MAP в плате.CPP, однако фактические доступные контакты ограничены теми, которые перечислены в Boudpwmpins, IE PA0, PA1, PA2, PA3, PA6, PA7, PA8, PA9, PA10, PB0, PB6, PB7

Так что случилось с PB1, PB8 и PB9?

Они связаны с каким -то другим использованием где -то еще, поэтому нельзя освободить для PWM?

// Note. See the enum of pin names in board.h extern const stm32_pin_info PIN_MAP[BOARD_NR_GPIO_PINS] = { {GPIOA, TIMER2, ADC1, 0, 1, 0}, /* PA0 */ {GPIOA, TIMER2, ADC1, 1, 2, 1}, /* PA1 */ {GPIOA, TIMER2, ADC1, 2, 3, 2}, /* PA2 */ {GPIOA, TIMER2, ADC1, 3, 4, 3}, /* PA3 */ {GPIOA, NULL, ADC1, 4, 0, 4}, /* PA4 */ {GPIOA, NULL, ADC1, 5, 0, 5}, /* PA5 */ {GPIOA, TIMER3, ADC1, 6, 1, 6}, /* PA6 */ {GPIOA, TIMER3, ADC1, 7, 2, 7}, /* PA7 */ {GPIOA, TIMER1, NULL, 8, 1, ADCx}, /* PA8 */ {GPIOA, TIMER1, NULL, 9, 2, ADCx}, /* PA9 */ {GPIOA, TIMER1, NULL, 10, 3, ADCx}, /* PA10 */ {GPIOA, TIMER1, NULL, 11, 4, ADCx}, /* PA11 */ {GPIOA, NULL, NULL, 12, 0, ADCx}, /* PA12 */ {GPIOA, NULL, NULL, 13, 0, ADCx}, /* PA13 */ {GPIOA, NULL, NULL, 14, 0, ADCx}, /* PA14 */ {GPIOA, NULL, NULL, 15, 0, ADCx}, /* PA15 */ {GPIOB, TIMER3, ADC1, 0, 3, 8}, /* PB0 */ {GPIOB, TIMER3, ADC1, 1, 4, 9}, /* PB1 */ {GPIOB, NULL, NULL, 2, 0, ADCx}, /* PB2 */ {GPIOB, NULL, NULL, 3, 0, ADCx}, /* PB3 */ {GPIOB, NULL, NULL, 4, 0, ADCx}, /* PB4 */ {GPIOB, NULL, NULL, 5, 0, ADCx}, /* PB5 */ {GPIOB, TIMER4, NULL, 6, 1, ADCx}, /* PB6 */ {GPIOB, TIMER4, NULL, 7, 2, ADCx}, /* PB7 */ {GPIOB, TIMER4, NULL, 8, 3, ADCx}, /* PB8 */ {GPIOB, NULL, NULL, 9, 0, ADCx}, /* PB9 */ {GPIOB, NULL, NULL, 10, 0, ADCx}, /* PB10 */ {GPIOB, NULL, NULL, 11, 0, ADCx}, /* PB11 */ {GPIOB, NULL, NULL, 12, 0, ADCx}, /* PB12 */ {GPIOB, NULL, NULL, 13, 0, ADCx}, /* PB13 */ {GPIOB, NULL, NULL, 14, 0, ADCx}, /* PB14 */ {GPIOB, NULL, NULL, 15, 0, ADCx}, /* PB15 */ {GPIOC, NULL, NULL, 13, 0, ADCx}, /* PC13 */ {GPIOC, NULL, NULL, 14, 0, ADCx}, /* PC14 */ {GPIOC, NULL, NULL, 15, 0, ADCx}, /* PC15 */ }; extern const uint8 boardPWMPins[BOARD_NR_PWM_PINS] __FLASH__ = { PB0, PA7, PA6, PA3, PA2, PA1, PA0, PB7, PB6, PA10, PA9, PA8 }; extern const uint8 boardADCPins[BOARD_NR_ADC_PINS] __FLASH__ = { PB0, PA7, PA6 , PA5 , PA4 , PA3 , PA2 , PA1 , PA0 };

Rogerclark
Пн, 6 июля 2015 г. 11:32
Это хороший момент.

Согласно Maple Mini Wiki, который все еще находится на сайте Leaflabs http: // Leaflabs.com/docs/hardware/maple-mini.HTML
У PB1 есть PWM.

Однако, глядя на организацию (ныне несуществующие) Leaflabs/Libmaple Repo

https: // github.com/leaflabs/libmaple/bl ... /доска.CPP

У него есть те же самые boudpwmpins, как и мы (потому что наши файлы основаны на Libmaple)

Таким образом, либо документы неверны, либо файл правления неверно

К сожалению, Leaflabs назвал End of Life на Libmaple несколько месяцев назад, поэтому они не будут отвечать на вопросы, опубликованные в их репо.

Но, глядя на использование массива Boudpwmpins, он кажется излишним.

https: // github.com/leaflabs/libmaple/se ... ardpwmpins

Насколько я могу судить, PWM должен работать OK на PB1, так как у него назначен таймер3, например, PA6 и т. Д

Вы можете увидеть, действительно ли это работает на PB1 ? А

И если это так, возможно, мы должны удалить определение Boudpwmpins, так как оно, кажется, не используется ядром нигде или в качестве альтернативы (я полагаю, что более безопасное решение - добавить недостающие контакты в Boudpwmpins [])

C_D
Пн, 6 июля 2015 г. 11:51
В настоящее время это не работает. Использование Analogwrite работает только на булавках, перечисленных в Boudpwmpins.

Я еще не потухал в код, чтобы понять, почему.

Мое основное требование на самом деле не для PWM, а для ADC. Следующая строка в доске.CPP дает:
extern const uint8 boardADCPins[BOARD_NR_ADC_PINS] __FLASH__ = { PB0, PA7, PA6 , PA5 , PA4 , PA3 , PA2 , PA1 , PA0 };

Rogerclark
Втюж 07 июля 2015 г. 12:07
ХОРОШО

Это интересно.

Я не уверен, что вы загрузили руководство для STM32 (это довольно большой PDF -документ) под названием RM0008
http: // www.ул.com/web/en/resource/techn ... 171190.PDF

Как это окончательная ссылка для этого материала.

Я вводим в личку Victor_PV, так как он недавно посмотрел на таймеры, поэтому он может пролить свет на вещи ШИМ (как я уверен, что он использует таймеры)

victor_pv
Втюл 07 июля 2015 г., 4:29 утра
Быстро взглянуть:
PB8, по -видимому, является штифтом D32 в Maple Mini, который привязан к встроенной кнопке. Я подозреваю.
PB1 - это D33, который указан как PWM в их информации Maple Mini.
Тогда PIN 24 - PA11, который должен иметь PWM, но они не перечисляют его по какой -то причине. Это таймер 1 CH4.
И они не перечислили таймер 4 CH4.

Итак, 4 контакта, которые должны иметь PWM, не перечислены.
PB9 используется в Maple Mini для перечисления USB -автобуса. Это бесплатно на общих досках, поэтому нам, вероятно, нужно отредактировать изменение некоторых файлов.
D33 может быть намеренным, потому что это кнопка, и, возможно, D24, потому что это одна из линий USB, я не понимаю, почему другой все еще отсутствует.

Это довольно позже здесь, но завтра я постараюсь посмотреть.

В любом случае Libmaple включает в себя кучу функций более низкого уровня, которые позволяют вам увидеть ШИМ в любом PIN -коде, у которого есть таймер, которые, скорее всего, работают, как и ожидалось, но, как я уже сказал, мне нужно будет проверить код.
Я бы не стал устанавливать D24 на PWM, если вы сначала не отключите периферийное устройство USB, так как он всегда включен по умолчанию. Но может быть отключен вручную, если вам нужно, хотя.

Что касается PB1 для ADC, то же самое. Поскольку он подключен к светодиоду в Maple Mini, они оставили его из списка ADC. Это база кода C8/CB, поэтому он отключен. Скорее всего, нам нужно будет отредактировать некоторые файлы.

РЕДАКТИРОВАТЬ: Я думаю, это покрывает их все.
Таким образом, светодиодная булавка может и делает PWM, D32.
D33 - это кнопка, которая может быть не очень полезной, но должен быть в состоянии сделать это. В официальном Mini, если вы установите его как вывод, а затем нажмите кнопку, вы можете вызвать короткий.
Тогда PA11 является DP-, не должен делать SWM или испортить USB, а PB9-USB-перечислитель, не должен делать SWM или будет испортить USB.
Для общей платы единственная, которую мы не должны разрешать делать ШИМ в нормальных условиях, - это PA11, так как у нас нет светодиодной, кнопки в одном и том же месте, и нет цепи перечисления USB.

Rogerclark
Втюл 07 июля 2015 г., 4:34 утра
Спасибо, Виктор

Странно, что есть некоторые булавки, которые находятся в вики, имеющих ШИМ и которые имеют таймеры, прикрепленные к ним (в карте штифтов), но не функционируют как ШИВ - в соответствии с OP

В любом случае, это не имеет большого значения, но это то, что нужно следить за.

Я даже не уверен, почему определение Boudpwmpins находится в коде, оно не используется, в ядре, но, возможно, для эскизов. Я знаю, что у срока есть что -то подобное

victor_pv
Втюргал 07 июля 2015 г., 16:42
Я проверил доску.CPP для общих плат C, и действительно не хватает каких -либо булавок.
Я думаю, нам придется отредактировать его, чтобы добавить это. Если у меня будет время, когда я вернусь домой, я постараюсь исправить его и отправить запрос на привлечение.

РЕДАКТИРОВАТЬ:
Одна коррекция к тому, почему PIN32 не может использовать PWM на Maple Mini
Помимо подключения к зареги, он подключается к штифте Boot0 и к стянувшемуся 10K резистору.
Я не уверен в влиянии того, что ШИМ на бутанок 0 и перезагрузку, так что Leaflabs, возможно, были осторожны, или даже протестированы и обнаружили, что загрузка ненадежным.
Это, очевидно, не относится к общей плате, поэтому SWM должен быть разрешен там для общих.

Rogerclark
Втюж 07 июля 2015 г., 21:20
Виктор

Я думаю, что должно быть возможно использовать штифт, подключенный к Boot0, без каких -либо проблем, однако установление штифта, подключенного к кнопке, к любой форме выхода, рискует повредить процессор, если кнопка была нажата.

Общие платы будут варьироваться в зависимости от того, что связано с этими двумя контактами, но в общих чертах я был бы больше обеспокоен boot0 как ссылки на прыжки на некоторых досках Short Boot0 на GND

C_D
Втюргал 07 июля 2015 г., 23:51
Конечно, пользователь будет знать, что он определяет пин -код, чтобы сделать что -то неуместное для того, как подключено оборудование?

Я понимаю, что кленовые доски и официальные платы Arduino и т. Д. - это программное обеспечение, ограниченное для соответствия аппаратному обеспечению, но при использовании библиотеки с «общими» платами и пользовательскими платами, основанными на пользователях, я бы подумал, что можно было бы применить любую подходящую функцию PIN для любого способного PIN.

Даже на доске Arduino, если вы установите вывод на вывод, а затем сократите его, чтобы заземлить свою собственную глупую ошибку ;)

Rogerclark
Ср. 8 июля 2015 г. 12:15
@C_d

Если вы посмотрите на PINMAP на общих платах, вы обнаружите, что все булавки определены.

Итак, вы можете использовать их все.

Однако, если есть какой -то код, который запускает и предотвращает PWM на Boot0 и Maple Mini Boot Pin, мы должны исправить код, если это возможно

C_D
Ср. 8 июля 2015 г. 12:56 утра
Крутые бананы :)

Если мне случится найти это в моих путешествиях, я дам тебе знать!

victor_pv
Ср. 8 июля 2015 г. 5:11
Rogerclark написал:@C_d

Если вы посмотрите на PINMAP на общих платах, вы обнаружите, что все булавки определены.

Итак, вы можете использовать их все.

Однако, если есть какой -то код, который запускает и предотвращает PWM на Boot0 и Maple Mini Boot Pin, мы должны исправить код, если это возможно

Rogerclark
Ср. 8 июля 2015 г. 5:51 утра
Виктор,

Re: PB9

Извините, это я немного ленив.

То же самое относится и к платам серии V и Z.

У меня не было времени, чтобы посмотреть, какой таймер был связан с каким PIN -кодом, поэтому я установил их все на NULL, ожидая вернуться к нему вскоре после этого, но, как всегда, необходимо было сделать еще несколько срочных исправлений, и я закончил Забывая, что это нужно сделать.

В документах (RM00008), похоже, PB9 связан с таймером 4,


Мне нужно также проверить, есть ли какие -либо другие контакты E, G, PC13, связанные с ними таймеры, и обновить не только серию C, но и серию R V и Z (The Z займет некоторое время, так как его многое получило. GPIO !)

victor_pv
Ср. 8 июля 2015 г. 15:49
Rogerclark написал:Виктор,

Re: PB9

Извините, это я немного ленив.

То же самое относится и к платам серии V и Z.

У меня не было времени, чтобы посмотреть, какой таймер был связан с каким PIN -кодом, поэтому я установил их все на NULL, ожидая вернуться к нему вскоре после этого, но, как всегда, необходимо было сделать еще несколько срочных исправлений, и я закончил Забывая, что это нужно сделать.

В документах (RM00008), похоже, PB9 связан с таймером 4,


Мне нужно также проверить, есть ли какие -либо другие контакты E, G, PC13, связанные с ними таймеры, и обновить не только серию C, но и серию R V и Z (The Z займет некоторое время, так как его многое получило. GPIO !)

Rogerclark
Ср. 8 июля 2015 г., 21:16
Привет, Виктор,

Я не помню, что PR, но многое происходит, и все сложно отслеживать.

Re: PB9

Я постараюсь проверить, установите ли таймер на этом выводе на Timer4, и посмотрю, разрешает ли он PWM на этом PIN

C_D
Ср. 8 июля 2015 г. 11:29
Мои извинения!!!

Кажется, я привел вас в погоню за дикой гусей. После более тщательного тестирования сегодня утром я могу подтвердить, что все контакты ШИМ, перечисленные в работе PIN_MAP, как и ожидалось. В том числе PB0, PB1 и PB6,7 и 8.

Таким образом, единственная ошибка, по -видимому, заключается в том, что PB9 должен быть связан с Timer4 в PIN_MAP. В настоящее время PB9 не работает как PWM -штифт, который следует ожидать, поскольку его нет в PIN_MAP.

Я также могу подтвердить, что все контакты ADC, перечисленные в работе PIN_MAP, как и ожидалось, включая PB1, который я изначально беспокоился. Таким образом, это действительно свидетельствует о том, что Boudpwmpins [] и BourdAdcpins [] не имеют никакого влияния.

Rogerclark
Ср. 8 июля 2015 г. 11:56
@C_d

Если у вас есть время, можете ли вы изменить свой PINMAP, чтобы добавить Timer4 в PB9 и посмотреть, включает ли это PWM на этом PIN ?

Re: Boardpwmpins и т. Д

Я посмотрю, использует ли кто -нибудь из примеров это или есть ли это срок

Нам было бы лучше иметь некоторые функции утилиты, которые просто проверяют, определяется ли таймер или АЦП на карте PIN для конкретного вывода.
Это меньше, чтобы поддержать и обновлять

C_D
Чт, 09 июля 2015 12:41
Изменение линии следующим образом позволяет PWM на PB9.
{GPIOB, TIMER4, NULL, 9, 4, ADCx}, /* PB9 */

Rogerclark
Чт, 09 июля 2015 г. 12:52
Да

PR - самые простые. Я могу действовать в GitHub, даже не нуждаясь в загрузке кода, если не хочу