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

STM32 для чайника


ART_ME

Рекомендуемые сообщения

ну подковать язык и прописать. У вас в функции указатель на пустой тип приводится к конкретному типу. Надо посмотреть доку на компилятор и почитать как это должно происходить по его мнению. Возможно это поможет. Дока на компилятор обычно лежит гдето в папках среды разработки, если он встроен. Понятно что на идише, поэтому придется чуть поднапрячься.

Я обычно таких сложностей стараюсь избегать. Чем проще код, тем он понятнее и меньше багов

возможно вместо этой ерунды

reinterpret_cast<const uint8_t*>(buf);

прокатит простое явное приведение типа

(uint8_t*)buf;

дуриновски обьектный код это жопа полная. Старайтесь его избегать

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • 2 недели спустя...

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Вопрос такой, есть модуль у которого SPI 8МГц, к нему хочу прикинуть СТМ32, при максимальной частоте тактирования СТМ32 72МГц, я могу поделить частоту для тактирования SPI либо на 4,5МГц, либо на 9Мгц, так вот мне настроить частоту тактирования SPI на 4,5Мгц, или на 9МГц? Или частота тактирования модуля если 8МГц, и если я не настрою частоту тактирования SPI на СТМ32 на 8МГц, (а на СТМ32  на 8МГц никак не настроишь, как не менял делители, что основной шины что APB2, всеравно делиться на 4,5МГц, или на 9МГц), я не смогу с ним общаться?

Еще вопрос, какой функцией в IAR заменить функцию min? А то IAR ругается

Изменено пользователем Электронщик
Ссылка на комментарий
Поделиться на другие сайты

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

MDG_Lab глянул только что библиотеку СТМ32, попробуй так: build.f_cpu=72000000L, или так f_cpu=72000000L, или так menu.cpu_speed=CPU Speed(MHz)  прописать после include

Нет в кубе не здесь, смотри RCC в кубе, а ты таймер смотришь для ШИМ

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

Ой, не увидел). В арудино я знаю используют функцию analogWrite(номер пина ШИМ,65000),  максимальная 65000 для СТМ ширина импульса, попробуй может на СТМ работает, не забывай что ШИМ есть на определенных пинах, а для куба да то что нужно, только в счетчик пропиши, допустим 800 ну и prescaler - делитель частоты настрой 72МГц/4 допустим получаем 17МГц. 800 получаем 21кГц ШИМ, в пульс вбиваешь коэффициент заполнения

Ответьте на мои вопросы, пожалуйста.

Изменено пользователем Электронщик
Ссылка на комментарий
Поделиться на другие сайты

Спасибо.

Работаю с pwmWrite(P,  S).  где P - пин, он же порт, S - заполнение периода, в диапазоне 0..65535 

Но при этом не могу прописать частоту ШИМ. похоже мне нужно в раздел Arduino))

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

в Arduino библиотеках ШИМ в основном 490Гц, а так в ардуино прописуй регистрами частоты делителей APB1 APB2, в зависимости от таймера на котором сидит ШИМ, я так делал в ардуино для Атмег, скорее всего и для СТМ так же

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

Попробуй в конце setup прописать вот так вот TIM4_PSC=4; ну или другой делитель, или в Loop если так ничего не даст, ну и номер таймера смотри под свой вывод

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

Здравствуйте! Подозреваю что сгорел порт B в STM32F100C8, написал вот такую тестовую программу:
 

#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"

void init (void){
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    GPIO_InitTypeDef(gpio);
    gpio.GPIO_Mode = GPIO_Mode_Out_PP;
    gpio.GPIO_Pin = GPIO_Pin_All;
    GPIO_Init(GPIOB, &gpio);


    gpio.GPIO_Mode = GPIO_Mode_Out_PP;
    gpio.GPIO_Pin = GPIO_Pin_All;
    GPIO_Init(GPIOA, &gpio);

}


int main(void)
{
    init();

    while(1)
    {
        GPIO_SetBits(GPIOA, GPIO_Pin_All);
        GPIO_SetBits(GPIOB, GPIO_Pin_All);
    }
}

 

По идее на всех выводах портов A и B должна быть лог.1, но на порте В везде 0. Выходит он все таки сгорел?
После стирания прошивки на выводах порта А так и остается 1. Не понимаю что происходит.

