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

STM32 для чайника


ART_ME

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

2 часа назад, Электронщик сказал:

Zhuk72 а где у вас включение SPI модуля находится?

В процедуре чтения я делаю

RFID_NSS = 0;
SPI2->CR1 |= SPI_CR1_SPE;

По завершению делаю обратный процесс.

Кстати, еще одна полезность в 103-м и аналогичных, имеющих бит-бандинг. На одном из сайтов (к сожалению не помню каком) обнаружил удобные дефайны для работы с портами.

Вписываете это где вам удобно:

Скрытый текст

// PA0..PA15, PB0..PB15, PC13..PC15, PD0..PD1 (STM32C8xx)
// Bit banding
// Input
#define PORTA ((uint32_t *)((0x42000000  + ((0x40010800 + 0x08)-0x40000000)*32)))
#define PORTB ((uint32_t *)((0x42000000  + ((0x40010C00 + 0x08)-0x40000000)*32)))
#define PORTC ((uint32_t *)((0x42000000  + ((0x40011000 + 0x08)-0x40000000)*32)))
#define PORTD ((uint32_t *)((0x42000000  + ((0x40011400 + 0x08)-0x40000000)*32)))
// Output
#define LATA ((uint32_t *)((0x42000000  + ((0x40010800 + 0x0C)-0x40000000)*32)))
#define LATB ((uint32_t *)((0x42000000  + ((0x40010C00 + 0x0C)-0x40000000)*32)))
#define LATC ((uint32_t *)((0x42000000  + ((0x40011000 + 0x0C)-0x40000000)*32)))
#define LATD ((uint32_t *)((0x42000000  + ((0x40011400 + 0x0C)-0x40000000)*32)))

 

Теперь если есть, например светодиод на PC13, то пишете #define LED LATC[13], после чего работаете со светодиодом по имени:

LED = 1;
LED = 0;
LED = ~LED;

Если порт работает на вход, например кнопка на РА1, то назначаете #define BUTTON1 PORTA[1], после чего обращаетесь с кнопкой напрямую по имени.

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

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

У меня проблема случилась, почему -то после заливки кода I2C по регистрам, у меня теперь плата с процом видется как низкоскоростное устройство 

Вот такой скриншот, и шить могу только через ЮАРТ1 через ЮСБ-ТТЛ преобразователь, было у кого - то такое? А через ЮСБ - ТТЛ не удобно шиться, каждый раз перемычка и RESET/

Screenshot_7.jpg.c20fdd3f4f398e8b0db4ece5d5ce3d84.jpg

Zhuk72 f а есть кусочек кода с ДМА, чтобы хоть глянуть как оно работает?

 

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

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

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

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

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

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

Вы там в процессе опытов РА13 и РА14 не зацепили каким-то образом?

И почему не из среды программируете, а отдельной программой?

Скрытый текст

void spi2dma_init(void)
{
// SPI2_MISO - DMA_CH4
// SPI2_MOSI - DMA_CH5
  RCC->AHBENR |= RCC_AHBENR_DMA1EN;
/*1. Set the peripheral register address in the DMA_CPARx register. The data will be
moved from/ to this address to/ from the memory after the peripheral event.*/
  DMA1_Channel4->CPAR = (unsigned long)&SPI2->DR;
  DMA1_Channel5->CPAR = (unsigned long)&SPI2->DR;
/*2. Set the memory address in the DMA_CMARx register. The data will be written to or
read from this memory after the peripheral event.*/
  DMA1_Channel4->CMAR = (unsigned long)&rfid_in[0];
  DMA1_Channel5->CMAR = (unsigned long)&rfid_out[0];
/*3. Configure the total number of data to be transferred in the DMA_CNDTRx register.
After each peripheral event, this value will be decremented.*/
  DMA1_Channel4->CNDTR = 64;
  DMA1_Channel5->CNDTR = 64;
/*4. Configure the channel priority using the PL[1:0] bits in the DMA_CCRx register.*/
  DMA1_Channel4->CCR = DMA_CCR4_PL_0;
  DMA1_Channel5->CCR = DMA_CCR5_PL_0;
/*5. Configure data transfer direction, circular mode, peripheral & memory incremented
mode, peripheral & memory data size, and interrupt after half and/or full transfer in the
DMA_CCRx register.*/
  DMA1_Channel4->CCR |= (DMA_CCR4_MINC | DMA_CCR4_TCIE);                // Per->Mem
  DMA1_Channel5->CCR |= (DMA_CCR5_MINC | DMA_CCR5_DIR | DMA_CCR5_TCIE); // Mem->Per
/*6. Activate the channel by setting the ENABLE bit in the DMA_CCRx register.*/
  DMA1_Channel4->CCR |= DMA_CCR4_EN;
  DMA1_Channel5->CCR |= DMA_CCR5_EN;
  SPI2->CR2 |= (SPI_CR2_RXDMAEN | SPI_CR2_TXDMAEN);
  NVIC_EnableIRQ(DMA1_Channel4_IRQn);
  NVIC_EnableIRQ(DMA1_Channel5_IRQn);
}

void DMA1_IRQHandler(void)
{
  if(DMA1->ISR & DMA_ISR_TCIF4)         // Receive completed.
  {
    DMA1->IFCR &= ~DMA_IFCR_CTCIF4;    // Completion flag clear.
    // Процедура по завершению приема
  }
    else if (DMA1->ISR & DMA_ISR_TCIF5) // Transmit completed.
    {
      DMA1->IFCR &= ~DMA_IFCR_CTCIF5;   // Completion flag clear.
      // Процедура по завершению передачи
    }
}

 

Но в деле я это пока не проверял ))

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

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

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

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

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

