STM32 новичку в ARM что к чему
- prinv
- Вымогатель припоя
- Сообщения: 677
- Зарегистрирован: Чт янв 20, 2011 09:07:08
- Откуда: Пермь
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Нет проблем убрать со "свистка" 3.3 вольт, оставив только 3 провода. А питание пойдёт через разъём USB.
Никакая контра не уйдёт от нас
- Реклама
Re: STM32 новичку в ARM что к чему
Питание будет от того что выдает большее напряжение, а через другой питание поступать не будет. Это примерно как с двумя диодами.240265 писал(а):Интересно , чей стабилизатор крепче?
Re: STM32 новичку в ARM что к чему
Снова про ST-Link, о котором я писал выше. Он у меня такой как на картинке. Прошивать его не стал. Просто сделал с ним то, что делал раньше с нерабочими флешками, блютуз коннекторами, вайфай свистками, и что порой помогало: погнул немного туда-сюда плату отладчика пальцами. На короткое время помогло, отладчик обнаружился виндой, и последняя поставила к нему драйвера. Непропай, короче. Как будет время, сниму с платы термоусадку и хорошенько пропаяю. Но, сначала накатаю претензию в Алиэкспресс.

Астролябия-сама меряет, было бы что мерять!!!
Re: STM32 новичку в ARM что к чему
Ну что, смыл я с платы отладчика какую-то засохшую гадость (вероятно китайский флюс), пропаял с православной спирто-канифолью, убрав попутно лишний припой из под выводов микроконтроллера. Отладчик стал надежно определятся системой, видится из утилиты ST-Link, из Keil. Теперь надо попробовать чего-нибудь отладить.
Астролябия-сама меряет, было бы что мерять!!!
- Реклама
Re: STM32 новичку в ARM что к чему
Вопрос ко спецам языка C. Конечно процессор не STM32, а MSP432, но тоже ARM. Я тут корректирую программу, чтобы оно работало на двух почти похожих устройствах. И вот мне в ней нужно зажигать и гасить светодиод. Вот только в старом девайсе светодиод один, а в новом их два. И второй светодиод оказался на другом порту.
И сделал я такой дефайн:В скобки заключать не стал, так как оно вызывается само или с параметром 0, или 1.
Так вот меня гложут сомнения. Конечно, результат операции присваивания есть результат правой части, т.е. X должен прописаться в оба регистра. Но так как они волатильные не повлияет ли это на то, что они читаются как 0?
Просто, когда я включил - четные светодиоды странно моргали (или нечетные). поэтому пришлось написать просто:И вот думаю, где я не понимаю.
И сделал я такой дефайн:
Код: Выделить всё
#ifdef RSLK_MAX
#define IRLED(x) BITBAND_PERI(P5->OUT, 3) = BITBAND_PERI(P9->OUT, 2) = x
#else
#define IRLED(x) BITBAND_PERI(P5->OUT, 3) = x /* port 5 pin 3 */
#endif
Так вот меня гложут сомнения. Конечно, результат операции присваивания есть результат правой части, т.е. X должен прописаться в оба регистра. Но так как они волатильные не повлияет ли это на то, что они читаются как 0?
Просто, когда я включил - четные светодиоды странно моргали (или нечетные). поэтому пришлось написать просто:
Код: Выделить всё
#define IRLED(x) BITBAND_PERI(P5->OUT, 3) = x; BITBAND_PERI(P9->OUT, 2) = x А люди посмотрят и скажут: "Собаки летят. Вот и осень."
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Имхо, x присвоится только порту P9. А уже порту P5 - содержимое P9, через чтение-запись.
Справа налево, в общем.
Справа налево, в общем.
Re: STM32 новичку в ARM что к чему
[uquote="WiseLord",url="/forum/viewtopic.php?p=3721658#p3721658"]Имхо, x присвоится только порту P9. А уже порту P5 - содержимое P9, через чтение-запись.[/uquote]
В С++20 запретили для volatile переменных подобное присваивание как неоднозначное, можно только по отдельности присваивать, так что возможно тут все на усмотрение компилятора.
В С++20 запретили для volatile переменных подобное присваивание как неоднозначное, можно только по отдельности присваивать, так что возможно тут все на усмотрение компилятора.
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Вымучил в конце-концов классический USB CDC. Под приставками еще не проверял - дома такого дерьма не держу, на днях можно будет на работе на чьем-нибудь компьютере проверить.
Вот под андроидом почему-то не работает. Хотя, вроде бы там должны быть абсолютно те же модули ядра! Ан нет, видимо, и это тивоизировали, сволочи!
Где бы достать список VID/PID обычных CDC, чтобы терминал на андроиде "увидел" их?
Вот под андроидом почему-то не работает. Хотя, вроде бы там должны быть абсолютно те же модули ядра! Ан нет, видимо, и это тивоизировали, сволочи!
Где бы достать список VID/PID обычных CDC, чтобы терминал на андроиде "увидел" их?
- Ярослав555
- Поставщик валерьянки для Кота
- Сообщения: 2081
- Зарегистрирован: Пт май 31, 2013 17:14:38
- Откуда: Украина, Винница
Re: STM32 новичку в ARM что к чему
[uquote="Asmodey",url="/forum/viewtopic.php?p=3720485#p3720485"]Ну что, смыл я с платы отладчика какую-то засохшую гадость (вероятно китайский флюс), пропаял с православной спирто-канифолью, убрав попутно лишний припой из под выводов микроконтроллера. Отладчик стал надежно определятся системой, видится из утилиты ST-Link, из Keil. Теперь надо попробовать чего-нибудь отладить.[/uquote]
Я купил два изолятора для юсб на али. Когда приехали - заработал только один. Разобрал второй - заметил соплю припоя на маске. Легко соскоблилась и платка заработала. А еще китайцы не припаивают крепежные усики юсб разьема...
Я купил два изолятора для юсб на али. Когда приехали - заработал только один. Разобрал второй - заметил соплю припоя на маске. Легко соскоблилась и платка заработала. А еще китайцы не припаивают крепежные усики юсб разьема...
- daaar
- Держит паяльник хвостом
- Сообщения: 920
- Зарегистрирован: Пн июн 13, 2016 19:37:24
- Откуда: Perm
- Контактная информация:
С чего начать изучение STM32?
Появилась у меня отладочная плата STM32L476G-DISCO. До этого работал только с AVR и решил что надо двигаться вперед. С чего стоит начать?
И что такое MFX и для чего нужен?
И что такое MFX и для чего нужен?
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32 новичку в ARM что к чему
daaar, начинать надо с чего-нибудь простого, вроде STM32F030. А не с cortex-m4, на который один только RM будешь месяц читать...
- daaar
- Держит паяльник хвостом
- Сообщения: 920
- Зарегистрирован: Пн июн 13, 2016 19:37:24
- Откуда: Perm
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Думаю что это не так, я же не собираюсь с ходу лезть в какую-то сложную переферию
Re: STM32 новичку в ARM что к чему
daaar, светодиодом помигать, с чего же ещё
Что на F0, что на F7 это делается одинаково. Создаём проект, настраиваем систему тактирования, порты, мигаем в цикле, затем медленно переходим к базоваму таймеру и мигаем в прерывании. Прерывание нужно разрешить не только в самом таймере, но и в конроллере прерываний (NVIC), попутно познакомившись и с ним.
Иван Сусанин - первый полупроводник 
-
Novice user
- Мудрый кот
- Сообщения: 1704
- Зарегистрирован: Вт янв 05, 2016 10:14:25
- Откуда: поселок Мелеуз
Re: STM32 новичку в ARM что к чему
Уважаемые коты,как переделать настройку АЦП в режим интерлив?
В DUAL MODE переделал без проблем-
ADC_CommonInitStructure.ADC_Clock = ADC_Clock_AsynClkMode;
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1; // Доступ DMA к общему регистру, при 12-бит оцифровке
ADC_CommonInitStructure.ADC_DMAMode = ADC_DMAMode_Circular;
ADC_CommonInitStructure.ADC_TwoSamplingDelay = 0x0;
ADC_CommonInit(ADC1, &ADC_CommonInitStructure);
В DUAL MODE переделал без проблем-
Спойлер
ADC_CommonInitStructure.ADC_Mode = ADC_Mode_RegSimul;ADC_CommonInitStructure.ADC_Clock = ADC_Clock_AsynClkMode;
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1; // Доступ DMA к общему регистру, при 12-бит оцифровке
ADC_CommonInitStructure.ADC_DMAMode = ADC_DMAMode_Circular;
ADC_CommonInitStructure.ADC_TwoSamplingDelay = 0x0;
ADC_CommonInit(ADC1, &ADC_CommonInitStructure);
-
Novice user
- Мудрый кот
- Сообщения: 1704
- Зарегистрирован: Вт янв 05, 2016 10:14:25
- Откуда: поселок Мелеуз
Re: STM32 новичку в ARM что к чему
[uquote="Novice user",url="/forum/viewtopic.php?p=3732298#p3732298"]Уважаемые коты,как переделать настройку АЦП в режим интерлив?
В DUAL MODE переделал без проблем-
ADC_CommonInitStructure.ADC_Clock = ADC_Clock_AsynClkMode;
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1; // Доступ DMA к общему регистру, при 12-бит оцифровке
ADC_CommonInitStructure.ADC_DMAMode = ADC_DMAMode_Circular;
ADC_CommonInitStructure.ADC_TwoSamplingDelay = 0x0;
ADC_CommonInit(ADC1, &ADC_CommonInitStructure);[/uquote]
Решено,всем спасибо!
В DUAL MODE переделал без проблем-
Спойлер
ADC_CommonInitStructure.ADC_Mode = ADC_Mode_RegSimul;ADC_CommonInitStructure.ADC_Clock = ADC_Clock_AsynClkMode;
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1; // Доступ DMA к общему регистру, при 12-бит оцифровке
ADC_CommonInitStructure.ADC_DMAMode = ADC_DMAMode_Circular;
ADC_CommonInitStructure.ADC_TwoSamplingDelay = 0x0;
ADC_CommonInit(ADC1, &ADC_CommonInitStructure);
Решено,всем спасибо!
Re: STM32 новичку в ARM что к чему
В кои-то веки решил воспользоваться кубом, чтобы по-быстрому набросать макет обмена данными по параллельному восьмибитному интерфейсу. По-быстрому, впрочем, не получилось, т.к. сразу же налетел на грабли, заботливо подложенные стм-овскими индусами. Итак, по порядку. Беру голубую пилюлю (stm32f103cb), раскидываю ноги в кубе следующим образом:
PA0-PA7 -- все в режиме выхода, состояние у всех высокое (лог. 1). Компилирую код, запускаю в отладку и обнаруживаю, что после выполнения MX_GPIO_Init() все пины продолжают пребывать в состоянии логического нуля. Попытки вразумить куб, перегенерить код и прочее ни к чему не приводят. Лезу в код. С виду все в порядке:
Выполнение строки
переводит нужные мне пины в высокое состояние, но длится это не долго, т.к. вызов LL_GPIO_Init(GPIOA, &GPIO_InitStruct); шестью строками ниже возвращает все в исходную. Лезу смотреть, что же там в этом волшебном ините и обнаруживаю совершенно ишемический код и настоящую сокровищницу индусской программистской мысли:
Из вышеприведенного следует, что индусы пребывают в абсолютной уверенности, что подтягивать пины (вверх или вниз) надлежит вне зависимости от того, как сконфигурирован пин: как вход или выход. Это подтверждает вызов
абсолютно для всех инициализируемых пинов. Это не было бы проблемой для F0 или F3-F4 где пуллап/пулдаун задается состоянием отдельного регистра, но на F1 направление подтяжки (вверх/вниз) указывается в регистре ODR. Это если пин в режиме входа. Если пин в режиме выхода, то через этот же самый ODR управляют состоянием выхода. И вот эти белозубые улыбчивые дебилы со всей этой своей первобытной решительностью начинают "подтягивать" выход. Через ODR. К земле. Ну молодцы, фигли.
Спойлер