Изменено пользователем forestdozor
Не удается спрятать код под спойлер
Ссылка на комментарий
Поделиться на другие сайты

forestdozor, добавь задержку после GPIO_SetBits(GPIOB, GPIO_Pin_All); , допустим HAL_Delay(1000);

И исправь

GPIO_InitTypeDef(gpio);

gpio.GPIO_Mode = GPIO_Mode_Out_PP;

gpio.GPIO_Pin = GPIO_Pin_All;, //здесь на  gpio.GPIO_Pin = GPIO_Pin_Bll;

GPIO_Init(GPIOB, &gpio);

 

gpio.GPIO_Mode = GPIO_Mode_Out_PP;

gpio.GPIO_Pin = GPIO_Pin_All;

GPIO_Init(GPIOA, &gpio);

И к тому же ты не весь порт ни А ни В включаешь, а определенный вывод

 

 

MDG_Lab попробуй либо так прописать  в конце setup  или в Loop если так ничего не даст, ну и номер таймера смотри под свой вывод

Вроде  в ардуино записываются так регистры

TIM4->PSC = 4; // делитель

TIM1->ARR = 800;//значение перезагрузки

 

Или так, как не будет ругаться пробуй :

TIM4_PSC=4; // делитель

TIM1_ARR = 800;//значение перезагрузки

При таких значениях получишь ШИМ 21кГц, ну используя функцию ардуино pwmWrite, которую ты используешь, скажи что получилось

Изменено пользователем Электронщик
Ссылка на комментарий
Поделиться на другие сайты

А то у него All по английски, не увидел))) ,  но в любом случае  у него ошибка что в инициализации, что в основном цикле, так же как и то что он якобы включает весь порт, все же как пример для включения пина, раньше так писал

 GPIO_SetBits(GPIOD, GPIO_Pin_15);  

Для включения всего порта используй регистр порта, там все просто, либо ищи функцию для своего компилятора, для включения порта, а так ты используешь функцию включения одного пина и хочешь включить все пины

Изменено пользователем Электронщик
Ссылка на комментарий
Поделиться на другие сайты

Запихнул программу практически без изменений на платке Discovery с stm32f3, там все хорошо, напряжение есть на выводах портов А и В, а вот с этой МК по прежнему все глухо.
Хотя и добавил уже задержку, и подкорректиовал код. Видимо кирдык stmке, жаль...

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

Ну значить сгорел, если оно так, или возможно что именно ноги проца порта И отошли от платки, прозвони их до контактов платки на которых меряешь напряжение

Что ты на порт В то грузил?

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

Я уже все звонил,  оно с самого начала как-то отказалось работать. Сначала грешил на программатор, потом на прошивку, но когда даже тестовая не заработала пришел сюда...
В нагрузке был дисплей Nokia 5510 из этого проекта: https://ut5qbc.blogspot.com/2016/10/si5351.html

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

Вопрос такой, в ардуино прописал для библиотеки радиомодуля nrf24,  используя стандартную функцию SPI.transfer стандартной библиотеки  SPI, команда записи регистра адрес 0x20,  регистр маски по адресу 0x1F и сам регистр радиомодуля( переменная reg4) в который мы пишем то что нам нужно

SPI.transfer (0x20|(0x1F & reg4));
SPI.transfer(value);// данные в регистр reg4, это мы пока не рассматриваем, это чтобы было понятно

 

А в IAR, я не пойму как правильно отправлять это как три байта, или же как один ведь (0x20|(0x1F & reg4)); это по сути (0x20+(0x1F * reg4)); а значить один байт и отправлять так:

void  SPI_transfer( uint8_t reg4){
  SPI1->DR=(0x20|(0x1F & reg4));
  while (SPI1->SR&SPI_SR_BSY==1);  
}

Или отправлять как два байта?

void  SPI_transfer( uint8_t reg4){
  SPI1->DR=(0x20);
  while (SPI1->SR&SPI_SR_BSY==1);
  
    SPI1->DR=(0x1F & reg4 );
  while (SPI1->SR&SPI_SR_BSY==1);  
}

Или отправлять как три отдельных байта?