Не знаю как но задел, этим кодом ноги отладчика 

/ текущее значение частоты PCLK1 (может быть от 2 до 32, включительно)
//I2C2->CR2 &= ~I2C_CR2_FREQ;
//I2C2->CR2 |= 2;


//2,097 МГц / 100 кГц = 10;

//I2C2->CCR &= ~I2C_CCR_CCR;
I2C2->CCR |= 10;
//I2C2->TRISE = 3;

Киньте пожалуйста как у Вас по скорости выставляется для I2C, а лучше инициализацию, я в инициализации только включил сам модуль I2C, тактирование I2C, с делителями теперь не знаю что делать, по приему передаче похоже на АВР.

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

Регулярные каналы ADC1 (0 - 3), ДМА.

 

F103_ADC_Test_DMA.zip

Да, много всего непонятного, куча режимов и т.д.

@Электронщик Какой у вас отладчик?

в принципе, расчетное время преобразования совпадает с реальным и равен 84 мкс - 4 канала.

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

Кроме всего прочего нужно заглядывать в Errat-у, я тоже с i2c не работал, но глюки там точно были.

@Электронщик попробуйте в STM32 ST-LINK Utility стереть чип, а потом подключить через отладчик.

точно ноги SWD портите, в кубе вы выбирали отладку?

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

Я за I2C спрашиваю, не хотите поиграться? А то что-то я один не могу его добить. Посмотрю потом, как вы настроили номера пинов на номера регулярных каналов

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

так я и пишу что некуда подключить, о если айду в дипе вроде память была, у меня есть софтовый я его на RTC опробовал работает нормально, правда в блок режиме.

 

ну у меня совсем 1 резистор подстроечный, может и у меня не все гладко, я не знаю)

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

Кстати I2C на HAL у меня запустилось давно, правда, вот функция записи и чтения внешней памяти по I2C на HAL у меня не работают почему-то. А по регистрам I2C тоже не могу запустить.

Еще вопрос я так понимаю для осциллографа лучше использовать инжекторные каналы, а не регулярные с ДМА, так как получим большую скорость, так как проц занят АЦП, а не ДМА, который 50% проца использует? Просто набросал себе осцилограф, и думаю как лучше? И еще тоже такой вопрос, в осциллографе смещение входа АЦП делаю половиной напряжения питания, а вот есть такая фишка на АЦП как смещение АЦП, я так понимаю мне его можно использовать для этих целей, а провод с половины питания проца можно убрать? И есть ли функция смещения АЦП в HAL? 

Кстати вычитал, что смещение АЦП предусмотрено только для инжекторных каналов.

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

MasterElectric когда будет время с I2С аппаратным повозиться, ты скажи, а то я сам победить его не могу я тебе и свой набросок могу в личку скинуть, правда он не работает, но что-то близко, а ты как будет время напиши.

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

нашел 24c32a atmel, но на AVR я так и не смог написать библиотеку под него, что-то он замысловатый. Тут нужно теорию вначале почитать, может пример где найду.  

@Электронщик Ну начал, буду мучать 24с64, думаю что поборю 9 регистров всего)

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

 Просто, я кстати RTC DS1307 на АВР по регистрам запустил, а тут через HAL memory write memory read не работает, так же как и память.

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

I2C то ли сложный, то ли глючный. Изучаю http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-libraries-expansions/stsw-stm32020.html На CMSIS примеров почти нет, а те что есть не на 100% стабильно работают судя по всему.

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

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

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

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

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

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

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

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

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

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

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

  • Сообщения

    • В дополнение скажу, что длительность записи файла и воспроизведения соответствует реальной, но объём видеофайла сокращается на длину стоп картинки. Поясню, при одинаковой длительности записи объём файла, записанного на улице меньше объёма файла, записанного в здании. 
    • @Богдан Назаренко , так и ставьте переменный резистор на входе. Почти всегда так делают.
    • А я по наивности думал, что хуже и древнее 741 еще надо поискать, зачем тогда древность подделывать? Оказывается ошибаюсь... Аналог 709 это К553УД1, К140УД1 это было содрано примерно с 702. Но и то, и другое уже прошлый век. Я когда-то (еще в до-Алишные времена) покупал наборы популярных микрух 50шт за 6 баксов, там 741 были тоже. Еще 741 не использовал, но другие микросхемы из набора вроде настоящие. Процессоры у них брал раньше тоже. Не реклама им (и я не в курсе сколько стоит пересылка, тем более сейчас), но мало ли что... https://www.futurlec.com/ValuePacks.shtml 
    • Здравствуйте всем. Не нашёл куда спрашивать - напишу в новой теме. Можно ли считать гальваническую развязку полноценной, если узел измерения со стороны 220в и узел после разделительного оптрона запитаны просто от раздельных обмоток на одном трансформаторе? Это схема гальванической развязкой от сети 220В, для получения на выходе после оптрона выпрямленного постоянного напряжения. Всем спасибо, ибо гложут меня сомнения.
    • На любом СТО (задаром) берете отработанный фильтр, или в магазине, но за деньги, разрезаете, выбрасываете внутренности, немного приложить руки -и у Вас экран из хорошей мягкой стали. Недостаток - диаметр до 92 мм. Нужен больше - на любой точке  грузового  сервиса можно найти корпуса от масляных и топливных фильтров побольше -до 110...120мм.  Нужны красивые -магазинов посуды навалом. Не благодарите! Пример:
    • Нельзя. Уверен на 100% в её оригинальности.   Снятые на улице, фрагментарно. Другой видеоматериал со всех устройств, нормально. Точно так-же.   Мини камерой снимал ролики не более 100 Мб.   Не понял вопроса.
×
×
  • Создать...