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

STM32 для чайника


ART_ME

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

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

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

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

reinterpret_cast<const uint8_t*>(buf);

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

(uint8_t*)buf;

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

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

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

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

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

Вопрос такой, есть модуль у которого 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 ругается

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 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 пользователей онлайн

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

  • Сообщения

    • В былые годы запрещалось размещать на форуме бессмысленные темы. Видать, с тех пор правила существенно изменились.
    • скачай новый архив. там есть важные изменения в комповой программе, по сравнению с той, что я отправлял в личке. исправлены недоделки и добавлены проверки на некорректные действия.
    • Здесь все индивидуально, точного ответа нет. Тип фоторезиста, качество фотошаблона, расстояние и время засветки, длина волны св.диодов, "полоскание" в химии ... Надо все пробовать самому, ручками, опыт придет со временем, ничего сложного там нет. На форуме есть ветка, почитайте.
    • Привет.  Хочу попробовать поработать с фоторезистом. Есть пару десятков ультрафиолетовых светодиодов, общей мощностью 4 вата. Хватит ли этой мощности для обработки платок размером 10 на 10 см или надо искать что-то дополнительно? 
    • Чтобы меньше было излучения, нужно мотать тороидальную. Возможно для повышения добротности по омическому сопротивлению лучше этот ТОР мотать в пару слоев. Если ее намотать на шило, то она вряд ли будет вообще работать как катушка.   Индуктивность прямо пропорциональна площади сечения, которая в свою очередь прямо пропорциональна квадрату диаметра. К тому же индуктивность в обратной пропорции с длиной намотки.
    • Я в ходе отладки выяснил, что сбоит в функции:  void w25qWritingByUSB(uint32_t dpagenum, uint8_t *bufByUSB) При чем поведение очень странное. Отладочные сообщения даже не выводятся в начале функции. В ходе экспериментов понял что связано это с объявлением массивов и решил объявить большие буферы которые на 4КБ и 0.25КБ: uint8_t current_sector_buf[4096]; uint8_t buf[256]; глобально. В оригинале, буферы объявлялись локально в функции. После изменения буквально двух строчек кода, все заработало. Также, в оригинальном проекте было сильно напутано из функциями. Я решил функции выкинуть из main.c и вставить в w25q.c Эти функции: void w25qEraseSector(uint16_t sector) void w25qWritingByUSB(uint32_t dpagenum, uint8_t *bufByUSB) Поиск данной проблемы реально отобрало кучу времени. На будущее буду знать что и такое бывает...
×
×
  • Создать...