void  SPI_transfer( uint8_t reg4){
  SPI1->DR=(0x20);
  while (SPI1->SR&SPI_SR_BSY==1);
  
    SPI1->DR=(0x1F );
  while (SPI1->SR&SPI_SR_BSY==1);  

SPI1->DR=( reg4 );
  while (SPI1->SR&SPI_SR_BSY==1);  
}

 

 

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

Уже глянул лабу ардуино отправляется как один байт, не пеойму тогда почему лаба которую написал на Атмеге работает, на STM как всегда нужно что-то допиливать

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

В 01.10.2017 в 00:23, Электронщик сказал:

 

При таких значениях получишь ШИМ 21кГц, ну используя функцию ардуино pwmWrite, которую ты используешь, скажи что получилось

Как испробую обязательно отпишу. Сейчас просто нет возможность замерить нормально частоту.

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

добрый день!
подскажите, как настроить дебагер в кейле, чтоб работал логический анализатор. и вообще поддерживает ли st link v2 данные вещи?

у меня плата ф407 дискавери, кеил 4

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • извините, вопрос наверное больше про характеристики ID5S605 или MAX 4544, но в других разделах меня удаляют.  Мое предположение, что указанные микросхемы надежные и помехи на них влиять не могут. К сожалению оба варианта не лучшие, MAX 4544 до 12V,  а ID5S605 прибавляет сопротивление к первичной обмотке. Каков смысл-  есть заводской блок Bosch EZL со всеми нужными функциями, но к сожалениию радающий через трамблер. Он продолжает работать как есть, только катушка глушится.  У него имеется выход для тахометра TD, который  копирует момент подачи искры выхода на катушку( предположительно вероятно на 99%). Для детектирования нужной пары цилиндров используется самодельный январь типа мегасквирта, в моем случае это фазированый  secu3.  По неизвестной причине у него зажигание с накоплением  регулируется только в пределах -60+40 градусов, а впрыск доступен на все 360.  Соответвенно получается такая комбинация:   или     Что скжете про надежность и работоспособность таких деталек? MAX4541-MAX4544 switch.pdf ID5S605 high speed power MOSFET IGBT Driver.pdf
    • Вот про это поподробней: Напряжение батарейки типа "Крона" около 9 вольт, какой "эффект" можно получить, касаясь её выводов голыми руками? Эффект "ничего"?
    • ))) Главное не наводить пациентов на мысль что сейчас их будут лечить этим прибором )
    • Не нужно фото всех режимов прикладывать, это никому не интересно. А надо внимательно осмотреть механизм головки на предмет наличия в зазоре между рамкой и магнитами посторонних предметов: металлической стружки, пыли, волосков, насекомых и т.п. Аккуратно подвигать стрелку зубочисткой, пытаясь "поймать" момент заклинивания. Насколько вообще сама рамка ровная, не цепляет ли она за магнитную систему. Если механизм подвеса рамки на подшипниках, убедиться, что рамка не имеет люфта вдоль оси вращения или не зажата слишком сильно. Проверить состояние спиральных пружин - не цепляются ли витки пружин друг за друга или за рамку при отклонении стрелки. Проверить положение противовесов, не задевают ли они за что-либо. Проверить, что сама стрелка не изогнута и не задевает за шкалу или защитное стекло. Убедится, что защитное стекло - это именно стекло, а не прозрачный акрил. (Например, когда-то стекло было разбито и его заменили.) Был такой прикол с некоторыми тестерами: акриловое стекло электризовалось и стрелка притягивалась к нему, застревала в случайном положении. Вот сколько всего можно сделать, чтобы найти причину, причём, это надо делать собственными руками и глазами, выкладывание фотографий тут никак не поможет. От употребления слова "кажется" при ремонте техники лучше воздерживаться, надо точно убедиться, что дело обстоит именно так, как предполагается. Все признаки неисправности указывают на механическую проблему с головкой, и, в первую очередь, надо рассматривать этот вариант.
    • G и D прозваниваются, сопротивление 40 ом, красный щуп на S, черный на G - прозванивается, сопротивление 0, то есть напрямую идет. S и D тоже звонится, сопротивление 0. Выходит микруха эта сдохла?
    • Вы их похоже подключаете параллельно, это не правильно, нужно подключать через согласующее устройство. Для начала можно попробовать конденсаторно-резисторную развязку.
×
×
  • Создать...