Jump to content

    

Donker

Участник
  • Content Count

    90
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Donker

  • Rank
    Частый гость

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Спасибо, я так и понял, что разработчики ST над нами издеваются. страницу я перепутал, 581 - правильно.
  2. Ладно, допустим с выводом за раз, и без прерываний, массива более 255 байт на STM32F0 через DMA я пролетаю, но как отправить хотя бы 255 байт? Вот так: не отправляется, в ЛА видно что есть старт, и правильно с нормальной скоростью отправляется адрес устройства, и всё, больше никаких байт не идёт и стопа тоже нет. Что не так? Код практически целиком взят из снипетов (см. 1 пост), только изменён I2C2 на I2C1 и канал DMA c 4 на 2 (в снипетах код для STM32F072RBT)
  3. Возникли вопросы по регистру I2C1->CR2 в STM32F030F4: Cудя по дащиту (RM стр. 518) там есть секция "NBYTES" которая имеет размерность 8 бит и куда записывается количество байт для передачи (максимум 255), т.е. по максимуму это выглядит так: I2C1->CR2 = I2C_CR2_AUTOEND | (256<<16) | (OLED_addr_127<<1); /* (3) */ я правильно понимаю, что этота секция не даст отправить вподряд более 255 байт между "старт-адрес-..байты...-стоп"? Этот же регистр не даст передать по DMA более 255 байт вподряд, хотя у DMA есть регистр DMA1_Channel2->CNDTR куда можно записать уже 16 бит ?
  4. Нашёл ошибку - перепутал AF4 на котором сидит I2C в STM32F030F4 cо смещением номера вывода, правильно так: GPIOA->OTYPER |= GPIO_OTYPER_OT_9 | GPIO_OTYPER_OT_10; /* (1) Open drain for I2C signals */ GPIOA->AFR[1] = (GPIOA->AFR[1] &~ (GPIO_AFRH_AFRH1 | GPIO_AFRH_AFRH2)) | (4 << ((9 - 8) * 4)) | (4 << ((10 - 8) * 4)); /* (2) AF4 for I2C signals */ GPIOA->MODER = (GPIOA->MODER & ~(GPIO_MODER_MODER9 | GPIO_MODER_MODER10)) | (GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1); /* (3) Select AF mode (0b10) on PA9 and PA10 */ Поток пошёл, сейчас разбираюсь с порядком следования байт.
  5. Пока решил заняться STM32F030F4, для STM32F030F4 у меня работает только ногодрыг, не получается запустить аппаратный I2C, вот часть кода: может кто нибудь заметит ошибку, пока что в ЛА невидно вообще никакой активности на линиях I2C они сидят в высоком уровне даже в момент ресета.
  6. Arlleex спасибо, буду разбираться. Заметил что использую 4 канал, а надо 6.
  7. Что-то не работает моя переделка снипета от F0 Вот часть кода: Если раскомментировать в функции OLED_SendScreen пересылку без DMA - тогда работает, если выполнить OLED_SendScreen в том виде как сейчас, в ЛА видно что происходит "условие старт", после чего линии лежат в нуле и ничего не передаётся. Снипет смотрел этот:
  8. Я просто не пойму почему в версии проекта с ногодрыгом я отправлял абсолютно все байты, включая адрес, на экран одной функцией: а в аппаратной версии, если попытаюсь вместо I2C_SendAddr использовать I2C_SendByte, адрес отправляется, экран нормально реагирует, но происходит бесконечное зависание на этапе ожидания бита подтверждения отправки байта: while (0 == (I2C1->SR1 & I2C_SR1_TXE)){}
  9. Как отправить массив (uint8_t) по I2C через DMA на STM32F105RBT6 или STM32F030F4 используя CMSIS? Желательно сначала разобраться как это сделать на STM32F105RBT6 а потом перенести код на STM32F030F4. Сейчас я отправляю на STM32F105RBT6 без DMA буффер OLED экрана (SSD1306 128x32) таким образом: как сюда прикрутить DMA? Можно как то обойтись без функции I2C_SendAddr используя только I2C_SendByte (добавив адрес в начало массива) что бы не ждать пока отправиться байт адреса?
  10. Где находится USART1 у STM32F030F4 ?!

    Я понял откуда я взял неправильную интерпритацию столбцов Alternate functions и Additional functions, я их подсознательно перепутал со столбцами Default и Remap из датащитов из F1xx серии, а вчера начал делать более информативный компонент STM32F030F4 для DipTrace и случился затык.
  11. Где находится USART1 у STM32F030F4 ?!

    То есть ситуация что в alternate functions могут встречаться более одного варианта разводки периферии по ногам микросхемы - нормальна? Тогда я что то запутался - в чём смысл отдельных столбцов в таблице Alternate functions и Additional functions ? Уже ответили: http://forum.easyelectronics.ru/viewtopic.php?f=35&amp;t=38418&amp;p=591070#p591070
  12. Где находится USART1 у STM32F030F4 ?!

    В колонке Alternate functions должно быть написано где появляется переферия по умолчанию, а в колонке Additional functions варианты куда её можно переназначить и там действительно может быть много вариантов.
  13. Где находится USART1 у STM32F030F4 ?!

    Я тоже там нашёл за 20 сек, все три варианта, поэтому и возник вопрос!
  14. Где находится USART1 у STM32F030F4 ?! Варианты: 1) ноги 6, 7, 8, 9, 10 2) ноги 17, 18 3) ноги 20 (только USART1_TX) Ссылка на даташит: https://www.st.com/resource/en/datasheet/stm32f030f4.pdf
  15. Вот что мне надо было: можете предложить как сэкономить байт другой флеша или оперативки, а также предложить научно обоснованную поправку вместо "30" , она явно великовата, но ЛА через ногодрыг PB1 трудно понять погрешности самого ногодрыга. На DWT всё это было технически совершенней особенно нравилась что первой строкой: DWT->CYCCNT = 0; //Обнуляем счетчик начинался отсчёт и поправка требовалась меньше.