Код: Выделить всё
static void MX_GPIO_Init(void) {
LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOC);
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOD);
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA);
LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_0|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_3
|LL_GPIO_PIN_4|LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7);
GPIO_InitStruct.Pin = LL_GPIO_PIN_0|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_3
|LL_GPIO_PIN_4|LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7;
GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}Код: Выделить всё
LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_0|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_3
|LL_GPIO_PIN_4|LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7);Спойлер
Код: Выделить всё
ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStruct)
{
uint32_t pinmask;
uint32_t pinpos;
uint32_t currentpin;
/* Check the parameters */
assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
assert_param(IS_LL_GPIO_PIN(GPIO_InitStruct->Pin));
/* ------------------------- Configure the port pins ---------------- */
/* Initialize pinpos on first pin set */
pinmask = ((GPIO_InitStruct->Pin) << GPIO_PIN_MASK_POS) >> GPIO_PIN_NB;
pinpos = POSITION_VAL(pinmask);
/* Configure the port pins */
while ((pinmask >> pinpos) != 0u)
{
/* skip if bit is not set */
if ((pinmask & (1u << pinpos)) != 0u)
{
/* Get current io position */
if (pinpos < GPIO_PIN_MASK_POS)
{
currentpin = (0x00000101uL << pinpos);
}
else
{
currentpin = ((0x00010001u << (pinpos - GPIO_PIN_MASK_POS)) | 0x04000000u);
}
/* Check Pin Mode and Pin Pull parameters */
assert_param(IS_LL_GPIO_MODE(GPIO_InitStruct->Mode));
assert_param(IS_LL_GPIO_PULL(GPIO_InitStruct->Pull));
/* Pin Mode configuration */
LL_GPIO_SetPinMode(GPIOx, currentpin, GPIO_InitStruct->Mode);
/* Pull-up Pull-down resistor configuration*/
LL_GPIO_SetPinPull(GPIOx, currentpin, GPIO_InitStruct->Pull);
if ((GPIO_InitStruct->Mode == LL_GPIO_MODE_OUTPUT) || (GPIO_InitStruct->Mode == LL_GPIO_MODE_ALTERNATE))
{
/* Check speed and Output mode parameters */
assert_param(IS_LL_GPIO_SPEED(GPIO_InitStruct->Speed));
assert_param(IS_LL_GPIO_OUTPUT_TYPE(GPIO_InitStruct->OutputType));
/* Speed mode configuration */
LL_GPIO_SetPinSpeed(GPIOx, currentpin, GPIO_InitStruct->Speed);
/* Output mode configuration*/
LL_GPIO_SetPinOutputType(GPIOx, currentpin, GPIO_InitStruct->OutputType);
}
}
pinpos++;
}
return (SUCCESS);
}Код: Выделить всё
/* Pull-up Pull-down resistor configuration*/
LL_GPIO_SetPinPull(GPIOx, currentpin, GPIO_InitStruct->Pull);
Re: STM32 новичку в ARM что к чему
а зачем вызывать SetOutputPin (да и что угодно еще gpio-шное) перед GPIO_Init?
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Вот и a5021 недоумевает, зачем кодогенератор так делает.
-
DrobyshevAlex
- Открыл глаза
- Сообщения: 74
- Зарегистрирован: Пн янв 21, 2019 17:38:29
Re: STM32 новичку в ARM что к чему
Здравствуйте! Подскажите, есть дисплей

Хочу заказать МК STM32F407VGT6 но в ДШ примечание
Хочу заказать МК STM32F407VGT6 но в ДШ примечание
Будет ли мой дисплей работать с данным МК по FSMC?For the LQFP100 and WLCSP90 packages, only FSMC Bank1 or Bank2 are available. Bank1 can only support a multiplexed NOR/PSRAM memory using the NE1 Chip
Select. Bank2 can only support a 16- or 8-bit NAND Flash memory using the NCE2 Chip Select. The interrupt line cannot be used since Port G is not available in this
package.


